diff options
-rw-r--r-- | org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/core/builder/StatefulNameEnvironment.java | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/core/builder/StatefulNameEnvironment.java b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/core/builder/StatefulNameEnvironment.java index 552a409dd..af72b9a9a 100644 --- a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/core/builder/StatefulNameEnvironment.java +++ b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/core/builder/StatefulNameEnvironment.java @@ -13,7 +13,11 @@ package org.aspectj.ajdt.internal.core.builder; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; import java.util.Map; +import java.util.Set; import org.aspectj.weaver.bcel.UnwovenClassFile; import org.eclipse.jdt.core.compiler.CharOperation; @@ -25,11 +29,27 @@ import org.eclipse.jdt.internal.compiler.env.NameEnvironmentAnswer; public class StatefulNameEnvironment implements INameEnvironment { Map classesFromName; + Set packageNames; INameEnvironment baseEnvironment; public StatefulNameEnvironment(INameEnvironment baseEnvironment, Map classesFromName) { this.classesFromName = classesFromName; this.baseEnvironment = baseEnvironment; + + packageNames = new HashSet(); + for (Iterator i = classesFromName.keySet().iterator(); i.hasNext(); ) { + String className = (String)i.next(); + addAllPackageNames(className); + } +// System.err.println(packageNames); + } + + private void addAllPackageNames(String className) { + int dot = className.indexOf('.'); + while (dot != -1) { + packageNames.add(className.substring(0, dot)); + dot = className.indexOf('.', dot+1); + } } public void cleanup() { @@ -38,6 +58,8 @@ public class StatefulNameEnvironment implements INameEnvironment { private NameEnvironmentAnswer findType(String name) { UnwovenClassFile cf = (UnwovenClassFile)classesFromName.get(name); + //System.err.println("find: " + name + " found: " + cf); + if (cf == null) return null; try { @@ -64,9 +86,10 @@ public class StatefulNameEnvironment implements INameEnvironment { } public boolean isPackage(char[][] parentPackageName, char[] packageName) { - //!!! need to use cache here too - return baseEnvironment.isPackage(parentPackageName, packageName); + if (baseEnvironment.isPackage(parentPackageName, packageName)) return true; + String fullPackageName = new String(CharOperation.concatWith(parentPackageName, packageName, '.')); + return packageNames.contains(fullPackageName); } } |