]> source.dussan.org Git - aspectj.git/commitdiff
more privileged fixes
authorjhugunin <jhugunin>
Wed, 18 Dec 2002 01:36:31 +0000 (01:36 +0000)
committerjhugunin <jhugunin>
Wed, 18 Dec 2002 01:36:31 +0000 (01:36 +0000)
org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/IPrivilegedHandler.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 fe118ec97ba1643abbde8d0739a395bbd7e69174..05488ee2dae658c65b768c4bffdbe21d6254315e 100644 (file)
@@ -23,4 +23,5 @@ public interface IPrivilegedHandler {
        FieldBinding getPrivilegedAccessField(FieldBinding baseField);
        
        MethodBinding getPrivilegedAccessMethod(MethodBinding baseMethod);
+       void notePrivilegedTypeAccess(ReferenceBinding type);
 }
index db6579e6e66efb78d27164d707a11cab7f4d09a5..81cc19cdd9d6bcee713a0676689bff387120a32e 100644 (file)
@@ -136,7 +136,7 @@ public boolean canBeSeenBy(InvocationSite invocationSite, Scope scope) {
 public boolean canBeSeenBy(TypeBinding receiverType, InvocationSite invocationSite, Scope scope) {
        if (isPublic()) return true;
 
-       SourceTypeBinding invocationType = scope.enclosingSourceType();
+       SourceTypeBinding invocationType = scope.invocationType(); //enclosingSourceType();
        if (invocationType == declaringClass && invocationType == receiverType) return true;
 
        if (isProtected()) {
index e4899616b9bce106544fac0cad3f137a2901b13d..16e7c433cde8bfcd1fbeeaec1ecfe277e6a53df8 100644 (file)
@@ -64,6 +64,20 @@ 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;
+}
+
+private final boolean innerCanBeSeenBy(ReferenceBinding receiverType, SourceTypeBinding invocationType) {
        if (isPublic()) return true;
 
        if (invocationType == this && invocationType == receiverType) return true;
@@ -132,10 +146,28 @@ public final boolean canBeSeenBy(ReferenceBinding receiverType, SourceTypeBindin
 */
 
 public final boolean canBeSeenBy(Scope scope) {
+       boolean ret = innerCanBeSeenBy(scope);
+       if (ret) return true;
+       
+       SourceTypeBinding invocationType = scope.invocationType();
+//     System.err.println("trying to see (scope): " + new String(sourceName) + 
+//                     " from " + new String(invocationType.sourceName));
+
+
+       if (invocationType.privilegedHandler != null) {
+               //System.err.println("    is privileged!");
+               invocationType.privilegedHandler.notePrivilegedTypeAccess(this);
+               return true;
+       }
+       return false;
+}
+               
+private final boolean innerCanBeSeenBy(Scope scope) {
        if (isPublic()) return true;
 
        SourceTypeBinding invocationType = scope.enclosingSourceType();
        if (invocationType == this) return true;
+       
 
        if (isProtected()) {
                // answer true if the invocationType is the declaringClass or they are in the same package