List of usage examples for org.eclipse.jdt.internal.compiler.ast QualifiedNameReference fieldBinding
@Override
public FieldBinding fieldBinding()
From source file:com.google.gwt.dev.jdt.TypeRefVisitor.java
License:Open Source License
@Override public void endVisit(QualifiedNameReference x, BlockScope scope) { if (x.binding instanceof FieldBinding) { maybeDispatch(x, x.fieldBinding().declaringClass); }/* w ww. j av a 2 s . com*/ }
From source file:spoon.support.builder.JDTTreeBuilder.java
License:Open Source License
@SuppressWarnings("unchecked") @Override// www .j a va 2 s .com public boolean visit(QualifiedNameReference qualifiedNameReference, BlockScope scope) { if (qualifiedNameReference.binding instanceof FieldBinding) { CtFieldAccess<?> fa = factory.Core().createFieldAccess(); fa.setVariable(references.getVariableReference(qualifiedNameReference.fieldBinding())); if (qualifiedNameReference.otherBindings != null) for (FieldBinding b : qualifiedNameReference.otherBindings) { if (b != null) { CtFieldAccess other = factory.Core().createFieldAccess(); other.setVariable(references.getVariableReference(b)); other.setTarget(fa); fa.setParent(other); fa = other; } } context.enter(fa, qualifiedNameReference); return true; } else if (qualifiedNameReference.binding instanceof VariableBinding) { CtVariableAccess va = factory.Core().createVariableAccess(); va.setVariable(references.getVariableReference((VariableBinding) qualifiedNameReference.binding)); va.setType(va.getVariable().getType()); if (qualifiedNameReference.otherBindings != null) { for (FieldBinding b : qualifiedNameReference.otherBindings) { CtFieldAccess fa = factory.Core().createFieldAccess(); fa.setTarget(va); fa.setVariable(references.getVariableReference(b)); fa.setType(references.getTypeReference(qualifiedNameReference.resolvedType)); va.setParent(fa); va = fa; } } context.enter(va, qualifiedNameReference); return false; } return false; }
From source file:spoon.support.compiler.jdt.JDTTreeBuilder.java
License:Open Source License
@Override public boolean visit(QualifiedNameReference qualifiedNameReference, BlockScope scope) { long[] positions = qualifiedNameReference.sourcePositions; if (qualifiedNameReference.binding instanceof FieldBinding) { CtFieldAccess<Object> fa; if (context.stack.peek().element instanceof CtAssignment && (qualifiedNameReference.otherBindings == null || qualifiedNameReference.otherBindings.length == 0) && context.assigned) { fa = factory.Core().createFieldWrite(); } else {/*from w ww. ja v a 2 s.com*/ fa = factory.Core().createFieldRead(); } CtFieldReference<Object> ref = references.getVariableReference(qualifiedNameReference.fieldBinding()); // Only set the declaring type if we are in a static context. See // StaticAccessTest#testReferences test to have an example about that. if (ref.isStatic()) { ref.setDeclaringType(references.getTypeReference(qualifiedNameReference.actualReceiverType)); } fa.setVariable(ref); if (qualifiedNameReference.binding != null && qualifiedNameReference.tokens.length - 1 == ((FieldBinding) qualifiedNameReference.binding).declaringClass.compoundName.length) { // We get the binding information when we specify the complete fully qualified name of the delcaring class. final ReferenceBinding declaringClass = ((FieldBinding) qualifiedNameReference.binding).declaringClass; final CtTypeReference<Object> typeReference = references.getTypeReference(declaringClass); fa.setTarget(factory.Code().createCodeSnippetExpression(typeReference.toString())); } if (qualifiedNameReference.otherBindings != null) { int i = 0; //positions index; int sourceStart = (int) (positions[0] >>> 32); for (FieldBinding b : qualifiedNameReference.otherBindings) { CtFieldAccess<Object> other; if (qualifiedNameReference.otherBindings.length == i + 1 && context.stack.peek().element instanceof CtAssignment) { other = factory.Core().createFieldWrite(); } else { other = factory.Core().createFieldRead(); } other.setVariable(references.getVariableReference(b)); other.setTarget(fa); if (b != null) { other.setType(references.getTypeReference(b.type)); } else { // case with no complete classpath CtTypeReference<Object> ref2 = factory.Core().createTypeReference(); ref2.setSimpleName(new String( qualifiedNameReference.tokens[qualifiedNameReference.tokens.length - 1])); other.setType(ref2); } //set source position of fa; CompilationUnit cu = factory.CompilationUnit() .create(new String(context.compilationunitdeclaration.getFileName())); int sourceEnd = (int) (positions[i]); final int[] lineSeparatorPositions = context.compilationunitdeclaration.compilationResult.lineSeparatorPositions; fa.setPosition(factory.Core().createSourcePosition(cu, sourceStart, sourceEnd, lineSeparatorPositions)); fa = other; i++; } } context.enter(fa, qualifiedNameReference); return true; } else if (qualifiedNameReference.binding instanceof VariableBinding) { CtVariableAccess<Object> va; if (context.stack.peek().element instanceof CtAssignment && (qualifiedNameReference.otherBindings == null || qualifiedNameReference.otherBindings.length == 0 && context.assigned)) { va = factory.Core().createVariableWrite(); } else { va = factory.Core().createVariableRead(); } va.setVariable(references.getVariableReference((VariableBinding) qualifiedNameReference.binding)); va.setType(va.getVariable().getType()); if (qualifiedNameReference.otherBindings != null) { int i = 0; //positions index; int sourceStart = (int) (positions[0] >>> 32); for (FieldBinding b : qualifiedNameReference.otherBindings) { CtFieldAccess<Object> other; if (qualifiedNameReference.otherBindings.length == i + 1 && context.stack.peek().element instanceof CtAssignment) { other = factory.Core().createFieldWrite(); } else { other = factory.Core().createFieldRead(); } other.setVariable(references.getVariableReference(b)); other.setTarget(va); if (b != null) { other.setType(references.getTypeReference(b.type)); } else { // case with no complete classpath CtTypeReference<Object> ref = factory.Core().createTypeReference(); ref.setSimpleName(new String( qualifiedNameReference.tokens[qualifiedNameReference.tokens.length - 1])); other.setType(ref); } //set source position of va; CompilationUnit cu = factory.CompilationUnit() .create(new String(context.compilationunitdeclaration.getFileName())); int sourceEnd = (int) (positions[i]); final int[] lineSeparatorPositions = context.compilationunitdeclaration.compilationResult.lineSeparatorPositions; va.setPosition(factory.Core().createSourcePosition(cu, sourceStart, sourceEnd, lineSeparatorPositions)); va = other; i++; } } context.enter(va, qualifiedNameReference); return false; } else if (qualifiedNameReference.binding instanceof TypeBinding) { CtTypeAccess<Object> ta = factory.Core().createTypeAccess(); ta.setType(references.getTypeReference((TypeBinding) qualifiedNameReference.binding)); context.enter(ta, qualifiedNameReference); return false; } else if (qualifiedNameReference.binding instanceof ProblemBinding) { if (context.stack.peek().element instanceof CtInvocation) { final CtTypeAccess<Object> ta = factory.Core().createTypeAccess(); final CtTypeReference<Object> typeReference = factory.Core().createTypeReference(); typeReference.setSimpleName(qualifiedNameReference.toString()); ta.setType(typeReference); context.enter(ta, qualifiedNameReference); } return false; } else { CtVariableAccess<Object> va = null; if (context.stack.peek().element instanceof CtAssignment && context.assigned) { va = factory.Core().createVariableWrite(); } else { va = factory.Core().createVariableRead(); } CtVariableReference<Object> varRef = new CtUnboundVariableReferenceImpl<Object>(); varRef.setSimpleName(qualifiedNameReference.toString()); va.setVariable(varRef); context.enter(va, qualifiedNameReference); return false; } }
From source file:spoon.support.compiler.jdt.JDTTreeBuilderHelper.java
License:Open Source License
/** * Creates a variable or a field access from its qualified name. * * @param qualifiedNameReference//from w w w . ja v a 2 s. c o m * Used to build the variable access. See all sub methods of this class to understand its usage. * @return a variable access. */ <T> CtVariableAccess<T> createVariableAccess(QualifiedNameReference qualifiedNameReference) { long[] positions = qualifiedNameReference.sourcePositions; int sourceStart = qualifiedNameReference.sourceStart(); int sourceEnd = qualifiedNameReference.sourceEnd(); if (qualifiedNameReference.indexOfFirstFieldBinding < positions.length) { sourceEnd = (int) (positions[qualifiedNameReference.indexOfFirstFieldBinding] >>> 32) - 2; } CtVariableAccess<T> va; CtVariableReference<T> ref; boolean fromAssignment = isLhsAssignment(jdtTreeBuilder.getContextBuilder(), qualifiedNameReference); boolean isOtherBinding = qualifiedNameReference.otherBindings == null || qualifiedNameReference.otherBindings.length == 0; if (qualifiedNameReference.binding instanceof FieldBinding) { ref = jdtTreeBuilder.getReferencesBuilder().getVariableReference(qualifiedNameReference.fieldBinding()); ref.setPosition(jdtTreeBuilder.getPositionBuilder() .buildPosition(getVariableReferenceSourceStart(sourceStart, sourceEnd), sourceEnd)); va = createFieldAccess(ref, createTargetFieldAccess(qualifiedNameReference, (CtFieldReference<Object>) ref), isOtherBinding && fromAssignment); } else { ref = jdtTreeBuilder.getReferencesBuilder() .getVariableReference((VariableBinding) qualifiedNameReference.binding); ref.setPosition(jdtTreeBuilder.getPositionBuilder() .buildPosition(getVariableReferenceSourceStart(sourceStart, sourceEnd), sourceEnd)); va = createVariableAccess(ref, isOtherBinding && fromAssignment); } if (qualifiedNameReference.otherBindings != null) { int i = 0; //positions index; va.setPosition(jdtTreeBuilder.getPositionBuilder().buildPosition(sourceStart, sourceEnd)); sourceStart = (int) (positions[qualifiedNameReference.indexOfFirstFieldBinding - 1] >>> 32); for (FieldBinding b : qualifiedNameReference.otherBindings) { isOtherBinding = qualifiedNameReference.otherBindings.length == i + 1; CtFieldAccess<T> other = createFieldAccess(jdtTreeBuilder.getReferencesBuilder() .<T>getVariableReference(b, qualifiedNameReference.tokens[i + 1]), va, isOtherBinding && fromAssignment); //set source position of fa if (i + qualifiedNameReference.indexOfFirstFieldBinding >= qualifiedNameReference.otherBindings.length) { sourceEnd = qualifiedNameReference.sourceEnd(); } else { sourceEnd = (int) (positions[qualifiedNameReference.indexOfFirstFieldBinding + i + 1] >>> 32) - 2; } other.setPosition(jdtTreeBuilder.getPositionBuilder().buildPosition(sourceStart, sourceEnd)); va = other; i++; } } else if (!(qualifiedNameReference.binding instanceof FieldBinding) && qualifiedNameReference.tokens.length > 1) { sourceStart = (int) (positions[0] >>> 32); for (int i = 1; i < qualifiedNameReference.tokens.length; i++) { isOtherBinding = qualifiedNameReference.tokens.length == i + 1; CtFieldAccess<T> other = createFieldAccess(// jdtTreeBuilder.getReferencesBuilder().<T>getVariableReference(null, qualifiedNameReference.tokens[i]), va, isOtherBinding && fromAssignment); //set source position of va; sourceEnd = (int) (positions[i]); va.setPosition(jdtTreeBuilder.getPositionBuilder().buildPosition(sourceStart, sourceEnd)); va = other; } } va.setPosition(jdtTreeBuilder.getPositionBuilder().buildPosition(qualifiedNameReference.sourceStart(), qualifiedNameReference.sourceEnd())); return va; }
From source file:spoon.support.compiler.jdt.JDTTreeBuilderHelper.java
License:Open Source License
/** * Creates a type access from its qualified name and with a field reference. * * @param qualifiedNameReference/*from w w w. j a va2s . c o m*/ * Used to update the field reference if necessary. * @param fieldReference * Used to get its declaring class and to put it in the type access. * @return a type access. */ CtTypeAccess<?> createTypeAccess(QualifiedNameReference qualifiedNameReference, CtFieldReference<?> fieldReference) { final TypeBinding receiverType = qualifiedNameReference.actualReceiverType; if (receiverType != null) { final CtTypeReference<Object> qualifiedRef = jdtTreeBuilder.getReferencesBuilder() .getQualifiedTypeReference(qualifiedNameReference.tokens, receiverType, qualifiedNameReference.fieldBinding().declaringClass.enclosingType(), new JDTTreeBuilder.OnAccessListener() { @Override public boolean onAccess(char[][] tokens, int index) { return !CharOperation.equals(tokens[index + 1], tokens[tokens.length - 1]); } }); if (qualifiedRef != null) { fieldReference.setDeclaringType(qualifiedRef); } else { fieldReference .setDeclaringType(jdtTreeBuilder.getReferencesBuilder().getTypeReference(receiverType)); } } CtTypeAccess<?> typeAccess = jdtTreeBuilder.getFactory().Code() .createTypeAccess(fieldReference.getDeclaringType()); if (qualifiedNameReference.indexOfFirstFieldBinding > 1) { // the array sourcePositions contains the position of each element of the qualifiedNameReference // the last element contains the position of the field long[] positions = qualifiedNameReference.sourcePositions; typeAccess.setPosition( jdtTreeBuilder.getPositionBuilder().buildPosition(qualifiedNameReference.sourceStart(), (int) (positions[qualifiedNameReference.indexOfFirstFieldBinding - 1] >>> 32) - 2)); handleImplicit(qualifiedNameReference.actualReceiverType.getPackage(), qualifiedNameReference, fieldReference.getSimpleName(), typeAccess.getAccessedType()); } else { typeAccess.setImplicit(qualifiedNameReference.isImplicitThis()); } return typeAccess; }