diff options
author | jhugunin <jhugunin> | 2002-12-18 05:08:49 +0000 |
---|---|---|
committer | jhugunin <jhugunin> | 2002-12-18 05:08:49 +0000 |
commit | d38aec6e4f0ffea34a3f46d0148c69a69408e699 (patch) | |
tree | 49fa3c9bfe1a4367c749e2adab0a7d5ec95128ac /org.aspectj.ajdt.core | |
parent | 80f6a5625488080cd0eeb32d54d71d4b6c9ef9a8 (diff) | |
download | aspectj-d38aec6e4f0ffea34a3f46d0148c69a69408e699.tar.gz aspectj-d38aec6e4f0ffea34a3f46d0148c69a69408e699.zip |
more bug fixes for if and privileged
Diffstat (limited to 'org.aspectj.ajdt.core')
7 files changed, 26 insertions, 6 deletions
diff --git a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/IfMethodDeclaration.java b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/IfMethodDeclaration.java index 1bca70dfb..fc96e272d 100644 --- a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/IfMethodDeclaration.java +++ b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/IfMethodDeclaration.java @@ -16,6 +16,7 @@ package org.aspectj.ajdt.internal.compiler.ast; import org.aspectj.ajdt.internal.compiler.lookup.EclipseWorld; import org.aspectj.weaver.*; import org.aspectj.weaver.patterns.IfPointcut; +import org.eclipse.jdt.internal.compiler.*; import org.eclipse.jdt.internal.compiler.CompilationResult; import org.eclipse.jdt.internal.compiler.ast.*; import org.eclipse.jdt.internal.compiler.lookup.*; @@ -36,6 +37,10 @@ public class IfMethodDeclaration extends MethodDeclaration { // do nothing, we're already fully parsed } + protected int generateInfoAttributes(ClassFile classFile) { + return classFile.generateMethodInfoAttribute(binding, AstUtil.getAjSyntheticAttribute()); + } + public void resolveStatements(ClassScope upperScope) { super.resolveStatements(upperScope); if (binding != null) { diff --git a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/InterTypeConstructorDeclaration.java b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/InterTypeConstructorDeclaration.java index 275a3bc04..286161689 100644 --- a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/InterTypeConstructorDeclaration.java +++ b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/InterTypeConstructorDeclaration.java @@ -222,7 +222,7 @@ public class InterTypeConstructorDeclaration extends InterTypeDeclaration { private AjAttribute makeAttribute(EclipseWorld world) { - if (explicitConstructorCall != null) { + if (explicitConstructorCall != null && !(explicitConstructorCall.binding instanceof ProblemMethodBinding)) { MethodBinding explicitConstructor = explicitConstructorCall.binding; if (explicitConstructor.alwaysNeedsAccessMethod()) { explicitConstructor = explicitConstructor.getAccessMethod(); diff --git a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/InterTypeMethodDeclaration.java b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/InterTypeMethodDeclaration.java index 8190809ea..8b54aaf1e 100644 --- a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/InterTypeMethodDeclaration.java +++ b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/InterTypeMethodDeclaration.java @@ -98,7 +98,7 @@ public class InterTypeMethodDeclaration extends InterTypeDeclaration { public void generateCode(ClassScope classScope, ClassFile classFile) { if (ignoreFurtherInvestigation) { - System.err.println("no code for " + this); + //System.err.println("no code for " + this); return; } diff --git a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/SuperFixerVisitor.java b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/SuperFixerVisitor.java index ab564f9f4..6e4afab54 100644 --- a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/SuperFixerVisitor.java +++ b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/SuperFixerVisitor.java @@ -46,6 +46,9 @@ public class SuperFixerVisitor extends AbstractSyntaxTreeVisitorAdapter { if (call.codegenBinding == null) return; MethodBinding superBinding = call.codegenBinding; + if (superBinding instanceof ProblemMethodBinding) { + return; + } char[] accessName; boolean isSuper; if (call.isSuperAccess() && !call.binding.isStatic()) { diff --git a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/lookup/EclipseWorld.java b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/lookup/EclipseWorld.java index f7e74ddc2..7ada86e4f 100644 --- a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/lookup/EclipseWorld.java +++ b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/lookup/EclipseWorld.java @@ -141,7 +141,7 @@ public class EclipseWorld extends World { public static ResolvedMember makeResolvedMember(MethodBinding binding) { return new ResolvedMember( - Member.METHOD, + binding.isConstructor() ? Member.CONSTRUCTOR : Member.METHOD, fromBinding(binding.declaringClass), binding.modifiers, fromBinding(binding.returnType), diff --git a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/lookup/PrivilegedFieldBinding.java b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/lookup/PrivilegedFieldBinding.java index bd5ac958a..d8e7107ee 100644 --- a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/lookup/PrivilegedFieldBinding.java +++ b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/lookup/PrivilegedFieldBinding.java @@ -19,6 +19,7 @@ import org.aspectj.ajdt.internal.compiler.ast.*; import org.aspectj.ajdt.internal.compiler.ast.AstUtil; import org.aspectj.weaver.*; import org.aspectj.weaver.NameMangler; +import org.eclipse.jdt.internal.compiler.ast.*; import org.eclipse.jdt.internal.compiler.ast.FieldDeclaration; import org.eclipse.jdt.internal.compiler.impl.Constant; import org.eclipse.jdt.internal.compiler.lookup.*; @@ -43,6 +44,9 @@ public class PrivilegedFieldBinding extends FieldBinding { AjcMemberMaker.privilegedAccessMethodForFieldSet( inAspect.typeX, inAspect.world.makeResolvedMember(baseField) ))); + + this.constant = AstNode.NotAConstant; + this.baseField = baseField; } @@ -59,8 +63,10 @@ public class PrivilegedFieldBinding extends FieldBinding { public boolean alwaysNeedsAccessMethod(boolean isReadAccess) { return true; } - + public FieldBinding getFieldBindingForLookup() { return baseField; } + + public String toString() { return "PrivilegedWrapper(" + baseField + ")"; } // public ReferenceBinding getTargetType() { // return introducedField.declaringClass; // } diff --git a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/lookup/PrivilegedHandler.java b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/lookup/PrivilegedHandler.java index 640df12b0..ecf773c76 100644 --- a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/lookup/PrivilegedHandler.java +++ b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/lookup/PrivilegedHandler.java @@ -40,9 +40,15 @@ public class PrivilegedHandler implements IPrivilegedHandler { public MethodBinding getPrivilegedAccessMethod(MethodBinding baseMethod) { ResolvedMember key = inAspect.world.makeResolvedMember(baseMethod); if (accessors.containsKey(key)) return (MethodBinding)accessors.get(key); - MethodBinding ret = inAspect.world.makeMethodBinding( + + MethodBinding ret; + if (baseMethod.isConstructor()) { + ret = baseMethod; + } else { + ret = inAspect.world.makeMethodBinding( AjcMemberMaker.privilegedAccessMethodForMethod(inAspect.typeX, key) - ); + ); + } //new PrivilegedMethodBinding(inAspect, baseMethod); accessors.put(key, ret); |