1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- /* *******************************************************************
- * Copyright (c) 2002 Palo Alto Research Center, Incorporated (PARC).
- * All rights reserved.
- * This program and the accompanying materials are made available
- * under the terms of the Eclipse Public License v 2.0
- * which accompanies this distribution and is available at
- * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt
- *
- * Contributors:
- * PARC initial implementation
- * ******************************************************************/
-
-
- package org.aspectj.ajdt.internal.compiler.lookup;
-
- import org.aspectj.ajdt.internal.compiler.ast.AspectDeclaration;
- import org.aspectj.org.eclipse.jdt.internal.compiler.impl.Constant;
- import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.FieldBinding;
- import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.InvocationSite;
- import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.Scope;
- import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.SyntheticMethodBinding;
- import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeBinding;
- import org.aspectj.weaver.AjcMemberMaker;
- import org.aspectj.weaver.ResolvedMember;
-
-
- /**
- * Used for field references within the body of an around advice
- * to force the use of public access methods. This makes it possible
- * for around advice to be inlined into any shadow to which it applies.
- *
- * ??? this is very similar to PrivilegedFieldBinding and is somewhat related
- * to InterTypeFieldBinding. Maybe they have a common supertype?
- *
- * @author Jim Hugunin
- */
- public class InlineAccessFieldBinding extends FieldBinding {
- public SimpleSyntheticAccessMethodBinding reader;
- public SimpleSyntheticAccessMethodBinding writer;
-
-
- public FieldBinding baseField;
-
- public InlineAccessFieldBinding(AspectDeclaration inAspect, FieldBinding baseField, ResolvedMember resolvedField) {
- super(baseField, baseField.declaringClass);
-
- this.reader = new SimpleSyntheticAccessMethodBinding(
- inAspect.factory.makeMethodBinding(
- AjcMemberMaker.inlineAccessMethodForFieldGet(
- inAspect.typeX, resolvedField
- )));
- this.writer = new SimpleSyntheticAccessMethodBinding(inAspect.factory.makeMethodBinding(
- AjcMemberMaker.inlineAccessMethodForFieldSet(
- inAspect.typeX, resolvedField
- )));
-
- this.constant = Constant.NotAConstant;
- this.baseField = baseField;
- }
-
-
- public boolean canBeSeenBy(TypeBinding receiverType, InvocationSite invocationSite, Scope scope) {
- return true;
- }
-
- public SyntheticMethodBinding getAccessMethod(boolean isReadAccess) {
- if (isReadAccess) return reader;
- else return writer;
- }
-
- public boolean alwaysNeedsAccessMethod(boolean isReadAccess) { return true; }
-
- public FieldBinding getFieldBindingForLookup() { return baseField; }
-
-
- public String toString() { return "InlineAccess(" + baseField + ")"; }
- }
|