Browse Source

456457: unresolvable member fix. Testcode for 456801,455608

tags/V1_8_5
Andy Clement 9 years ago
parent
commit
7569aad932

+ 2
- 2
org.aspectj.matcher/src/org/aspectj/weaver/MemberImpl.java View File

@@ -105,14 +105,14 @@ public class MemberImpl implements Member {
StringBuilder buf = new StringBuilder();
buf.append("(");
for (UnresolvedType paramType : paramTypes) {
if (eraseGenerics && (paramType.isParameterizedType() || paramType.isTypeVariableReference())) {
if (eraseGenerics) {
buf.append(paramType.getErasureSignature());
} else {
buf.append(paramType.getSignature());
}
}
buf.append(")");
if (eraseGenerics && (returnType.isParameterizedType() || returnType.isTypeVariableReference())) {
if (eraseGenerics) {
buf.append(returnType.getErasureSignature());
} else {
buf.append(returnType.getSignature());

+ 17
- 0
testing/newsrc/org/aspectj/testing/XMLBasedAjcTestCase.java View File

@@ -11,6 +11,7 @@
* ******************************************************************/
package org.aspectj.testing;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FilenameFilter;
@@ -313,6 +314,22 @@ public abstract class XMLBasedAjcTestCase extends AjcTestCase {
ClassPath cp = new ClassPath(cpentry + File.pathSeparator + System.getProperty("java.class.path"));
return SyntheticRepository.getInstance(cp);
}
protected byte[] loadFileAsByteArray(File f) {
try {
byte[] bs = new byte[100000];
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(f));
int pos = 0;
int len = 0;
while ((len=bis.read(bs, pos, 100000-pos))!=-1) {
pos+=len;
}
bis.close();
return bs;
} catch (Exception e) {
return null;
}
}

public JavaClass getClassFrom(File where, String clazzname) throws ClassNotFoundException {
SyntheticRepository repos = createRepos(where);

+ 16
- 0
tests/bugs185/455608/Code2.java View File

@@ -0,0 +1,16 @@
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Bar(String)
@Foo("abc")
public class Code2 {

}

@Retention(RetentionPolicy.RUNTIME)
@interface Foo { String value();}

@Retention(RetentionPolicy.RUNTIME)
@interface Bar {
Class<?>[] value();
}

+ 17
- 0
tests/bugs185/455608/Code3.java View File

@@ -0,0 +1,17 @@
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Bar(value=String,i=4)
//@Foo("abc")
public class Code3 {

}

@Retention(RetentionPolicy.RUNTIME)
@interface Foo { String value();}

@Retention(RetentionPolicy.RUNTIME)
@interface Bar {
Class<?>[] value();
int i();
}

+ 13
- 0
tests/bugs185/456357/DummyClass.java View File

@@ -0,0 +1,13 @@
public class DummyClass {
@LogMe
public void doSomething() {
SampleUtil sampleUtil = new SampleUtil();
// pass null for simplicity !
sampleUtil.sampleMethod(null);
System.out.println("Do Something");
}

public static void main(String[] args) {
new DummyClass().doSomething();
}
}

+ 5
- 0
tests/bugs185/456357/LogMe.java View File

@@ -0,0 +1,5 @@
import java.lang.annotation.*;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface LogMe {}

+ 10
- 0
tests/bugs185/456357/SampleAspect.java View File

@@ -0,0 +1,10 @@
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;

aspect SampleAspect {
//@Aspect public class SampleAspect {
//@Before("@annotation(logMe)") public void beforeAdvice(JoinPoint thisJoinPoint, LogMe logMe) {
before(LogMe logMe): @annotation(logMe) {
System.out.println(thisJoinPoint);
}
}

+ 5
- 0
tests/bugs185/456357/SampleUtil.java View File

@@ -0,0 +1,5 @@
import java.util.Map;

public class SampleUtil {
public void sampleMethod(Map<String, Object>[] mapArray) {}
}

+ 5
- 0
tests/multiIncremental/456801/base/src/Code.java View File

@@ -0,0 +1,5 @@
public class Code {
public static void run() {
System.out.println("run() running");
}
}

+ 5
- 0
tests/multiIncremental/456801/base/src/X.java View File

@@ -0,0 +1,5 @@
aspect X {
before(): execution(* run(..)) {
System.out.println("advice runnning");
}
}

+ 5
- 0
tests/multiIncremental/456801/inc1/src/X.java View File

@@ -0,0 +1,5 @@
aspect X {
before(): execution(* run(..)) {
System.out.println("advice running");
}
}

+ 29
- 0
tests/src/org/aspectj/systemtest/ajc185/Ajc185Tests.java View File

@@ -10,10 +10,15 @@
*******************************************************************************/
package org.aspectj.systemtest.ajc185;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;

import junit.framework.Test;

import org.aspectj.apache.bcel.classfile.JavaClass;
import org.aspectj.apache.bcel.classfile.annotation.AnnotationGen;
import org.aspectj.org.eclipse.jdt.internal.compiler.classfmt.ClassFileReader;
import org.aspectj.testing.XMLBasedAjcTestCase;

/**
@@ -21,6 +26,30 @@ import org.aspectj.testing.XMLBasedAjcTestCase;
*/
public class Ajc185Tests extends org.aspectj.testing.XMLBasedAjcTestCase {

public void testUnresolvableMember_456357() throws Exception {
runTest("unresolvable member");
}
// Waiting on JDT fix. Second test is a 'variant' that is also causing me issues but not JDT it seems. Let's
// see what happens when we pick up the real fixes.
// public void testBadAnnos_455608() throws Exception {
// runTest("bad annos");
// JavaClass jc = getClassFrom(ajc.getSandboxDirectory(), "Code2");
// File f = new File(ajc.getSandboxDirectory(), "Code2.class");
// byte[] data = loadFileAsByteArray(f);
// // Will throw ClassFormatException if there is a problem
// new ClassFileReader(data, null);
// }
//
// public void testBadAnnos_455608_2() throws Exception {
// runTest("bad annos 2");
// JavaClass jc = getClassFrom(ajc.getSandboxDirectory(), "Code3");
// File f = new File(ajc.getSandboxDirectory(), "Code3.class");
// byte[] data = loadFileAsByteArray(f);
// // Will throw ClassFormatException if there is a problem
// new ClassFileReader(data, null);
// }
public void testITDInterface_451966() throws Exception {
runTest("itd interface");
}

+ 17
- 0
tests/src/org/aspectj/systemtest/ajc185/ajc185.xml View File

@@ -2,6 +2,23 @@

<suite>

<ajc-test dir="bugs185/456357" title="unresolvable member">
<compile files="DummyClass.java LogMe.java SampleAspect.java SampleUtil.java" options="-1.7">
</compile>
</ajc-test>

<ajc-test dir="bugs185/455608" title="bad annos">
<compile files="Code2.java" options="-1.8 -proceedOnError">
<message kind="error" text="String cannot be resolved to a variable"/>
</compile>
</ajc-test>

<ajc-test dir="bugs185/455608" title="bad annos 2">
<compile files="Code3.java" options="-1.8 -proceedOnError">
<message kind="error" text="String cannot be resolved to a variable"/>
</compile>
</ajc-test>

<ajc-test dir="bugs185/451966" title="itd interface">
<compile files="Code.java" options="-1.8"/>
<run class="Code">

+ 13
- 0
tests/src/org/aspectj/systemtest/incremental/tools/MultiProjectIncrementalTests.java View File

@@ -3570,6 +3570,19 @@ public class MultiProjectIncrementalTests extends AbstractMultiProjectIncrementa
build("PR154054");
checkWasntFullBuild();
}
public void testIncrementalBuildAdviceChange_456801() throws Exception {
initialiseProject("456801");
build("456801");
String output = runMethod("456801", "Code", "run");
assertEquals("advice runnning\nrun() running\n",output);
alter("456801", "inc1");
build("456801");
output = runMethod("456801", "Code", "run");
assertEquals("advice running\nrun() running\n",output);
checkCompileWeaveCount("456801", 1, 1);
checkWasntFullBuild();
}

// change exception type in around advice, does it notice?
public void testShouldFullBuildOnExceptionChange_pr154054() {

Loading…
Cancel
Save