diff options
author | aclement <aclement> | 2004-07-29 12:39:42 +0000 |
---|---|---|
committer | aclement <aclement> | 2004-07-29 12:39:42 +0000 |
commit | 45bce91f642a86ca3db7238d9e4cfb81d85e4f5b (patch) | |
tree | 9b4d06e48ff89d0771ed4f13007a70f4ca81dc6a | |
parent | 770a4d6a1474764dd24e292e0404c04c44f33d90 (diff) | |
download | aspectj-45bce91f642a86ca3db7238d9e4cfb81d85e4f5b.tar.gz aspectj-45bce91f642a86ca3db7238d9e4cfb81d85e4f5b.zip |
Fix for Bugzilla Bug 61536
Front-end bug, shouldn't allow patterns of the form foo.., should be foo..*
-rw-r--r-- | tests/ajcTests.xml | 13 | ||||
-rw-r--r-- | tests/bugs/EllipsesStar.java | 13 | ||||
-rw-r--r-- | weaver/src/org/aspectj/weaver/patterns/PatternParser.java | 16 |
3 files changed, 41 insertions, 1 deletions
diff --git a/tests/ajcTests.xml b/tests/ajcTests.xml index 024bc1d1e..8b42152d3 100644 --- a/tests/ajcTests.xml +++ b/tests/ajcTests.xml @@ -7819,4 +7819,17 @@ <compile files="PrimitiveCoercionInExactTypePatternMatching.java"/> </ajc-test> + <ajc-test dir="bugs" + pr="61536" title="Front-end bug, shouldn't allow patterns of the form foo.., should be foo..*"> + <compile files="EllipsesStar.java"> + <message kind="error" line="3" text="Syntax error on token"/> + <message kind="error" line="4" text="Syntax error on token"/> + <message kind="error" line="5" text="Syntax error on token"/> + <message kind="error" line="6" text="Syntax error on token"/> + <message kind="error" line="8" text="Syntax error on token"/> + <message kind="error" line="10" text="Syntax error on token"/> + <message kind="error" line="12" text="Syntax error on token"/> + </compile> + </ajc-test> + </suite> diff --git a/tests/bugs/EllipsesStar.java b/tests/bugs/EllipsesStar.java new file mode 100644 index 000000000..940db8a86 --- /dev/null +++ b/tests/bugs/EllipsesStar.java @@ -0,0 +1,13 @@ +// Name patterns can't end with '..' +aspect A { + pointcut endsDot(): call(* java.(..)); + pointcut p1(): call(* java.lang..(..)); + pointcut p2(): call((Integer || java.lang..) m(..)); + pointcut p3(): call(* m() throws java.lang..); + + pointcut p4(): call(* a..b..c..d..(..)); + + pointcut p5(): call(* a....(..)); + + pointcut p6(): call(java. m()); +}
\ No newline at end of file diff --git a/weaver/src/org/aspectj/weaver/patterns/PatternParser.java b/weaver/src/org/aspectj/weaver/patterns/PatternParser.java index 0f0bd3e57..89a168fef 100644 --- a/weaver/src/org/aspectj/weaver/patterns/PatternParser.java +++ b/weaver/src/org/aspectj/weaver/patterns/PatternParser.java @@ -448,12 +448,17 @@ public class PatternParser { List names = new ArrayList(); StringBuffer buf = new StringBuffer(); IToken previous = null; + boolean justProcessedEllipsis = false; // Remember if we just dealt with an ellipsis (PR61536) + boolean justProcessedDot = false; + boolean onADot = false; while (true) { - IToken tok; + IToken tok = null; int startPos = tokenSource.peek().getStart(); String afterDot = null; while (true) { + if (previous !=null && previous.getString().equals(".")) justProcessedDot = true; tok = tokenSource.peek(); + onADot = (tok.getString().equals(".")); if (previous != null) { if (!isAdjacent(previous, tok)) break; } @@ -481,13 +486,22 @@ public class PatternParser { throw new ParserException("expected name pattern", tok); } + if (buf.length() == 0 && justProcessedEllipsis) { + throw new ParserException("name pattern cannot finish with ..", tok); + } + if (buf.length() == 0 && justProcessedDot && !onADot) { + throw new ParserException("name pattern cannot finish with .", tok); + } + if (buf.length() == 0) { names.add(NamePattern.ELLIPSIS); + justProcessedEllipsis = true; } else { checkLegalName(buf.toString(), previous); NamePattern ret = new NamePattern(buf.toString()); ret.setLocation(sourceContext, startPos, endPos); names.add(ret); + justProcessedEllipsis = false; } if (afterDot == null) { |