]> source.dussan.org Git - javassist.git/commitdiff
minor bug fixes
authorchiba <chiba@30ef5769-5b8d-40dd-aea6-55b5d6557bb3>
Tue, 29 Aug 2006 08:39:32 +0000 (08:39 +0000)
committerchiba <chiba@30ef5769-5b8d-40dd-aea6-55b5d6557bb3>
Tue, 29 Aug 2006 08:39:32 +0000 (08:39 +0000)
git-svn-id: http://anonsvn.jboss.org/repos/javassist/trunk@319 30ef5769-5b8d-40dd-aea6-55b5d6557bb3

src/main/javassist/ClassMap.java
src/main/javassist/CtBehavior.java

index 916dee5eda83bf7103c0f02cbce58f65930168c7..95aa757d548e1fef94e26257a8fec51200340aac 100644 (file)
@@ -61,12 +61,21 @@ public class ClassMap extends java.util.HashMap {
 
     /**
      * 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.
      *
+     * <p>If <code>oldname</code> is equivalent to
+     * <code>newname</code>, then this method does not
+     * perform anything; it does not record the mapping from
+     * <code>oldname</code> to <code>newname</code>.  See
+     * <code>fix</code> 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)
@@ -78,6 +87,33 @@ public class ClassMap extends java.util.HashMap {
             super.put(oldname2, toJvmName(newname));
     }
 
+    /**
+     * Maps a class name to another name unless another mapping
+     * has been already recorded.
+     * This method translates the given class names into the
+     * internal form used in the JVM before putting it in
+     * the hashtable.
+     *
+     * <p>If <code>oldname</code> is equivalent to
+     * <code>newname</code>, then this method does not
+     * perform anything; it does not record the mapping from
+     * <code>oldname</code> to <code>newname</code>.  See
+     * <code>fix</code> method.
+     *
+     * @param oldname   the original class name
+     * @param newname   the substituted class name.
+     * @see #fix(String)
+     */
+    public void add(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);
     }
index 9be97ebac6e33a544060b204f3a0187e95c4241c..d01773b25084d74f52fa46851027632165033f69 100644 (file)
@@ -47,18 +47,20 @@ public abstract class CtBehavior extends CtMember {
         if (map == null)
             map = new ClassMap();
 
-        map.put(srcClass.getName(), declaring.getName());
+        map.add(srcClass.getName(), declaring.getName());
         try {
             boolean patch = false;
             CtClass srcSuper = srcClass.getSuperclass();
-            String destSuperName = declaring.getSuperclass().getName();
-            if (srcSuper != null) {
+            CtClass destSuper = declaring.getSuperclass();
+            String destSuperName = null;
+            if (srcSuper != null && destSuper != null) {
                 String srcSuperName = srcSuper.getName();
+                destSuperName = destSuper.getName();
                 if (!srcSuperName.equals(destSuperName))
                     if (srcSuperName.equals(CtClass.javaLangObject))
                         patch = true;
                     else
-                        map.put(srcSuperName, destSuperName);
+                        map.add(srcSuperName, destSuperName);
             }
 
             methodInfo = new MethodInfo(cp, srcInfo.getName(), srcInfo, map);