All Downloads are FREE. Search and download functionalities are using the official Maven repository.

xapi.bytecode.ClassMap Maven / Gradle / Ivy

Go to download

Everything needed to run a comprehensive dev environment. Just type X_ and pick a service from autocomplete; new dev modules will be added as they are built. The only dev service not included in the uber jar is xapi-dev-maven, as it includes all runtime dependencies of maven, adding ~4 seconds to build time, and 6 megabytes to the final output jar size (without xapi-dev-maven, it's ~1MB).

The newest version!
/*
 * Javassist, a Java-bytecode translator toolkit.
 * Copyright (C) 1999- Shigeru Chiba. All Rights Reserved.
 *
 * The contents of this file are subject to the Mozilla Public License Version
 * 1.1 (the "License"); you may not use this file except in compliance with
 * the License.  Alternatively, the contents of this file may be used under
 * the terms of the GNU Lesser General Public License Version 2.1 or later,
 * or the Apache License Version 2.0.
 *
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 * for the specific language governing rights and limitations under the
 * License.
 *
 * MODIFIED BY James Nelson of We The Internet, 2013.
 * Repackaged to avoid conflicts with different versions of Javassist,
 * and modified Javassist APIs to make them more accessible to outside code.
 */
package xapi.bytecode;

public class ClassMap extends java.util.HashMap {
	private static final long serialVersionUID = 7429196218655312033L;
	private ClassMap parent;

    /**
     * Constructs a hash table.
     */
    public ClassMap() { parent = null; }

    ClassMap(ClassMap map) { parent = map; }

    /**
     * Maps a class name to another name in this hashtable.
     * The names are obtained with calling Class.getName().
     * This method translates the given class names into the
     * internal form used in the JVM before putting it in
     * the hashtable.
     *
     * @param oldname   the original class name
     * @param newname   the substituted class name.
     */
    public void put(CtClass oldname, CtClass newname) {
        put(oldname.getName(), newname.getName());
    }

    /**
     * Maps a class name to another name in this hashtable.
     * If the hashtable contains another mapping from the same
     * class name, the old mapping is replaced.
     * This method translates the given class names into the
     * internal form used in the JVM before putting it in
     * the hashtable.
     *
     * 

If oldname is identical to * newname, then this method does not * perform anything; it does not record the mapping from * oldname to newname. See * fix method. * * @param oldname the original class name. * @param newname the substituted class name. * @see #fix(String) */ public void put(String oldname, String newname) { if (oldname == newname) { return; } String oldname2 = toJvmName(oldname); String s = (String)get(oldname2); if (s == null || !s.equals(oldname2)) { super.put(oldname2, toJvmName(newname)); } } /** * Is equivalent to put() except that * the given mapping is not recorded into the hashtable * if another mapping from oldname is * already included. * * @param oldname the original class name. * @param newname the substituted class name. */ public void putIfNone(String oldname, String newname) { if (oldname == newname) { return; } String oldname2 = toJvmName(oldname); String s = (String)get(oldname2); if (s == null) { super.put(oldname2, toJvmName(newname)); } } protected final void put0(Object oldname, Object newname) { super.put(oldname, newname); } /** * Returns the class name to wihch the given jvmClassName * is mapped. A subclass of this class should override this method. * *

This method receives and returns the internal representation of * class name used in the JVM. * * @see #toJvmName(String) * @see #toJavaName(String) */ @Override public Object get(Object jvmClassName) { Object found = super.get(jvmClassName); if (found == null && parent != null) { return parent.get(jvmClassName); } else { return found; } } /** * Prevents a mapping from the specified class name to another name. */ public void fix(CtClass clazz) { fix(clazz.getName()); } /** * Prevents a mapping from the specified class name to another name. */ public void fix(String name) { String name2 = toJvmName(name); super.put(name2, name2); } /** * Converts a class name into the internal representation used in * the JVM. */ public static String toJvmName(String classname) { return Descriptor.toJvmName(classname); } /** * Converts a class name from the internal representation used in * the JVM to the normal one used in Java. */ public static String toJavaName(String classname) { return Descriptor.toJavaName(classname); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy