more privileged fixes

This commit is contained in:
jhugunin 2002-12-18 01:36:31 +00:00
parent 1c483f9189
commit 96db4fbc4c
3 changed files with 34 additions and 1 deletions

View File

@ -23,4 +23,5 @@ public interface IPrivilegedHandler {
FieldBinding getPrivilegedAccessField(FieldBinding baseField);
MethodBinding getPrivilegedAccessMethod(MethodBinding baseMethod);
void notePrivilegedTypeAccess(ReferenceBinding type);
}

View 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()) {

View 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