]> source.dussan.org Git - aspectj.git/commitdiff
more fixes for privileged
authorjhugunin <jhugunin>
Wed, 18 Dec 2002 05:07:05 +0000 (05:07 +0000)
committerjhugunin <jhugunin>
Wed, 18 Dec 2002 05:07:05 +0000 (05:07 +0000)
org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/FieldReference.java
org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/BlockScope.java
org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/FieldBinding.java
org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/MethodBinding.java
org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ReferenceBinding.java

index 9624fb768da4f6f3a00df934baf11f89ea319e83..d95830ad7c4786d340a694b5cf01a73c26fc1677 100644 (file)
@@ -333,8 +333,8 @@ public class FieldReference extends Reference implements InvocationSite {
 
                SourceTypeBinding typeBinding = (SourceTypeBinding) binding.declaringClass;
                TypeDeclaration typeDecl = typeBinding.scope.referenceContext;
-               FieldDeclaration fieldDecl = typeDecl.declarationOf(binding);
-
+               FieldDeclaration fieldDecl = typeDecl.declarationOf(binding.getFieldBindingForLookup());
+               //System.err.println(typeDecl + " and " + fieldDecl + ", " + binding);
                //what scope to use (depend on the staticness of the field binding)
                MethodScope fieldScope =
                        binding.isStatic()
index 7e795e38cf6362a0867d3348ac96799b4e809088..c32fa6cce8128df3045dca4a9ccc6eb7b02d3945 100644 (file)
@@ -922,13 +922,19 @@ public class BlockScope extends Scope {
                ReferenceBinding receiverType,
                TypeBinding[] argumentTypes,
                InvocationSite invocationSite) {
+                       
+               IPrivilegedHandler handler = findPrivilegedHandler(invocationType());
 
                compilationUnitScope().recordTypeReference(receiverType);
                compilationUnitScope().recordTypeReferences(argumentTypes);
                MethodBinding methodBinding = receiverType.getExactConstructor(argumentTypes);
-               if (methodBinding != null)
-                       if (methodBinding.canBeSeenBy(invocationSite, this))
+               if (methodBinding != null) {
+                       if (methodBinding.canBeSeenBy(invocationSite, this)) {
                                return methodBinding;
+                       } else if (handler != null) {
+                               return handler.getPrivilegedAccessMethod(methodBinding);
+                       }
+               }
 
                MethodBinding[] methods =
                        receiverType.getMethods(ConstructorDeclaration.ConstantPoolName);
index 81e55d1e8ce359f711fdca4b9de29a98d1454de8..166a3e55c8474945118f8708fa756b91dbdd01ad 100644 (file)
@@ -215,4 +215,6 @@ public boolean alwaysNeedsAccessMethod(boolean isReadAccess) { return false; }
 public SyntheticAccessMethodBinding getAccessMethod(boolean isReadAccess) {
        throw new RuntimeException("unimplemented");
 }
+
+public FieldBinding getFieldBindingForLookup() { return this; }
 }
index 81cc19cdd9d6bcee713a0676689bff387120a32e..34f38282c5debce946a56374784fb056e571577a 100644 (file)
@@ -96,7 +96,7 @@ public final int bindingType() {
 public boolean canBeSeenBy(InvocationSite invocationSite, Scope scope) {
        if (isPublic()) return true;
 
-       SourceTypeBinding invocationType = scope.enclosingSourceType();
+       SourceTypeBinding invocationType = scope.invocationType();
        if (invocationType == declaringClass) return true;
 
        if (isProtected()) {
@@ -135,8 +135,8 @@ public boolean canBeSeenBy(InvocationSite invocationSite, Scope scope) {
 */
 public boolean canBeSeenBy(TypeBinding receiverType, InvocationSite invocationSite, Scope scope) {
        if (isPublic()) return true;
-
-       SourceTypeBinding invocationType = scope.invocationType(); //enclosingSourceType();
+    //XXX invocation vs. source
+       SourceTypeBinding invocationType = scope.invocationType();
        if (invocationType == declaringClass && invocationType == receiverType) return true;
 
        if (isProtected()) {
@@ -148,7 +148,8 @@ public boolean canBeSeenBy(TypeBinding receiverType, InvocationSite invocationSi
                if (invocationType == declaringClass) return true;
                if (invocationType.fPackage == declaringClass.fPackage) return true;
                
-               ReferenceBinding currentType = invocationType;
+               // for protected we need to check based on the type of this
+               ReferenceBinding currentType = scope.enclosingSourceType();;
                int depth = 0;
                do {
                        if (declaringClass.isSuperclassOf(currentType)) {
index 16e7c433cde8bfcd1fbeeaec1ecfe277e6a53df8..69507b775e0f02d84b0297a5dc0599f8c95e5227 100644 (file)
@@ -65,16 +65,15 @@ public final boolean canBeSeenBy(PackageBinding invocationPackage) {
 
 public final boolean canBeSeenBy(ReferenceBinding receiverType, SourceTypeBinding invocationType) {
        boolean ret = innerCanBeSeenBy(receiverType, invocationType);
-       return ret;
-//     if (ret) return true;
-//
-//     System.err.println("trying to see: " + new String(sourceName));
-//
-//     if (invocationType.privilegedHandler != null) {
-//             invocationType.privilegedHandler.notePrivilegedTypeAccess(this);
-//             return true;
-//     }
-//     return false;
+       if (ret) return true;
+
+       //System.err.println("trying to see: " + new String(sourceName));
+
+       if (invocationType.privilegedHandler != null) {
+               invocationType.privilegedHandler.notePrivilegedTypeAccess(this);
+               return true;
+       }
+       return false;
 }
 
 private final boolean innerCanBeSeenBy(ReferenceBinding receiverType, SourceTypeBinding invocationType) {