aboutsummaryrefslogtreecommitdiffstats
path: root/weaver
diff options
context:
space:
mode:
authoraclement <aclement>2008-06-19 23:12:20 +0000
committeraclement <aclement>2008-06-19 23:12:20 +0000
commit3622fc1ed1039b3eedef38823b57160a05f7bac9 (patch)
tree40f59661992388f00be9e792ea8793347bd991e2 /weaver
parent4efdf2ca058714d58d2b99bdfb9f8448a6ba873b (diff)
downloadaspectj-3622fc1ed1039b3eedef38823b57160a05f7bac9.tar.gz
aspectj-3622fc1ed1039b3eedef38823b57160a05f7bac9.zip
merge of splitNames into innerMatchesExactly - reduces number of unnecessary arrays built
Diffstat (limited to 'weaver')
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/WildTypePattern.java39
1 files changed, 23 insertions, 16 deletions
diff --git a/weaver/src/org/aspectj/weaver/patterns/WildTypePattern.java b/weaver/src/org/aspectj/weaver/patterns/WildTypePattern.java
index 34f8c8a50..3be0ebd83 100644
--- a/weaver/src/org/aspectj/weaver/patterns/WildTypePattern.java
+++ b/weaver/src/org/aspectj/weaver/patterns/WildTypePattern.java
@@ -20,6 +20,7 @@ import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
+import org.aspectj.asm.internal.CharOperation;
import org.aspectj.bridge.IMessage;
import org.aspectj.bridge.ISourceLocation;
import org.aspectj.bridge.Message;
@@ -305,7 +306,7 @@ public class WildTypePattern extends TypePattern {
}
//XXX hack
if (knownMatches == null && importedPrefixes == null) {
- return innerMatchesExactly(targetTypeName,isAnonymous, isNested);
+ return innerMatchesExactly(targetTypeName, isAnonymous, isNested);
}
if (isNamePatternStar()) {
@@ -371,27 +372,33 @@ public class WildTypePattern extends TypePattern {
}
- private boolean innerMatchesExactly(String targetTypeName, boolean isAnonymous, boolean isNested) {
- //??? doing this everytime is not very efficient
- char[][] names = splitNames(targetTypeName,isNested);
- return innerMatchesExactly(names, isAnonymous);
- }
-
- private boolean innerMatchesExactly(char[][] names, boolean isAnonymous) {
-
- int namesLength = names.length;
- int patternsLength = namePatterns.length;
+ private boolean innerMatchesExactly(String s, boolean isAnonymous, boolean convertDollar /*isNested*/) {
- int namesIndex = 0;
- int patternsIndex = 0;
+ List ret = new ArrayList();
+ int startIndex = 0;
+ while (true) {
+ int breakIndex = s.indexOf('.', startIndex); // what about /
+ if (convertDollar && (breakIndex == -1)) breakIndex = s.indexOf('$', startIndex); // we treat $ like . here
+ if (breakIndex == -1) break;
+ char[] name = s.substring(startIndex, breakIndex).toCharArray();
+ ret.add(name);
+ startIndex = breakIndex+1;
+ }
+ ret.add(s.substring(startIndex).toCharArray());
+
+ int namesLength = ret.size();
+ int patternsLength = namePatterns.length;
+
+ int namesIndex = 0;
+ int patternsIndex = 0;
if ((!namePatterns[patternsLength-1].isAny()) && isAnonymous) return false;
if (ellipsisCount == 0) {
if (namesLength != patternsLength) return false;
while (patternsIndex < patternsLength) {
- if (!namePatterns[patternsIndex++].matches(names[namesIndex++])) {
+ if (!namePatterns[patternsIndex++].matches((char[])ret.get(namesIndex++))) {
return false;
}
}
@@ -403,7 +410,7 @@ public class WildTypePattern extends TypePattern {
if (p == NamePattern.ELLIPSIS) {
namesIndex = namesLength - (patternsLength-patternsIndex);
} else {
- if (!p.matches(names[namesIndex++])) {
+ if (!p.matches((char[])ret.get(namesIndex++))) {
return false;
}
}
@@ -411,7 +418,7 @@ public class WildTypePattern extends TypePattern {
return true;
} else {
// System.err.print("match(\"" + Arrays.asList(namePatterns) + "\", \"" + Arrays.asList(names) + "\") -> ");
- boolean b = outOfStar(namePatterns, names, 0, 0, patternsLength - ellipsisCount, namesLength, ellipsisCount);
+ boolean b = outOfStar(namePatterns, (char[][])ret.toArray(new char[ret.size()][]), 0, 0, patternsLength - ellipsisCount, namesLength, ellipsisCount);
// System.err.println(b);
return b;
}