@@ -67,6 +67,14 @@ public class InterTypeFieldDeclaration extends InterTypeDeclaration { | |||
EclipseFactory world = EclipseFactory.fromScopeLookupEnvironment(upperScope); | |||
ResolvedMember sig = munger.getSignature(); | |||
TypeX aspectType = EclipseFactory.fromBinding(upperScope.referenceContext.binding); | |||
if (sig.getReturnType() == ResolvedTypeX.VOID || | |||
(sig.getReturnType().isArray() && (sig.getReturnType().getComponentType() == ResolvedTypeX.VOID))) | |||
{ | |||
upperScope.problemReporter().signalError(sourceStart, sourceEnd, | |||
"field type can not be void"); | |||
} | |||
// | |||
// System.err.println("sig: " + sig); | |||
// System.err.println("field: " + world.makeFieldBinding( | |||
@@ -129,6 +137,8 @@ public class InterTypeFieldDeclaration extends InterTypeDeclaration { | |||
EclipseFactory world = EclipseFactory.fromScopeLookupEnvironment(classScope); | |||
resolveOnType(classScope); | |||
if (classScope.referenceContext.binding == null) return null; | |||
binding = classScope.referenceContext.binding.resolveTypesFor(binding); | |||
if (ignoreFurtherInvestigation) return null; | |||
@@ -108,13 +108,14 @@ public class EclipseFactory { | |||
if (binding instanceof HelperInterfaceBinding) { | |||
return ((HelperInterfaceBinding) binding).getTypeX(); | |||
} | |||
if (binding.qualifiedSourceName() == null) { | |||
if (binding == null || binding.qualifiedSourceName() == null) { | |||
return ResolvedTypeX.MISSING; | |||
} | |||
return TypeX.forName(getName(binding)); | |||
} | |||
public static TypeX[] fromBindings(TypeBinding[] bindings) { | |||
if (bindings == null) return TypeX.NONE; | |||
int len = bindings.length; | |||
TypeX[] ret = new TypeX[len]; | |||
for (int i=0; i<len; i++) { |
@@ -5610,4 +5610,24 @@ | |||
<compile files="TransactionTest.java,sub/ExecutionMonitor.java,sub/ObserverProtocol.aj"/> | |||
<run class="TransactionTest"/> | |||
</ajc-test> | |||
<ajc-test dir="bugs" pr="34210" | |||
title="thisJoinPoint.getArgs() causes IncompatibleClassChangeError"> | |||
<compile files="ThisJoinPointAndVerifier.java"/> | |||
<run class="ThisJoinPointAndVerifier"/> | |||
</ajc-test> | |||
<ajc-test dir="errors" keywords="error" | |||
title="inter-type declaration of void field"> | |||
<compile files="VoidFieldDeclarationCE.java"> | |||
<message kind="error" line="7"/> | |||
</compile> | |||
</ajc-test> | |||
<ajc-test dir="binding" | |||
title="no such constructor for proceed argument (error)"> | |||
<compile files="UnfoundConstructor.java"> | |||
<message kind="error" line="25"/> | |||
</compile> | |||
</ajc-test> | |||
</suite> |
@@ -67,5 +67,9 @@ | |||
</compile> | |||
</ajc-test> | |||
<ajc-test dir="bugs" pr="33948" | |||
title="default constructor inter-type declaration"> | |||
<compile files="ConstructorDeclaration.java"/> | |||
<run class="ConstructorDeclaration"/> | |||
</ajc-test> | |||
</suite> |
@@ -52,19 +52,6 @@ | |||
</compile> | |||
</ajc-test> | |||
<ajc-test dir="binding" | |||
title="no such constructor for proceed argument (error)"> | |||
<compile files="UnfoundConstructor.java"> | |||
<message kind="error" line="25"/> | |||
</compile> | |||
</ajc-test> | |||
<ajc-test dir="bugs" pr="33948" | |||
title="default constructor inter-type declaration"> | |||
<compile files="ConstructorDeclaration.java"/> | |||
<run class="ConstructorDeclaration"/> | |||
</ajc-test> | |||
<ajc-test dir="errors" keywords="error" | |||
title="class extending abstract aspect"> | |||
<compile files="ClassExtendingAbstractAspectCE.java"> | |||
@@ -72,13 +59,6 @@ | |||
</compile> | |||
</ajc-test> | |||
<ajc-test dir="errors" keywords="error" | |||
title="inter-type declaration of void field"> | |||
<compile files="VoidFieldDeclarationCE.java"> | |||
<message kind="error" line="7"/> | |||
</compile> | |||
</ajc-test> | |||
<ajc-test dir="incremental/stringliteral" | |||
title="incrementally change string size and wire in injar classes"> | |||
<compile staging="true" options="-incremental" | |||
@@ -104,4 +84,10 @@ | |||
before main packageOne.Main"/> | |||
</ajc-test> | |||
<ajc-test dir="bugs" pr="34206" | |||
title="before():execution(new(..)) does not throw NoAspectBoundException"> | |||
<compile files="AspectInitError.java"/> | |||
<run class="AspectInitError"/> | |||
</ajc-test> | |||
</suite> |
@@ -0,0 +1,23 @@ | |||
/** Bugzilla Bug 34206 | |||
before():execution(new(..)) does not throw NoAspectBoundException */ | |||
public class AspectInitError { | |||
public static void main(String[] args) { | |||
//Watchcall.aspectOf(); | |||
AspectInitError c = new AspectInitError(); | |||
} | |||
} | |||
aspect Watchcall { | |||
pointcut myConstructor(): execution(new(..)); | |||
before(): myConstructor() { | |||
System.err.println("Entering Constructor"); | |||
} | |||
after(): myConstructor() { | |||
System.err.println("Leaving Constructor"); | |||
} | |||
} |
@@ -0,0 +1,28 @@ | |||
/** Bugzilla Bug 34210 | |||
thisJoinPoint.getArgs() causes IncompatibleClassChangeError */ | |||
public class ThisJoinPointAndVerifier { | |||
public void method() { | |||
System.out.println("Executed method"); | |||
} | |||
public static void main(String args[]) { | |||
ThisJoinPointAndVerifier td = new ThisJoinPointAndVerifier(); | |||
td.method(); | |||
} | |||
} | |||
aspect Log1 { | |||
pointcut logged_method() : | |||
call(* ThisJoinPointAndVerifier.*(..)); | |||
after() : logged_method() { | |||
Object[] args = thisJoinPoint.getArgs(); | |||
System.out.println ("Log1a: leaving " + thisJoinPoint.getSignature()); | |||
} | |||
// comment this advice for scenario 2 | |||
after() : logged_method() { | |||
//VM crash on scenario 1 | |||
//Object[] args = thisJoinPoint.getArgs(); | |||
System.out.println ("Log1b: leaving " + thisJoinPoint.getSignature()); | |||
} | |||
} |
@@ -1,5 +1,26 @@ | |||
<!DOCTYPE suite SYSTEM "../tests/ajcTestSuite.dtd"> | |||
<suite> | |||
<ajc-test dir="new/declare" pr="31724" | |||
title="omnibus declare warning context" | |||
comment="XXX untested: no source context shown"> | |||
<compile files="DeclareWarning.java"> | |||
<message kind="warning" line="5"/> | |||
<message kind="warning" line="12"/> | |||
<message kind="warning" line="13"/> | |||
<message kind="warning" line="14"/> | |||
<message kind="warning" line="15"/> | |||
<message kind="warning" line="16"/> | |||
<message kind="warning" line="17"/> | |||
<message kind="warning" line="18"/> | |||
<message kind="warning" line="21"/> | |||
<message kind="warning" line="22"/> | |||
<message kind="warning" line="23"/> | |||
<message kind="warning" line="33"/> | |||
<message kind="warning" line="36"/> | |||
<message kind="warning" line="39"/> | |||
<message kind="warning" line="74"/> | |||
</compile> | |||
</ajc-test> | |||
<!-- | |||