瀏覽代碼

Fix for Bugzilla Bug 61536

	  	Front-end bug, shouldn't allow patterns of the form foo.., should be foo..*
tags/for_ajdt1_1_12
aclement 20 年之前
父節點
當前提交
45bce91f64
共有 3 個檔案被更改,包括 41 行新增1 行删除
  1. 13
    0
      tests/ajcTests.xml
  2. 13
    0
      tests/bugs/EllipsesStar.java
  3. 15
    1
      weaver/src/org/aspectj/weaver/patterns/PatternParser.java

+ 13
- 0
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>

+ 13
- 0
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());
}

+ 15
- 1
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) {

Loading…
取消
儲存