You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

PrivilegedFieldBinding.java 2.6KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. /* *******************************************************************
  2. * Copyright (c) 2002 Palo Alto Research Center, Incorporated (PARC).
  3. * All rights reserved.
  4. * This program and the accompanying materials are made available
  5. * under the terms of the Common Public License v1.0
  6. * which accompanies this distribution and is available at
  7. * http://www.eclipse.org/legal/cpl-v10.html
  8. *
  9. * Contributors:
  10. * PARC initial implementation
  11. * ******************************************************************/
  12. package org.aspectj.ajdt.internal.compiler.lookup;
  13. import org.aspectj.ajdt.internal.compiler.ast.AspectDeclaration;
  14. import org.aspectj.weaver.AjcMemberMaker;
  15. import org.aspectj.org.eclipse.jdt.internal.compiler.ast.ASTNode;
  16. import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.FieldBinding;
  17. import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.InvocationSite;
  18. import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.Scope;
  19. import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.SyntheticMethodBinding;
  20. import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeBinding;
  21. public class PrivilegedFieldBinding extends FieldBinding {
  22. public SimpleSyntheticAccessMethodBinding reader;
  23. public SimpleSyntheticAccessMethodBinding writer;
  24. public FieldBinding baseField;
  25. public PrivilegedFieldBinding(AspectDeclaration inAspect, FieldBinding baseField) {
  26. super(baseField, baseField.declaringClass);
  27. this.reader = new SimpleSyntheticAccessMethodBinding(
  28. inAspect.factory.makeMethodBinding(
  29. AjcMemberMaker.privilegedAccessMethodForFieldGet(
  30. inAspect.typeX, EclipseFactory.makeResolvedMember(baseField)
  31. )));
  32. this.writer = new SimpleSyntheticAccessMethodBinding(inAspect.factory.makeMethodBinding(
  33. AjcMemberMaker.privilegedAccessMethodForFieldSet(
  34. inAspect.typeX, EclipseFactory.makeResolvedMember(baseField)
  35. )));
  36. this.constant = ASTNode.NotAConstant;
  37. this.baseField = baseField;
  38. }
  39. public boolean canBeSeenBy(TypeBinding receiverType, InvocationSite invocationSite, Scope scope) {
  40. return true;
  41. }
  42. public SyntheticMethodBinding getAccessMethod(boolean isReadAccess) {
  43. if (baseField.alwaysNeedsAccessMethod(isReadAccess)) {
  44. return baseField.getAccessMethod(isReadAccess);
  45. }
  46. if (isReadAccess) return reader;
  47. else return writer;
  48. }
  49. public boolean alwaysNeedsAccessMethod(boolean isReadAccess) { return true; }
  50. public FieldBinding getFieldBindingForLookup() { return baseField; }
  51. public String toString() { return "PrivilegedWrapper(" + baseField + ")"; }
  52. // public ReferenceBinding getTargetType() {
  53. // return introducedField.declaringClass;
  54. // }
  55. }