Browse Source

Tests and fix for Bugzilla Bug 54421

	  	Compile time declarations (warning and error) do not accept string concatenation (with +)
tags/for_ajdt1_1_12
aclement 20 years ago
parent
commit
d43a39103f

+ 49
- 0
tests/bugs/decwStrings.java View File

@@ -0,0 +1,49 @@
class WarningSample {

public void method() {}
public void anotherMethod() {
this.method();
}

}

aspect WarningAspect {

pointcut illegalCall(): call(* WarningSample.method())
&& within(WarningSample);

// the same thing happens with declare error
declare warning: illegalCall() : "Hey, don't " +
"do that, that is not nice. You should do something else";

public void e1() {}
declare warning: execution(* e1(..)): "hello " + /* comment */ "world";

public void e2() {}
declare warning: execution(* e2(..)): "hello " /* comment */ + "world";
public void e3() {}
declare warning: execution(* e3(..)): "hello " + // commenthere
// comment here too
"world";
public void e4() {}
declare warning: execution(* e4()): "hello " //xxx
+ "world";
public void e5() {}
declare warning: execution(* e5()): "hello " //xxx
/* here */
+ "world";
public void e6() {}
declare warning: execution(* e6()): "abc" +
"def" + // def was here
"ghijklmnopqrstuv" /* silly
place
for a
comment */ +
/* oops */
"wxyz";
}


+ 29
- 0
tests/bugs/decwStringsErroneous.java View File

@@ -0,0 +1,29 @@
class WarningSample {

public void method() {}
public void anotherMethod() {
this.method();
}

}

aspect WarningAspect {

pointcut illegalCall(): call(* WarningSample.method())
&& within(WarningSample);

// the same thing happens with declare error
declare warning: illegalCall() : "Hey, don't " +
"do that, that is not nice. You should do something else";

public void e1() {}
declare warning: execution(* e1(..)): "hello " + /* comment */ "world"

public void e2() {}
declare warning: execution(* e2(..)): "hello " /* comment + "world";
public void e3() {}
declare warning: execution(* e3(..)): "hello " + // commenthere
}


+ 10
- 2
tests/src/org/aspectj/systemtest/ajc121/Ajc121Tests.java View File

@@ -139,7 +139,8 @@ public class Ajc121Tests extends org.aspectj.testing.XMLBasedAjcTestCase {
public void test025_proceedInAround3() {
runTest("proceed used as method name in around advice (3)");
}
public void test026_bindingThisAndTargetToTheSameFormal() {
public void test026_bindingThisAndTargetToTheSameFormal() {
runTest("ajc crashes when compiling the following program (binding this() and target())");
}
@@ -155,7 +156,7 @@ public class Ajc121Tests extends org.aspectj.testing.XMLBasedAjcTestCase {
runTest("Valid but inaccessible type names should not be flagged by XLint:invalidAbsoluteTypeName");
}
public void test030_privateITDinitialisersBeingMatched() {
public void test030_privateITDinitialisersBeingMatched() {
runTest("intertype initialisers should match field set pointcuts");
}

@@ -166,6 +167,13 @@ public class Ajc121Tests extends org.aspectj.testing.XMLBasedAjcTestCase {
assertTrue("Expected output '"+exp+"' but got "+getLastRunResult().getStdErr(),
getLastRunResult().getStdErr().equals(exp));
}
public void test032_stringConcatForDEOW() {
runTest("Compile time declarations (warning and error) do not accept string concatenation (with +)");
}

public void test033_stringConcatForDEOWErrorCase() {
runTest("Compile time declarations (warning and error) do not accept string concatenation (with +) (2)");
}
}


+ 22
- 2
tests/src/org/aspectj/systemtest/ajc121/ajc121-tests.xml View File

@@ -203,7 +203,6 @@
<run class="Proceeding3"/>
</ajc-test>


<ajc-test dir="bugs" pr="61572"
title="ITDs on inner classes should be static context">
<compile files="PR61572.aj">
@@ -254,4 +253,25 @@
title="intertype initialisers should match field set pointcuts (oxford testcase)">
<compile files="Oxford.java"/>
<run class="Oxford"/>
</ajc-test>
</ajc-test>
<ajc-test dir="bugs" pr="54421"
title="Compile time declarations (warning and error) do not accept string concatenation (with +)">
<compile files="decwStrings.java">
<message kind="warning" line="5"/>
<message kind="warning" line="19" text="hello world"/>
<message kind="warning" line="22" text="hello world"/>
<message kind="warning" line="25" text="hello world"/>
<message kind="warning" line="30" text="hello world"/>
<message kind="warning" line="34" text="hello world"/>
<message kind="warning" line="39" text="abcdefghijklmnopqrstuvwxyz"/>
</compile>
</ajc-test>
<ajc-test dir="bugs" pr="54421"
title="Compile time declarations (warning and error) do not accept string concatenation (with +) (2)">
<compile files="decwStringsErroneous.java">
<message kind="error" line="22"/>
</compile>
</ajc-test>

+ 27
- 1
weaver/src/org/aspectj/weaver/patterns/PatternParser.java View File

@@ -150,7 +150,7 @@ public class PatternParser {
private Declare parseErrorOrWarning(boolean isError) {
Pointcut pointcut = parsePointcut();
eat(":");
String message = parseStringLiteral();
String message = parsePossibleStringSequence(true);
return new DeclareErrorOrWarning(isError, pointcut, message);
}

@@ -736,6 +736,32 @@ public class PatternParser {
}
}

public String parsePossibleStringSequence(boolean shouldEnd) {
StringBuffer result = new StringBuffer();
IToken token = tokenSource.next();
if (token.getLiteralKind()==null) {
throw new ParserException("string",token);
}
while (token.getLiteralKind().equals("string")) {
result.append(token.getString());
boolean plus = maybeEat("+");
if (!plus) break;
token = tokenSource.next();
if (token.getLiteralKind()==null) {
throw new ParserException("string",token);
}
}
eatIdentifier(";");
IToken t = tokenSource.next();
if (shouldEnd && t!=IToken.EOF) {
throw new ParserException("<string>;",token);
}

return result.toString();
}
public String parseStringLiteral() {
IToken token = tokenSource.next();
String literalKind = token.getLiteralKind();

Loading…
Cancel
Save