}
public void endVisit(MessageSend send, BlockScope scope) {
if (send instanceof Proceed) return;
- if (send.binding == null) return;
+ if (send.binding == null || !send.binding.isValidBinding()) return;
if (send.isSuperAccess() && !send.binding.isStatic()) {
send.receiver = new ThisReference(send.sourceStart, send.sourceEnd);
}
}
public void endVisit(AllocationExpression send, BlockScope scope) {
- if (send.binding == null) return;
+ if (send.binding == null || !send.binding.isValidBinding()) return;
//XXX TBD
if (isPublic(send.binding)) return;
makePublic(send.binding.declaringClass);
QualifiedTypeReference ref,
BlockScope scope)
{
- makePublic(ref.getTypeBinding(scope)); //??? might be trouble
+ makePublic(ref.resolvedType); //getTypeBinding(scope)); //??? might be trouble
}
public void endVisit(
SingleTypeReference ref,
BlockScope scope)
{
- makePublic(ref.getTypeBinding(scope)); //??? might be trouble
+ makePublic(ref.resolvedType); //getTypeBinding(scope)); //??? might be trouble
}
private FieldBinding getAccessibleField(FieldBinding binding) {
return;
}
}
- /* (non-Javadoc)
- * @see org.eclipse.jdt.internal.compiler.IAbstractSyntaxTreeVisitor#endVisit(org.eclipse.jdt.internal.compiler.ast.AssertStatement, org.eclipse.jdt.internal.compiler.lookup.BlockScope)
- */
+
public void endVisit(AssertStatement assertStatement, BlockScope scope) {
isInlinable = false;
}
- /* (non-Javadoc)
- * @see org.eclipse.jdt.internal.compiler.IAbstractSyntaxTreeVisitor#endVisit(org.eclipse.jdt.internal.compiler.ast.ClassLiteralAccess, org.eclipse.jdt.internal.compiler.lookup.BlockScope)
- */
public void endVisit(ClassLiteralAccess classLiteral, BlockScope scope) {
isInlinable = false;
}
PrivilegedHandler handler = (PrivilegedHandler)upperScope.referenceContext.binding.privilegedHandler;
if (handler == null) {
handler = new PrivilegedHandler((AspectDeclaration)upperScope.referenceContext);
- upperScope.referenceContext.binding.privilegedHandler = handler;
+ //upperScope.referenceContext.binding.privilegedHandler = handler;
}
this.traverse(new MakeDeclsPublicVisitor(), (ClassScope)null);
import java.util.Map;
import org.aspectj.ajdt.internal.compiler.ast.AspectDeclaration;
+import org.aspectj.ajdt.internal.compiler.ast.AstUtil;
import org.aspectj.bridge.ISourceLocation;
import org.aspectj.weaver.AjcMemberMaker;
import org.aspectj.weaver.Lint;
public MethodBinding getPrivilegedAccessMethod(MethodBinding baseMethod, AstNode location) {
if (baseMethod.alwaysNeedsAccessMethod()) return baseMethod;
- ResolvedMember key = inAspect.factory.makeResolvedMember(baseMethod);
+ ResolvedMember key = EclipseFactory.makeResolvedMember(baseMethod);
if (accessors.containsKey(key)) return (MethodBinding)accessors.get(key);
MethodBinding ret;
if (baseMethod.isConstructor()) {
- ret = baseMethod;
+ ret = new MethodBinding(baseMethod, baseMethod.declaringClass);
+ ret.modifiers = AstUtil.makePublic(ret.modifiers);
} else {
ret = inAspect.factory.makeMethodBinding(
AjcMemberMaker.privilegedAccessMethodForMethod(inAspect.typeX, key)
);
}
checkWeaveAccess(key.getDeclaringType(), location);
- //new PrivilegedMethodBinding(inAspect, baseMethod);
+ //System.err.println(ret);
+ //Thread.dumpStack();
accessors.put(key, ret);
return ret;
}
<compile files="TrySwitch.java"/>
<run class="TrySwitch"/>
</ajc-test>
+
+ <ajc-test dir="bugs" pr="39458"
+ title="Compiler crash in ajc 1.1 - terrible error for inaccessible constructor">
+ <compile files="NewVoid.java">
+ <message kind="error" line="17"/>
+ <message kind="error" line="20"/>
+ <message kind="error" line="21"/>
+
+ <message kind="error" line="28"/>
+ <message kind="warning" line="29"/>
+ <message kind="warning" line="30"/>
+ </compile>
+ </ajc-test>
+
+ <ajc-test dir="bugs" pr="39460"
+ title="Missing import crashes compiler">
+ <compile files="MissingImport.java">
+ <message kind="error" line="13"/>
+ </compile>
+ </ajc-test>
</suite>
<!-- contains valid tests that the compiler has never passed -->
<suite>
+
</suite>
--- /dev/null
+import org.aspectj.lang.*;
+import org.aspectj.lang.reflect.*;
+import java.lang.reflect.Method;
+//import java.lang.reflect.InvocationTargetException; <- crash with this line commented out
+
+public aspect MissingImport {
+ Object around() :
+ call(* *(..)) && !within(ImposterProcessing+) {
+ MethodSignature sig = (MethodSignature)thisJoinPoint.getSignature();
+ try {
+ Method meth = ImposterProcessing.class.getMethod("dynamicThrow", new Class[] { Throwable.class });
+ meth.invoke(this, new Object[] { null });
+ } catch (InvocationTargetException e) { // expect CE
+ throw new RuntimeException("framework error in throwing test exception ", e);
+ } catch (IllegalAccessException e) {
+ throw new RuntimeException("framework error in throwing test exception ", e);
+ }
+ return null;
+ }
+}
+
+class ImposterProcessing { }
\ No newline at end of file
--- /dev/null
+import org.aspectj.lang.*;
+import org.aspectj.lang.reflect.*;
+import java.lang.reflect.Method;
+
+public aspect NewVoid {
+ Object around() :
+ call(new(..)) {
+ return proceed();
+ }
+
+
+ Object around() :
+ call(* *(..)) {
+ MethodSignature sig = (MethodSignature)thisJoinPoint.getSignature();
+ Class returnType = sig.getReturnType();
+ if (returnType == java.lang.Void.TYPE) {
+ return new java.lang.Void(); // expect CE here
+ } else {
+ String s = "hi";
+ Xyz xyz = null; // expect CE here
+ int x = s.count; // expect CE here
+ return proceed();
+ }
+ }
+}
+privileged aspect PrivCheck {
+ Object around() : call(* *(..)) {
+ Xyz xyz = null; // expect CE here
+ Object o = new Void(); // expect warning here
+ int x = "goo".count; // expect warning here
+ return null;
+ }
+}
\ No newline at end of file