mirror of
https://github.com/eclipse-aspectj/aspectj.git
synced 2024-09-13 15:45:38 +02:00
more privileged fixes
This commit is contained in:
parent
1c483f9189
commit
96db4fbc4c
@ -23,4 +23,5 @@ public interface IPrivilegedHandler {
|
||||
FieldBinding getPrivilegedAccessField(FieldBinding baseField);
|
||||
|
||||
MethodBinding getPrivilegedAccessMethod(MethodBinding baseMethod);
|
||||
void notePrivilegedTypeAccess(ReferenceBinding type);
|
||||
}
|
||||
|
@ -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()) {
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user