aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoraclement <aclement>2004-07-29 12:39:42 +0000
committeraclement <aclement>2004-07-29 12:39:42 +0000
commit45bce91f642a86ca3db7238d9e4cfb81d85e4f5b (patch)
tree9b4d06e48ff89d0771ed4f13007a70f4ca81dc6a
parent770a4d6a1474764dd24e292e0404c04c44f33d90 (diff)
downloadaspectj-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.xml13
-rw-r--r--tests/bugs/EllipsesStar.java13
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/PatternParser.java16
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) {