aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoraclement <aclement>2008-05-13 19:54:27 +0000
committeraclement <aclement>2008-05-13 19:54:27 +0000
commita8739e3359b0da1fdb60e2201f8fe37265aa9d04 (patch)
tree4aa7f8da90639b8d806aec468b815eae2701e547
parent73f8338a1cc6a329b3e3a1738cda25bc07723197 (diff)
downloadaspectj-a8739e3359b0da1fdb60e2201f8fe37265aa9d04.tar.gz
aspectj-a8739e3359b0da1fdb60e2201f8fe37265aa9d04.zip
231467: fix: allow for a type signature like [ITE; - it means int[],E and not just E !
-rw-r--r--weaver/src/org/aspectj/weaver/TypeFactory.java27
1 files changed, 20 insertions, 7 deletions
diff --git a/weaver/src/org/aspectj/weaver/TypeFactory.java b/weaver/src/org/aspectj/weaver/TypeFactory.java
index 699f07de7..9db8e3489 100644
--- a/weaver/src/org/aspectj/weaver/TypeFactory.java
+++ b/weaver/src/org/aspectj/weaver/TypeFactory.java
@@ -223,17 +223,30 @@ public class TypeFactory {
while(!remainingToProcess.equals("")) {
int endOfSig = 0;
int anglies = 0;
- boolean sigFound = false;
+ boolean sigFound = false; // OPTIMIZE can this be done better?
for (endOfSig = 0; (endOfSig < remainingToProcess.length()) && !sigFound; endOfSig++) {
char thisChar = remainingToProcess.charAt(endOfSig);
switch(thisChar) {
- case '<' : anglies++; break;
- case '>' : anglies--; break;
- case ';' :
- if (anglies == 0) {
- sigFound = true;
+ case '<' : anglies++; break;
+ case '>' : anglies--; break;
+ case '[' :
+ if (anglies == 0) {
+ // the next char might be a [ or a primitive type ref (BCDFIJSZ)
+ int nextChar = endOfSig+1;
+ while (remainingToProcess.charAt(nextChar)=='[') { nextChar++; }
+ if ("BCDFIJSZ".indexOf(remainingToProcess.charAt(nextChar))!=-1) {
+ // it is something like [I or [[S
+ sigFound = true;
+ endOfSig = nextChar;
+ break;
+ }
+ }
break;
- }
+ case ';' :
+ if (anglies == 0) {
+ sigFound = true;
+ break;
+ }
}
}
types.add(createTypeFromSignature(remainingToProcess.substring(0,endOfSig)));