下面列出了怎么用org.eclipse.jdt.core.dom.FieldAccess的API类实例代码及写法,或者点击链接到github查看源代码。
private Block createWithMethodBody(AST ast, BuilderField builderField) {
String originalFieldName = builderField.getOriginalFieldName();
String builderFieldName = builderField.getBuilderFieldName();
Block newBlock = ast.newBlock();
ReturnStatement builderReturnStatement = ast.newReturnStatement();
builderReturnStatement.setExpression(ast.newThisExpression());
Assignment newAssignment = ast.newAssignment();
FieldAccess fieldAccess = ast.newFieldAccess();
fieldAccess.setExpression(ast.newThisExpression());
fieldAccess.setName(ast.newSimpleName(originalFieldName));
newAssignment.setLeftHandSide(fieldAccess);
newAssignment.setRightHandSide(ast.newSimpleName(builderFieldName));
newBlock.statements().add(ast.newExpressionStatement(newAssignment));
newBlock.statements().add(builderReturnStatement);
return newBlock;
}
/**
* Helper to generate an index based <code>for</code> loop to iterate over an array.
*
* @param ast the current {@link AST} instance to generate the {@link ASTRewrite} for
* @return an applicable {@link ASTRewrite} instance
*/
private ASTRewrite generateForRewrite(AST ast) {
ASTRewrite rewrite= ASTRewrite.create(ast);
ForStatement loopStatement= ast.newForStatement();
SimpleName loopVariableName= resolveLinkedVariableNameWithProposals(rewrite, "int", null, true); //$NON-NLS-1$
loopStatement.initializers().add(getForInitializer(ast, loopVariableName));
FieldAccess getArrayLengthExpression= ast.newFieldAccess();
getArrayLengthExpression.setExpression((Expression) rewrite.createCopyTarget(fCurrentExpression));
getArrayLengthExpression.setName(ast.newSimpleName("length")); //$NON-NLS-1$
loopStatement.setExpression(getLinkedInfixExpression(rewrite, loopVariableName.getIdentifier(), getArrayLengthExpression, InfixExpression.Operator.LESS));
loopStatement.updaters().add(getLinkedIncrementExpression(rewrite, loopVariableName.getIdentifier()));
Block forLoopBody= ast.newBlock();
forLoopBody.statements().add(ast.newExpressionStatement(getForBodyAssignment(rewrite, loopVariableName)));
forLoopBody.statements().add(createBlankLineStatementWithCursorPosition(rewrite));
loopStatement.setBody(forLoopBody);
rewrite.replace(fCurrentNode, loopStatement, null);
return rewrite;
}
public FieldInstructionObject isGetter() {
if(getMethodBody() != null) {
List<AbstractStatement> abstractStatements = getMethodBody().getCompositeStatement().getStatements();
if(abstractStatements.size() == 1 && abstractStatements.get(0) instanceof StatementObject) {
StatementObject statementObject = (StatementObject)abstractStatements.get(0);
Statement statement = statementObject.getStatement();
if(statement instanceof ReturnStatement) {
ReturnStatement returnStatement = (ReturnStatement) statement;
if((returnStatement.getExpression() instanceof SimpleName || returnStatement.getExpression() instanceof FieldAccess) && statementObject.getFieldInstructions().size() == 1 && statementObject.getMethodInvocations().size() == 0 &&
statementObject.getLocalVariableDeclarations().size() == 0 && statementObject.getLocalVariableInstructions().size() == 0 && this.constructorObject.parameterList.size() == 0) {
return statementObject.getFieldInstructions().get(0);
}
}
}
}
return null;
}
private FieldAccess wrapAsFieldAccess(SimpleName fieldName, AST ast) {
Name qualifierName = null;
try {
if (isDeclaredInLambdaExpression()) {
String enclosingTypeName = getEnclosingTypeName();
qualifierName = ast.newSimpleName(enclosingTypeName);
}
} catch (JavaModelException e) {
// do nothing.
}
FieldAccess fieldAccess = ast.newFieldAccess();
ThisExpression thisExpression = ast.newThisExpression();
if (qualifierName != null) {
thisExpression.setQualifier(qualifierName);
}
fieldAccess.setExpression(thisExpression);
fieldAccess.setName(fieldName);
return fieldAccess;
}
private static boolean needsOuterParantheses(ASTNode nodeToCast) {
ASTNode parent= nodeToCast.getParent();
if (parent instanceof MethodInvocation) {
if (((MethodInvocation)parent).getExpression() == nodeToCast) {
return true;
}
} else if (parent instanceof QualifiedName) {
if (((QualifiedName)parent).getQualifier() == nodeToCast) {
return true;
}
} else if (parent instanceof FieldAccess) {
if (((FieldAccess)parent).getExpression() == nodeToCast) {
return true;
}
}
return false;
}
private static ASTRewriteCorrectionProposal createNoSideEffectProposal(IInvocationContext context, SimpleName nodeToQualify, IVariableBinding fieldBinding, String label, int relevance) {
AST ast= nodeToQualify.getAST();
Expression qualifier;
if (Modifier.isStatic(fieldBinding.getModifiers())) {
ITypeBinding declaringClass= fieldBinding.getDeclaringClass();
qualifier= ast.newSimpleName(declaringClass.getTypeDeclaration().getName());
} else {
qualifier= ast.newThisExpression();
}
ASTRewrite rewrite= ASTRewrite.create(ast);
FieldAccess access= ast.newFieldAccess();
access.setName((SimpleName) rewrite.createCopyTarget(nodeToQualify));
access.setExpression(qualifier);
rewrite.replace(nodeToQualify, access, null);
Image image= JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_CHANGE);
return new ASTRewriteCorrectionProposal(label, context.getCompilationUnit(), rewrite, relevance, image);
}
public static SimpleName isGetter(MethodDeclaration methodDeclaration) {
Block methodBody = methodDeclaration.getBody();
List<SingleVariableDeclaration> parameters = methodDeclaration.parameters();
if(methodBody != null) {
List<Statement> statements = methodBody.statements();
if(statements.size() == 1 && parameters.size() == 0) {
Statement statement = statements.get(0);
if(statement instanceof ReturnStatement) {
ReturnStatement returnStatement = (ReturnStatement)statement;
Expression returnStatementExpression = returnStatement.getExpression();
if(returnStatementExpression instanceof SimpleName) {
return (SimpleName)returnStatementExpression;
}
else if(returnStatementExpression instanceof FieldAccess) {
FieldAccess fieldAccess = (FieldAccess)returnStatementExpression;
return fieldAccess.getName();
}
}
}
}
return null;
}
@Override
public boolean visit(final ClassInstanceCreation node) {
Assert.isNotNull(node);
if (fCreateInstanceField) {
final AST ast= node.getAST();
final Type type= node.getType();
final ITypeBinding binding= type.resolveBinding();
if (binding != null && binding.getDeclaringClass() != null && !Bindings.equals(binding, fTypeBinding) && fSourceRewrite.getRoot().findDeclaringNode(binding) != null) {
if (!Modifier.isStatic(binding.getModifiers())) {
Expression expression= null;
if (fCodeGenerationSettings.useKeywordThis || fEnclosingInstanceFieldName.equals(fNameForEnclosingInstanceConstructorParameter)) {
final FieldAccess access= ast.newFieldAccess();
access.setExpression(ast.newThisExpression());
access.setName(ast.newSimpleName(fEnclosingInstanceFieldName));
expression= access;
} else
expression= ast.newSimpleName(fEnclosingInstanceFieldName);
if (node.getExpression() != null)
fSourceRewrite.getImportRemover().registerRemovedNode(node.getExpression());
fSourceRewrite.getASTRewrite().set(node, ClassInstanceCreation.EXPRESSION_PROPERTY, expression, fGroup);
} else
addTypeQualification(type, fSourceRewrite, fGroup);
}
}
return true;
}
@Override
public boolean visit(final ThisExpression node) {
Assert.isNotNull(node);
Name name= node.getQualifier();
if (fCreateInstanceField && name != null) {
ITypeBinding binding= node.resolveTypeBinding();
if (binding != null && Bindings.equals(binding, fTypeBinding.getDeclaringClass())) {
AST ast= node.getAST();
Expression expression= null;
if (fCodeGenerationSettings.useKeywordThis || fEnclosingInstanceFieldName.equals(fNameForEnclosingInstanceConstructorParameter)) {
FieldAccess access= ast.newFieldAccess();
access.setExpression(ast.newThisExpression());
access.setName(ast.newSimpleName(fEnclosingInstanceFieldName));
expression= access;
} else {
expression= ast.newSimpleName(fEnclosingInstanceFieldName);
}
fSourceRewrite.getASTRewrite().replace(node, expression, null);
}
}
return super.visit(node);
}
protected void rewrite(FieldAccess node, ITypeBinding type) {
Expression exp= node.getExpression();
if (exp == null) {
ImportRewriteContext context= new ContextSensitiveImportRewriteContext(node, fCuRewrite.getImportRewrite());
Type result= fCuRewrite.getImportRewrite().addImport(type, fCuRewrite.getAST(), context);
fCuRewrite.getImportRemover().registerAddedImport(type.getQualifiedName());
exp= ASTNodeFactory.newName(fCuRewrite.getAST(), ASTFlattener.asString(result));
fCuRewrite.getASTRewrite().set(node, FieldAccess.EXPRESSION_PROPERTY, exp, fCuRewrite.createGroupDescription(REFERENCE_UPDATE));
fNeedsImport= true;
} else if (exp instanceof Name) {
rewriteName((Name)exp, type);
} else {
rewriteExpression(node, exp, type);
}
fProcessed.add(node.getName());
}
@Override
public boolean visit(FieldAccess node) {
IBinding binding= node.resolveFieldBinding();
if (isSourceAccess(binding)) {
if (isMovedMember(binding)) {
if (node.getExpression() != null)
rewrite(node, fTarget);
} else
rewrite(node, fSource);
} else if (isTargetAccess(binding)) {
fCuRewrite.getASTRewrite().remove(node.getExpression(), null);
fCuRewrite.getImportRemover().registerRemovedNode(node.getExpression());
}
return super.visit(node);
}
private Expression generateQualifier(String paramName, AST ast, boolean useSuper, Expression qualifier) {
SimpleName paramSimpleName= ast.newSimpleName(paramName);
if (useSuper) {
SuperFieldAccess sf= ast.newSuperFieldAccess();
sf.setName(paramSimpleName);
if (qualifier instanceof Name) {
sf.setQualifier((Name) qualifier);
}
return sf;
}
if (qualifier != null) {
FieldAccess parameterAccess= ast.newFieldAccess();
parameterAccess.setExpression(qualifier);
parameterAccess.setName(paramSimpleName);
return parameterAccess;
}
return paramSimpleName;
}
/**
* Returns the binding of the variable written in an Assignment.
* @param assignment The assignment
* @return The binding or <code>null</code> if no bindings are available.
*/
public static IVariableBinding getAssignedVariable(Assignment assignment) {
Expression leftHand = assignment.getLeftHandSide();
switch (leftHand.getNodeType()) {
case ASTNode.SIMPLE_NAME:
return (IVariableBinding) ((SimpleName) leftHand).resolveBinding();
case ASTNode.QUALIFIED_NAME:
return (IVariableBinding) ((QualifiedName) leftHand).getName().resolveBinding();
case ASTNode.FIELD_ACCESS:
return ((FieldAccess) leftHand).resolveFieldBinding();
case ASTNode.SUPER_FIELD_ACCESS:
return ((SuperFieldAccess) leftHand).resolveFieldBinding();
default:
return null;
}
}
private static boolean needsOuterParantheses(ASTNode nodeToCast) {
ASTNode parent= nodeToCast.getParent();
if (parent instanceof MethodInvocation) {
if (((MethodInvocation)parent).getExpression() == nodeToCast) {
return true;
}
} else if (parent instanceof QualifiedName) {
if (((QualifiedName)parent).getQualifier() == nodeToCast) {
return true;
}
} else if (parent instanceof FieldAccess) {
if (((FieldAccess)parent).getExpression() == nodeToCast) {
return true;
}
}
return false;
}
private void updateSimpleName(ASTRewrite rewriter, ParameterInfo pi, SimpleName node, List<SingleVariableDeclaration> enclosingParameters, IJavaProject project) {
AST ast= rewriter.getAST();
IBinding binding= node.resolveBinding();
Expression replacementNode= fParameterObjectFactory.createFieldReadAccess(pi, getParameterName(), ast, project, false, null);
if (binding instanceof IVariableBinding) {
IVariableBinding variable= (IVariableBinding) binding;
if (variable.isParameter() && variable.getName().equals(getNameInScope(pi, enclosingParameters))) {
rewriter.replace(node, replacementNode, null);
}
} else {
ASTNode parent= node.getParent();
if (!(parent instanceof QualifiedName || parent instanceof FieldAccess || parent instanceof SuperFieldAccess)) {
if (node.getIdentifier().equals(getNameInScope(pi, enclosingParameters))) {
rewriter.replace(node, replacementNode, null);
}
}
}
}
private Name findConstantNameNode() {
ASTNode node= NodeFinder.perform(fSelectionCuRewrite.getRoot(), fSelectionStart, fSelectionLength);
if (node == null)
return null;
if (node instanceof FieldAccess)
node= ((FieldAccess) node).getName();
if (!(node instanceof Name))
return null;
Name name= (Name) node;
IBinding binding= name.resolveBinding();
if (!(binding instanceof IVariableBinding))
return null;
IVariableBinding variableBinding= (IVariableBinding) binding;
if (!variableBinding.isField() || variableBinding.isEnumConstant())
return null;
int modifiers= binding.getModifiers();
if (! (Modifier.isStatic(modifiers) && Modifier.isFinal(modifiers)))
return null;
return name;
}
public static IBinding resolveBinding(Expression expression){
if (expression instanceof Name)
return ((Name)expression).resolveBinding();
if (expression instanceof ParenthesizedExpression)
return resolveBinding(((ParenthesizedExpression)expression).getExpression());
else if (expression instanceof Assignment)
return resolveBinding(((Assignment)expression).getLeftHandSide());//TODO ???
else if (expression instanceof MethodInvocation)
return ((MethodInvocation)expression).resolveMethodBinding();
else if (expression instanceof SuperMethodInvocation)
return ((SuperMethodInvocation)expression).resolveMethodBinding();
else if (expression instanceof FieldAccess)
return ((FieldAccess)expression).resolveFieldBinding();
else if (expression instanceof SuperFieldAccess)
return ((SuperFieldAccess)expression).resolveFieldBinding();
else if (expression instanceof ConditionalExpression)
return resolveBinding(((ConditionalExpression)expression).getThenExpression());
return null;
}
private List<Set<Integer>> consistentModification(List<Modification> modifications){
List<Set<Integer>> result = new LinkedList<>();
String regex = "[A-Za-z_][0-9A-Za-z_.]*";
Pattern pattern = Pattern.compile(regex);
for(int i = 0; i < modifications.size(); i++){
Modification modification = modifications.get(i);
if(modification instanceof Revision){
Set<Integer> consistant = new HashSet<>();
consistant.add(i);
for(int j = i + 1; j < modifications.size(); j++){
Modification other = modifications.get(j);
if(other instanceof Revision){
if(modification.compatible(other) && modification.getTargetString().equals(other.getTargetString())){
ASTNode node = JavaFile.genASTFromSource(modification.getTargetString(), ASTParser.K_EXPRESSION);
if(node instanceof Name || node instanceof FieldAccess || pattern.matcher(modification.getTargetString()).matches()){
consistant.add(j);
}
}
}
}
if(consistant.size() > 1){
result.add(consistant);
}
}
}
return result;
}
public boolean visit(FieldAccess node) {
if (node.getExpression() instanceof ThisExpression) {
if (!this.thisAccesses.contains(node)) {
thisAccesses.add(node);
}
}
return true;
}
private SimpleName getSimpleName(Expression expression) {
if (expression instanceof SimpleName)
return ((SimpleName)expression);
else if (expression instanceof QualifiedName)
return (((QualifiedName) expression).getName());
else if (expression instanceof FieldAccess)
return ((FieldAccess)expression).getName();
return null;
}
private Expression getThisAccess(String name, boolean forHashCode) {
if (fSettings.useKeywordThis || needsThisQualification(name, forHashCode)) {
FieldAccess fa= fAst.newFieldAccess();
fa.setExpression(fAst.newThisExpression());
fa.setName(fAst.newSimpleName(name));
return fa;
}
return fAst.newSimpleName(name);
}
public void populateBodyWithFieldSetCalls(AST ast, String rhsName, Block body, List<? extends BuilderField> builderFields) {
for (BuilderField field : builderFields) {
Assignment assignment = ast.newAssignment();
FieldAccess fieldAccess = createThisFieldAccess(ast, field);
assignment.setLeftHandSide(fieldAccess);
FieldAccess builderFieldAccess = builderFieldAccessCreatorFragment.createBuilderFieldAccess(ast, rhsName, field);
assignment.setRightHandSide(builderFieldAccess);
body.statements().add(ast.newExpressionStatement(assignment));
}
}
public boolean visit(FieldAccess expr) {
/*
* FieldAccess: Expression . Identifier
*/
activateDiffStyle(expr);
handleExpression(expr.getExpression());
appendPeriod();
handleExpression(expr.getName());
deactivateDiffStyle(expr);
return false;
}
@Override
public void endVisit(FieldAccess node) {
if (skipNode(node)) {
return;
}
processSequential(node, node.getExpression(), node.getName());
}
private RefactoringStatus checkExpression() throws JavaModelException {
Expression selectedExpression = getSelectedExpression().getAssociatedExpression();
if (selectedExpression != null) {
final ASTNode parent = selectedExpression.getParent();
if (selectedExpression instanceof NullLiteral) {
return RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.ExtractTempRefactoring_null_literals);
} else if (selectedExpression instanceof ArrayInitializer) {
return RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.ExtractTempRefactoring_array_initializer);
} else if (selectedExpression instanceof Assignment) {
if (parent instanceof Expression && !(parent instanceof ParenthesizedExpression)) {
return RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.ExtractTempRefactoring_assignment);
} else {
return null;
}
} else if (selectedExpression instanceof SimpleName) {
if ((((SimpleName) selectedExpression)).isDeclaration()) {
return RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.ExtractTempRefactoring_names_in_declarations);
}
if (parent instanceof QualifiedName && selectedExpression.getLocationInParent() == QualifiedName.NAME_PROPERTY || parent instanceof FieldAccess && selectedExpression.getLocationInParent() == FieldAccess.NAME_PROPERTY) {
return RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.ExtractTempRefactoring_select_expression);
}
} else if (selectedExpression instanceof VariableDeclarationExpression && parent instanceof TryStatement) {
return RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.ExtractTempRefactoring_resource_in_try_with_resources);
}
}
return null;
}
@Override
public boolean visit(FieldAccess node) {
Expression exp = node.getExpression();
if (exp != null) {
fIgnore.add(node.getName());
}
return true;
}
@Override
public ITypeConstraint[] create(FieldAccess access){
Expression expression= access.getExpression();
SimpleName name= access.getName();
IBinding binding= name.resolveBinding();
if (! (binding instanceof IVariableBinding))
return new ITypeConstraint[0];
IVariableBinding vb= (IVariableBinding)binding;
return createConstraintsForAccessToField(vb, expression, access);
}
private Expression getReceiver(Expression expression) {
int type = expression.getNodeType();
switch (type) {
case ASTNode.SIMPLE_NAME:
return null;
case ASTNode.QUALIFIED_NAME:
return ((QualifiedName) expression).getQualifier();
case ASTNode.FIELD_ACCESS:
return ((FieldAccess) expression).getExpression();
case ASTNode.PARENTHESIZED_EXPRESSION:
return getReceiver(((ParenthesizedExpression) expression).getExpression());
}
return null;
}
@Override
public boolean visit(final FieldAccess it) {
it.getExpression().accept(this);
if ((this.fallBackStrategy && this._aSTFlattenerUtils.isStaticMemberCall(it))) {
this.appendToBuffer("::");
} else {
this.appendToBuffer(".");
}
it.getName().accept(this);
return false;
}
private boolean isExpressionOfFieldAccess() {
Expression exp1 = expression1.getExpression();
Expression exp2 = expression2.getExpression();
ASTNode node1 = exp1.getParent();
ASTNode node2 = exp2.getParent();
if(node1 instanceof FieldAccess && node2 instanceof FieldAccess) {
FieldAccess fieldAccess1 = (FieldAccess)node1;
FieldAccess fieldAccess2 = (FieldAccess)node2;
if(fieldAccess1.getExpression().equals(exp1) && fieldAccess2.getExpression().equals(exp2))
return true;
}
return false;
}