mirror of
https://github.com/eclipse-aspectj/aspectj.git
synced 2024-09-13 15:45:38 +02:00
more fixes for privileged
This commit is contained in:
parent
07f68f155d
commit
8d0fab3add
@ -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()
|
||||
|
@ -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);
|
||||
|
@ -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; }
|
||||
}
|
||||
|
@ -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)) {
|
||||
|
@ -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) {
|
||||
|
Loading…
Reference in New Issue
Block a user