Java 类org.eclipse.jdt.core.dom.ThisExpression 实例源码

项目:Migrate-Skeletal-Implementation-to-Interface-Refactoring    文件:SourceMethodBodyAnalysisVisitor.java   
private void processAssignment(ASTNode node, ThisExpression thisExpression,
        ITypeBinding destinationInterfaceTypeBinding, Expression leftHandSide, Expression rightHandSide) {
    // if `this` appears on the LHS.
    if (leftHandSide == thisExpression) {
        // in this case, we need to check that the RHS can be
        // assigned to a variable of the destination type.
        if (!MigrateSkeletalImplementationToInterfaceRefactoringProcessor
                .isAssignmentCompatible(rightHandSide.resolveTypeBinding(), destinationInterfaceTypeBinding))
            this.methodContainsTypeIncompatibleThisReference = true;
    } else if (rightHandSide == thisExpression) {
        // otherwise, if `this` appears on the RHS. Then, we
        // need to check that the LHS can receive a variable of
        // the destination type.
        if (!MigrateSkeletalImplementationToInterfaceRefactoringProcessor
                .isAssignmentCompatible(destinationInterfaceTypeBinding, leftHandSide.resolveTypeBinding()))
            this.methodContainsTypeIncompatibleThisReference = true;
    } else
        throw new IllegalStateException(
                "this: " + thisExpression + " must appear either on the LHS or RHS of the assignment: " + node);
}
项目:Migrate-Skeletal-Implementation-to-Interface-Refactoring    文件:SourceMethodBodyAnalysisVisitor.java   
@Override
public boolean visit(ThisExpression node) {
    // #153: Precondition missing for compile-time type of this
    // TODO: #153 There is actually a lot more checks we should add
    // here.
    /*
     * TODO: Actually need to examine every kind of expression where `this`
     * may appear. #149. Really, type constraints can (or should) be used
     * for this. Actually, similar to enum problem, especially with finding
     * the parameter from where the `this` expression came. Assignment is
     * only one kind of expression, we need to also look at comparison and
     * switches.
     */
    if (node.getQualifier() != null)
        this.methodContainsQualifiedThisExpression = true;

    ASTNode parent = node.getParent();
    process(parent, node);
    return super.visit(node);
}
项目:che    文件:CodeStyleFix.java   
/** {@inheritDoc} */
@Override
public void rewriteAST(CompilationUnitRewrite cuRewrite, LinkedProposalModel model)
    throws CoreException {
  ASTRewrite rewrite = cuRewrite.getASTRewrite();
  TextEditGroup group = createTextEditGroup(getDescription(), cuRewrite);
  AST ast = rewrite.getAST();

  FieldAccess fieldAccess = ast.newFieldAccess();

  ThisExpression thisExpression = ast.newThisExpression();
  if (fQualifier != null) thisExpression.setQualifier(ast.newName(fQualifier));

  fieldAccess.setExpression(thisExpression);
  fieldAccess.setName((SimpleName) rewrite.createMoveTarget(fName));

  rewrite.replace(fName, fieldAccess, group);
}
项目:che    文件:CallInliner.java   
private void checkMethodDeclaration(RefactoringStatus result, int severity) {
  MethodDeclaration methodDeclaration = fSourceProvider.getDeclaration();
  // it is not allowed to inline constructor invocation only if it is used for class instance
  // creation
  // if constructor is invoked from another constructor then we can inline such invocation
  if (fInvocation.getNodeType() != ASTNode.CONSTRUCTOR_INVOCATION
      && methodDeclaration.isConstructor()) {
    result.addEntry(
        new RefactoringStatusEntry(
            severity,
            RefactoringCoreMessages.CallInliner_constructors,
            JavaStatusContext.create(fCUnit, fInvocation)));
  }
  if (fSourceProvider.hasSuperMethodInvocation()
      && fInvocation.getNodeType() == ASTNode.METHOD_INVOCATION) {
    Expression receiver = ((MethodInvocation) fInvocation).getExpression();
    if (receiver instanceof ThisExpression) {
      result.addEntry(
          new RefactoringStatusEntry(
              severity,
              RefactoringCoreMessages.CallInliner_super_into_this_expression,
              JavaStatusContext.create(fCUnit, fInvocation)));
    }
  }
}
项目:Eclipse-Postfix-Code-Completion    文件:MoveInnerToTopRefactoring.java   
@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);
}
项目:Eclipse-Postfix-Code-Completion    文件:MoveInnerToTopRefactoring.java   
private void modifyAccessToMethodsFromEnclosingInstance(CompilationUnitRewrite targetRewrite, MethodInvocation[] methodInvocations, AbstractTypeDeclaration declaration) {
    IMethodBinding binding= null;
    MethodInvocation invocation= null;
    for (int index= 0; index < methodInvocations.length; index++) {
        invocation= methodInvocations[index];
        binding= invocation.resolveMethodBinding();
        if (binding != null) {
            final Expression target= invocation.getExpression();
            if (target == null) {
                final Expression expression= createAccessExpressionToEnclosingInstanceFieldText(invocation, binding, declaration);
                targetRewrite.getASTRewrite().set(invocation, MethodInvocation.EXPRESSION_PROPERTY, expression, null);
            } else {
                if (!(invocation.getExpression() instanceof ThisExpression) || !(((ThisExpression) invocation.getExpression()).getQualifier() != null))
                    continue;
                targetRewrite.getASTRewrite().replace(target, createAccessExpressionToEnclosingInstanceFieldText(invocation, binding, declaration), null);
                targetRewrite.getImportRemover().registerRemovedNode(target);
            }
        }
    }
}
项目:Eclipse-Postfix-Code-Completion    文件:CallInliner.java   
private void checkMethodDeclaration(RefactoringStatus result, int severity) {
    MethodDeclaration methodDeclaration= fSourceProvider.getDeclaration();
    // it is not allowed to inline constructor invocation only if it is used for class instance creation
    // if constructor is invoked from another constructor then we can inline such invocation
    if (fInvocation.getNodeType() != ASTNode.CONSTRUCTOR_INVOCATION && methodDeclaration.isConstructor()) {
        result.addEntry(new RefactoringStatusEntry(
            severity,
            RefactoringCoreMessages.CallInliner_constructors,
            JavaStatusContext.create(fCUnit, fInvocation)));
    }
    if (fSourceProvider.hasSuperMethodInvocation() && fInvocation.getNodeType() == ASTNode.METHOD_INVOCATION) {
        Expression receiver= ((MethodInvocation)fInvocation).getExpression();
        if (receiver instanceof ThisExpression) {
            result.addEntry(new RefactoringStatusEntry(
                severity,
                RefactoringCoreMessages.CallInliner_super_into_this_expression,
                JavaStatusContext.create(fCUnit, fInvocation)));
        }
    }
}
项目:Eclipse-Postfix-Code-Completion    文件:GenerateHashCodeEqualsOperation.java   
private MethodDeclaration createGetOuterHelper() {
    String outerTypeName= fType.getDeclaringClass().getTypeDeclaration().getName();

    MethodDeclaration helperMethod= fAst.newMethodDeclaration();
    helperMethod.modifiers().addAll(ASTNodeFactory.newModifiers(fAst, Modifier.PRIVATE));
    helperMethod.setName(fAst.newSimpleName(METHODNAME_OUTER_TYPE));
    helperMethod.setConstructor(false);
    helperMethod.setReturnType2(fAst.newSimpleType(fAst.newSimpleName(outerTypeName)));

    Block body= fAst.newBlock();
    helperMethod.setBody(body);

    ThisExpression thisExpression= fAst.newThisExpression();
    thisExpression.setQualifier(fAst.newSimpleName(outerTypeName));

    ReturnStatement endReturn= fAst.newReturnStatement();
    endReturn.setExpression(thisExpression);
    body.statements().add(endReturn);

    return helperMethod;
}
项目:Eclipse-Postfix-Code-Completion    文件:CodeStyleFix.java   
/**
 * {@inheritDoc}
 */
@Override
public void rewriteAST(CompilationUnitRewrite cuRewrite, LinkedProposalModel model) throws CoreException {
    ASTRewrite rewrite= cuRewrite.getASTRewrite();
    TextEditGroup group= createTextEditGroup(getDescription(), cuRewrite);
    AST ast= rewrite.getAST();

    FieldAccess fieldAccess= ast.newFieldAccess();

    ThisExpression thisExpression= ast.newThisExpression();
    if (fQualifier != null)
        thisExpression.setQualifier(ast.newName(fQualifier));

    fieldAccess.setExpression(thisExpression);
    fieldAccess.setName((SimpleName) rewrite.createMoveTarget(fName));

    rewrite.replace(fName, fieldAccess, group);
}
项目:Eclipse-Postfix-Code-Completion    文件:SurroundWith.java   
private void qualifyThisExpressions(ASTNode node, final ASTRewrite rewrite, final ImportRewrite importRewrite, final ImportRewriteContext importRewriteContext) {
    node.accept(new GenericVisitor() {
        /**
         * {@inheritDoc}
         */
        @Override
        public boolean visit(ThisExpression thisExpr) {
            if (thisExpr.getQualifier() == null) {
                ITypeBinding typeBinding= thisExpr.resolveTypeBinding();
                if (typeBinding != null) {
                    String typeName= importRewrite.addImport(typeBinding.getTypeDeclaration(), importRewriteContext);
                    SimpleName simpleName= thisExpr.getAST().newSimpleName(typeName);
                    rewrite.set(thisExpr, ThisExpression.QUALIFIER_PROPERTY, simpleName, null);
                }
            }
            return super.visit(thisExpr);
        }
    });
}
项目:Eclipse-Postfix-Code-Completion-Juno38    文件:MoveInnerToTopRefactoring.java   
@Override
public boolean visit(final ThisExpression node) {
    Assert.isNotNull(node);
    final Name name= node.getQualifier();
    if (name != null && name.isSimpleName()) {
        final AST ast= node.getAST();
        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);
        fSourceRewrite.getASTRewrite().replace(node, expression, null);
    }
    return super.visit(node);
}
项目:Eclipse-Postfix-Code-Completion-Juno38    文件:MoveInnerToTopRefactoring.java   
private void modifyAccessToMethodsFromEnclosingInstance(CompilationUnitRewrite targetRewrite, MethodInvocation[] methodInvocations, AbstractTypeDeclaration declaration) {
    IMethodBinding binding= null;
    MethodInvocation invocation= null;
    for (int index= 0; index < methodInvocations.length; index++) {
        invocation= methodInvocations[index];
        binding= invocation.resolveMethodBinding();
        if (binding != null) {
            final Expression target= invocation.getExpression();
            if (target == null) {
                final Expression expression= createAccessExpressionToEnclosingInstanceFieldText(invocation, binding, declaration);
                targetRewrite.getASTRewrite().set(invocation, MethodInvocation.EXPRESSION_PROPERTY, expression, null);
            } else {
                if (!(invocation.getExpression() instanceof ThisExpression) || !(((ThisExpression) invocation.getExpression()).getQualifier() != null))
                    continue;
                targetRewrite.getASTRewrite().replace(target, createAccessExpressionToEnclosingInstanceFieldText(invocation, binding, declaration), null);
                targetRewrite.getImportRemover().registerRemovedNode(target);
            }
        }
    }
}
项目:Eclipse-Postfix-Code-Completion-Juno38    文件:CallInliner.java   
private void checkMethodDeclaration(RefactoringStatus result, int severity) {
    MethodDeclaration methodDeclaration= fSourceProvider.getDeclaration();
    // it is not allowed to inline constructor invocation only if it is used for class instance creation
    // if constructor is invoked from another constructor then we can inline such invocation
    if (fInvocation.getNodeType() != ASTNode.CONSTRUCTOR_INVOCATION && methodDeclaration.isConstructor()) {
        result.addEntry(new RefactoringStatusEntry(
            severity,
            RefactoringCoreMessages.CallInliner_constructors,
            JavaStatusContext.create(fCUnit, fInvocation)));
    }
    if (fSourceProvider.hasSuperMethodInvocation() && fInvocation.getNodeType() == ASTNode.METHOD_INVOCATION) {
        Expression receiver= ((MethodInvocation)fInvocation).getExpression();
        if (receiver instanceof ThisExpression) {
            result.addEntry(new RefactoringStatusEntry(
                severity,
                RefactoringCoreMessages.CallInliner_super_into_this_expression,
                JavaStatusContext.create(fCUnit, fInvocation)));
        }
    }
}
项目:Eclipse-Postfix-Code-Completion-Juno38    文件:GenerateHashCodeEqualsOperation.java   
private MethodDeclaration createGetOuterHelper() {
    String outerTypeName= fType.getDeclaringClass().getTypeDeclaration().getName();

    MethodDeclaration helperMethod= fAst.newMethodDeclaration();
    helperMethod.modifiers().addAll(ASTNodeFactory.newModifiers(fAst, Modifier.PRIVATE));
    helperMethod.setName(fAst.newSimpleName(METHODNAME_OUTER_TYPE));
    helperMethod.setConstructor(false);
    helperMethod.setReturnType2(fAst.newSimpleType(fAst.newSimpleName(outerTypeName)));

    Block body= fAst.newBlock();
    helperMethod.setBody(body);

    ThisExpression thisExpression= fAst.newThisExpression();
    thisExpression.setQualifier(fAst.newSimpleName(outerTypeName));

    ReturnStatement endReturn= fAst.newReturnStatement();
    endReturn.setExpression(thisExpression);
    body.statements().add(endReturn);

    return helperMethod;
}
项目:Eclipse-Postfix-Code-Completion-Juno38    文件:CodeStyleFix.java   
/**
 * {@inheritDoc}
 */
@Override
public void rewriteAST(CompilationUnitRewrite cuRewrite, LinkedProposalModel model) throws CoreException {
    ASTRewrite rewrite= cuRewrite.getASTRewrite();
    TextEditGroup group= createTextEditGroup(getDescription(), cuRewrite);
    AST ast= rewrite.getAST();

    FieldAccess fieldAccess= ast.newFieldAccess();

    ThisExpression thisExpression= ast.newThisExpression();
    if (fQualifier != null)
        thisExpression.setQualifier(ast.newName(fQualifier));

    fieldAccess.setExpression(thisExpression);
    fieldAccess.setName((SimpleName) rewrite.createMoveTarget(fName));

    rewrite.replace(fName, fieldAccess, group);
}
项目:Eclipse-Postfix-Code-Completion-Juno38    文件:SurroundWith.java   
private void qualifyThisExpressions(ASTNode node, final ASTRewrite rewrite, final ImportRewrite importRewrite, final ImportRewriteContext importRewriteContext) {
    node.accept(new GenericVisitor() {
        /**
         * {@inheritDoc}
         */
        @Override
        public boolean visit(ThisExpression thisExpr) {
            if (thisExpr.getQualifier() == null) {
                ITypeBinding typeBinding= thisExpr.resolveTypeBinding();
                if (typeBinding != null) {
                    String typeName= importRewrite.addImport(typeBinding.getTypeDeclaration(), importRewriteContext);
                    SimpleName simpleName= thisExpr.getAST().newSimpleName(typeName);
                    rewrite.set(thisExpr, ThisExpression.QUALIFIER_PROPERTY, simpleName, null);
                }
            }
            return super.visit(thisExpr);
        }
    });
}
项目:jive    文件:ExpressionVisitor.java   
/**
 * [ClassName '.'] this
 */
@Override
public boolean visit(final ThisExpression node)
{
  ASTNode enclosing = null;
  if (node.getQualifier() != null)
  {
    enclosing = ASTTools.enclosingTypeScope(node, node.getQualifier());
  }
  else
  {
    enclosing = ASTTools.enclosingTypeScope(node);
  }
  if (enclosing instanceof AbstractTypeDeclaration)
  {
    uses.add(factory.newResolvedThisVariable(node, (AbstractTypeDeclaration) enclosing,
        qualifierOf, isLHS, isActual));
  }
  else
  {
    uses.add(factory.newResolvedThisVariable(node, (AnonymousClassDeclaration) enclosing,
        qualifierOf, isLHS, isActual));
  }
  // do not visit children
  return false;
}
项目:eclipse.jdt.ls    文件:FlowAnalyzer.java   
@Override
public void endVisit(ThisExpression node) {
    if (skipNode(node)) {
        return;
    }
    assignFlowInfo(node, node.getQualifier());
}
项目:eclipse.jdt.ls    文件:ExtractMethodRefactoring.java   
private ASTNode[] createCallNodes(SnippetFinder.Match duplicate, int modifiers) {
    List<ASTNode> result = new ArrayList<>(2);

    IVariableBinding[] locals = fAnalyzer.getCallerLocals();
    for (int i = 0; i < locals.length; i++) {
        result.add(createDeclaration(locals[i], null));
    }

    MethodInvocation invocation = fAST.newMethodInvocation();
    invocation.setName(fAST.newSimpleName(fMethodName));
    ASTNode typeNode = ASTResolving.findParentType(fAnalyzer.getEnclosingBodyDeclaration());
    RefactoringStatus status = new RefactoringStatus();
    while (fDestination != typeNode) {
        fAnalyzer.checkInput(status, fMethodName, typeNode);
        if (!status.isOK()) {
            SimpleName destinationTypeName = fAST.newSimpleName(ASTNodes.getEnclosingType(fDestination).getName());
            if ((modifiers & Modifier.STATIC) == 0) {
                ThisExpression thisExpression = fAST.newThisExpression();
                thisExpression.setQualifier(destinationTypeName);
                invocation.setExpression(thisExpression);
            } else {
                invocation.setExpression(destinationTypeName);
            }
            break;
        }
        typeNode = typeNode.getParent();
    }

    List<Expression> arguments = invocation.arguments();
    for (int i = 0; i < fParameterInfos.size(); i++) {
        ParameterInfo parameter = fParameterInfos.get(i);
        arguments.add(ASTNodeFactory.newName(fAST, getMappedName(duplicate, parameter)));
    }
    if (fLinkedProposalModel != null) {
        LinkedProposalPositionGroup nameGroup = fLinkedProposalModel.getPositionGroup(KEY_NAME, true);
        nameGroup.addPosition(fRewriter.track(invocation.getName()), false);
    }

    ASTNode call;
    int returnKind = fAnalyzer.getReturnKind();
    switch (returnKind) {
        case ExtractMethodAnalyzer.ACCESS_TO_LOCAL:
            IVariableBinding binding = fAnalyzer.getReturnLocal();
            if (binding != null) {
                VariableDeclarationStatement decl = createDeclaration(getMappedBinding(duplicate, binding), invocation);
                call = decl;
            } else {
                Assignment assignment = fAST.newAssignment();
                assignment.setLeftHandSide(ASTNodeFactory.newName(fAST, getMappedBinding(duplicate, fAnalyzer.getReturnValue()).getName()));
                assignment.setRightHandSide(invocation);
                call = assignment;
            }
            break;
        case ExtractMethodAnalyzer.RETURN_STATEMENT_VALUE:
            ReturnStatement rs = fAST.newReturnStatement();
            rs.setExpression(invocation);
            call = rs;
            break;
        default:
            call = invocation;
    }

    if (call instanceof Expression && !fAnalyzer.isExpressionSelected()) {
        call = fAST.newExpressionStatement((Expression) call);
    }
    result.add(call);

    // We have a void return statement. The code looks like
    // extracted();
    // return;
    if (returnKind == ExtractMethodAnalyzer.RETURN_STATEMENT_VOID && !fAnalyzer.isLastStatementSelected()) {
        result.add(fAST.newReturnStatement());
    }
    return result.toArray(new ASTNode[result.size()]);
}
项目:eclipse.jdt.ls    文件:UnresolvedElementsSubProcessor.java   
private static void addQualifierToOuterProposal(IInvocationContext context, MethodInvocation invocationNode,
        IMethodBinding binding, Collection<CUCorrectionProposal> proposals) {
    ITypeBinding declaringType= binding.getDeclaringClass();
    ITypeBinding parentType= Bindings.getBindingOfParentType(invocationNode);
    ITypeBinding currType= parentType;

    boolean isInstanceMethod= !Modifier.isStatic(binding.getModifiers());

    while (currType != null && !Bindings.isSuperType(declaringType, currType)) {
        if (isInstanceMethod && Modifier.isStatic(currType.getModifiers())) {
            return;
        }
        currType= currType.getDeclaringClass();
    }
    if (currType == null || currType == parentType) {
        return;
    }

    ASTRewrite rewrite= ASTRewrite.create(invocationNode.getAST());

    String label = Messages.format(CorrectionMessages.UnresolvedElementsSubProcessor_changetoouter_description,
            ASTResolving.getTypeSignature(currType));
    ASTRewriteCorrectionProposal proposal = new ASTRewriteCorrectionProposal(label, context.getCompilationUnit(),
            rewrite, IProposalRelevance.QUALIFY_WITH_ENCLOSING_TYPE);

    ImportRewrite imports= proposal.createImportRewrite(context.getASTRoot());
    ImportRewriteContext importRewriteContext= new ContextSensitiveImportRewriteContext(invocationNode, imports);
    AST ast= invocationNode.getAST();

    String qualifier= imports.addImport(currType, importRewriteContext);
    Name name= ASTNodeFactory.newName(ast, qualifier);

    Expression newExpression;
    if (isInstanceMethod) {
        ThisExpression expr= ast.newThisExpression();
        expr.setQualifier(name);
        newExpression= expr;
    } else {
        newExpression= name;
    }

    rewrite.set(invocationNode, MethodInvocation.EXPRESSION_PROPERTY, newExpression, null);

    proposals.add(proposal);
}
项目:che    文件:CodeStyleFix.java   
/** {@inheritDoc} */
@Override
public boolean visit(final MethodInvocation node) {
  if (!fRemoveMethodQualifiers) return true;

  Expression expression = node.getExpression();
  if (!(expression instanceof ThisExpression)) return true;

  final SimpleName name = node.getName();
  if (name.resolveBinding() == null) return true;

  if (hasConflict(
      expression.getStartPosition(),
      name,
      ScopeAnalyzer.METHODS | ScopeAnalyzer.CHECK_VISIBILITY)) return true;

  Name qualifier = ((ThisExpression) expression).getQualifier();
  if (qualifier != null) {
    ITypeBinding declaringClass = ((IMethodBinding) name.resolveBinding()).getDeclaringClass();
    if (declaringClass == null) return true;

    ITypeBinding caller = getDeclaringType(node);
    if (caller == null) return true;

    ITypeBinding callee = (ITypeBinding) qualifier.resolveBinding();
    if (callee == null) return true;

    if (callee.isAssignmentCompatible(declaringClass)
        && caller.isAssignmentCompatible(declaringClass)) return true;
  }

  fOperations.add(
      new CompilationUnitRewriteOperation() {
        @Override
        public void rewriteAST(CompilationUnitRewrite cuRewrite, LinkedProposalModel model)
            throws CoreException {
          ASTRewrite rewrite = cuRewrite.getASTRewrite();
          TextEditGroup group =
              createTextEditGroup(
                  FixMessages.CodeStyleFix_removeThis_groupDescription, cuRewrite);
          rewrite.remove(node.getExpression(), group);
        }
      });
  return super.visit(node);
}
项目:che    文件:InferTypeArgumentsConstraintCreator.java   
private Expression getSimpleNameReceiver(SimpleName node) {
  Expression receiver;
  if (node.getParent() instanceof QualifiedName
      && node.getLocationInParent() == QualifiedName.NAME_PROPERTY) {
    receiver = ((QualifiedName) node.getParent()).getQualifier();
  } else if (node.getParent() instanceof FieldAccess
      && node.getLocationInParent() == FieldAccess.NAME_PROPERTY) {
    receiver = ((FieldAccess) node.getParent()).getExpression();
  } else {
    // TODO other cases? (ThisExpression, SuperAccessExpression, ...)
    receiver = null;
  }
  if (receiver instanceof ThisExpression) return null;
  else return receiver;
}
项目:che    文件:SourceAnalyzer.java   
@Override
public boolean visit(ThisExpression node) {
  if (node.getQualifier() != null) {
    status.addFatalError(
        RefactoringCoreMessages
            .InlineMethodRefactoring_SourceAnalyzer_qualified_this_expressions,
        JavaStatusContext.create(fTypeRoot, node));
    return false;
  }
  return true;
}
项目:che    文件:SourceAnalyzer.java   
@Override
public boolean visit(ThisExpression node) {
  if (fTypeCounter == 0) {
    fImplicitReceivers.add(node);
  }
  return true;
}
项目:che    文件:IntroduceIndirectionRefactoring.java   
private RefactoringStatus updateMethodInvocation(
    MethodInvocation originalInvocation, IMember enclosing, CompilationUnitRewrite unitRewriter)
    throws JavaModelException {

  RefactoringStatus status = new RefactoringStatus();

  // If the method invocation utilizes type arguments, skip this
  // call as the new target method may have additional parameters
  if (originalInvocation.typeArguments().size() > 0)
    return createWarningAboutCall(
        enclosing,
        originalInvocation,
        RefactoringCoreMessages.IntroduceIndirectionRefactoring_call_warning_type_arguments);

  MethodInvocation newInvocation = unitRewriter.getAST().newMethodInvocation();
  List<Expression> newInvocationArgs = newInvocation.arguments();
  List<Expression> originalInvocationArgs = originalInvocation.arguments();

  // static call => always use a qualifier
  String qualifier = unitRewriter.getImportRewrite().addImport(fIntermediaryTypeBinding);
  newInvocation.setExpression(ASTNodeFactory.newName(unitRewriter.getAST(), qualifier));
  newInvocation.setName(unitRewriter.getAST().newSimpleName(getIntermediaryMethodName()));

  final Expression expression = originalInvocation.getExpression();

  if (!isStaticTarget()) {
    // Add the expression as the first parameter
    if (expression == null) {
      // There is no expression for this call. Use a (possibly qualified) "this" expression.
      ThisExpression expr = unitRewriter.getAST().newThisExpression();
      RefactoringStatus qualifierStatus =
          qualifyThisExpression(expr, originalInvocation, enclosing, unitRewriter);
      status.merge(qualifierStatus);
      if (qualifierStatus.hasEntries())
        // warning means don't include this invocation
        return status;
      newInvocationArgs.add(expr);
    } else {
      Expression expressionAsParam =
          (Expression) unitRewriter.getASTRewrite().createMoveTarget(expression);
      newInvocationArgs.add(expressionAsParam);
    }
  } else {
    if (expression != null) {
      // Check if expression is the type name. If not, there may
      // be side effects (e.g. inside methods) -> don't update
      if (!(expression instanceof Name) || ASTNodes.getTypeBinding((Name) expression) == null)
        return createWarningAboutCall(
            enclosing,
            originalInvocation,
            RefactoringCoreMessages
                .IntroduceIndirectionRefactoring_call_warning_static_expression_access);
    }
  }

  for (int i = 0; i < originalInvocationArgs.size(); i++) {
    Expression originalInvocationArg = originalInvocationArgs.get(i);
    Expression movedArg =
        (Expression) unitRewriter.getASTRewrite().createMoveTarget(originalInvocationArg);
    newInvocationArgs.add(movedArg);
  }

  unitRewriter
      .getASTRewrite()
      .replace(
          originalInvocation,
          newInvocation,
          unitRewriter.createGroupDescription(
              RefactoringCoreMessages
                  .IntroduceIndirectionRefactoring_group_description_replace_call));

  return status;
}
项目:che    文件:CallInliner.java   
private void computeReceiver() throws BadLocationException {
  Expression receiver = Invocations.getExpression(fInvocation);
  if (receiver == null) return;
  final boolean isName = receiver instanceof Name;
  if (isName)
    fContext.receiverIsStatic = ((Name) receiver).resolveBinding() instanceof ITypeBinding;
  if (ASTNodes.isLiteral(receiver) || isName || receiver instanceof ThisExpression) {
    fContext.receiver =
        fBuffer.getDocument().get(receiver.getStartPosition(), receiver.getLength());
    return;
  }
  switch (fSourceProvider.getReceiversToBeUpdated()) {
    case 0:
      // Make sure we evaluate the current receiver. Best is to assign to
      // local.
      fLocals.add(
          createLocalDeclaration(
              receiver.resolveTypeBinding(),
              fInvocationScope.createName("r", true), // $NON-NLS-1$
              (Expression) fRewrite.createCopyTarget(receiver)));
      return;
    case 1:
      fContext.receiver =
          fBuffer.getDocument().get(receiver.getStartPosition(), receiver.getLength());
      return;
    default:
      String local = fInvocationScope.createName("r", true); // $NON-NLS-1$
      fLocals.add(
          createLocalDeclaration(
              receiver.resolveTypeBinding(),
              local,
              (Expression) fRewrite.createCopyTarget(receiver)));
      fContext.receiver = local;
      return;
  }
}
项目:che    文件:ExtractMethodRefactoring.java   
private ASTNode[] createCallNodes(SnippetFinder.Match duplicate, int modifiers) {
  List<ASTNode> result = new ArrayList<ASTNode>(2);

  IVariableBinding[] locals = fAnalyzer.getCallerLocals();
  for (int i = 0; i < locals.length; i++) {
    result.add(createDeclaration(locals[i], null));
  }

  MethodInvocation invocation = fAST.newMethodInvocation();
  invocation.setName(fAST.newSimpleName(fMethodName));
  ASTNode typeNode = ASTResolving.findParentType(fAnalyzer.getEnclosingBodyDeclaration());
  RefactoringStatus status = new RefactoringStatus();
  while (fDestination != typeNode) {
    fAnalyzer.checkInput(status, fMethodName, typeNode);
    if (!status.isOK()) {
      SimpleName destinationTypeName =
          fAST.newSimpleName(ASTNodes.getEnclosingType(fDestination).getName());
      if ((modifiers & Modifier.STATIC) == 0) {
        ThisExpression thisExpression = fAST.newThisExpression();
        thisExpression.setQualifier(destinationTypeName);
        invocation.setExpression(thisExpression);
      } else {
        invocation.setExpression(destinationTypeName);
      }
      break;
    }
    typeNode = typeNode.getParent();
  }

  List<Expression> arguments = invocation.arguments();
  for (int i = 0; i < fParameterInfos.size(); i++) {
    ParameterInfo parameter = fParameterInfos.get(i);
    arguments.add(ASTNodeFactory.newName(fAST, getMappedName(duplicate, parameter)));
  }
  if (fLinkedProposalModel != null) {
    LinkedProposalPositionGroup nameGroup = fLinkedProposalModel.getPositionGroup(KEY_NAME, true);
    nameGroup.addPosition(fRewriter.track(invocation.getName()), false);
  }

  ASTNode call;
  int returnKind = fAnalyzer.getReturnKind();
  switch (returnKind) {
    case ExtractMethodAnalyzer.ACCESS_TO_LOCAL:
      IVariableBinding binding = fAnalyzer.getReturnLocal();
      if (binding != null) {
        VariableDeclarationStatement decl =
            createDeclaration(getMappedBinding(duplicate, binding), invocation);
        call = decl;
      } else {
        Assignment assignment = fAST.newAssignment();
        assignment.setLeftHandSide(
            ASTNodeFactory.newName(
                fAST, getMappedBinding(duplicate, fAnalyzer.getReturnValue()).getName()));
        assignment.setRightHandSide(invocation);
        call = assignment;
      }
      break;
    case ExtractMethodAnalyzer.RETURN_STATEMENT_VALUE:
      ReturnStatement rs = fAST.newReturnStatement();
      rs.setExpression(invocation);
      call = rs;
      break;
    default:
      call = invocation;
  }

  if (call instanceof Expression && !fAnalyzer.isExpressionSelected()) {
    call = fAST.newExpressionStatement((Expression) call);
  }
  result.add(call);

  // We have a void return statement. The code looks like
  // extracted();
  // return;
  if (returnKind == ExtractMethodAnalyzer.RETURN_STATEMENT_VOID
      && !fAnalyzer.isLastStatementSelected()) {
    result.add(fAST.newReturnStatement());
  }
  return result.toArray(new ASTNode[result.size()]);
}
项目:che    文件:FullConstraintCreator.java   
@Override
public ITypeConstraint[] create(ThisExpression expression) {
  ConstraintVariable thisExpression =
      fConstraintVariableFactory.makeExpressionOrTypeVariable(expression, getContext());
  ConstraintVariable declaringType =
      fConstraintVariableFactory.makeRawBindingVariable(
          expression
              .resolveTypeBinding()); // TODO fix this - can't use Decl(M) because 'this' can live
  // outside of methods
  return fTypeConstraintFactory.createDefinesConstraint(thisExpression, declaringType);
}
项目:che    文件:UnresolvedElementsSubProcessor.java   
private static void addQualifierToOuterProposal(
    IInvocationContext context,
    MethodInvocation invocationNode,
    IMethodBinding binding,
    Collection<ICommandAccess> proposals) {
  ITypeBinding declaringType = binding.getDeclaringClass();
  ITypeBinding parentType = Bindings.getBindingOfParentType(invocationNode);
  ITypeBinding currType = parentType;

  boolean isInstanceMethod = !Modifier.isStatic(binding.getModifiers());

  while (currType != null && !Bindings.isSuperType(declaringType, currType)) {
    if (isInstanceMethod && Modifier.isStatic(currType.getModifiers())) {
      return;
    }
    currType = currType.getDeclaringClass();
  }
  if (currType == null || currType == parentType) {
    return;
  }

  ASTRewrite rewrite = ASTRewrite.create(invocationNode.getAST());

  String label =
      Messages.format(
          CorrectionMessages.UnresolvedElementsSubProcessor_changetoouter_description,
          ASTResolving.getTypeSignature(currType));
  Image image = JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_CHANGE);
  ASTRewriteCorrectionProposal proposal =
      new ASTRewriteCorrectionProposal(
          label,
          context.getCompilationUnit(),
          rewrite,
          IProposalRelevance.QUALIFY_WITH_ENCLOSING_TYPE,
          image);

  ImportRewrite imports = proposal.createImportRewrite(context.getASTRoot());
  ImportRewriteContext importRewriteContext =
      new ContextSensitiveImportRewriteContext(invocationNode, imports);
  AST ast = invocationNode.getAST();

  String qualifier = imports.addImport(currType, importRewriteContext);
  Name name = ASTNodeFactory.newName(ast, qualifier);

  Expression newExpression;
  if (isInstanceMethod) {
    ThisExpression expr = ast.newThisExpression();
    expr.setQualifier(name);
    newExpression = expr;
  } else {
    newExpression = name;
  }

  rewrite.set(invocationNode, MethodInvocation.EXPRESSION_PROPERTY, newExpression, null);

  proposals.add(proposal);
}
项目:Eclipse-Postfix-Code-Completion    文件:MoveInnerToTopRefactoring.java   
@Override
public boolean visit(ThisExpression node) {
    final Name qualifier= node.getQualifier();
    if (qualifier != null) {
        final ITypeBinding binding= qualifier.resolveTypeBinding();
        if (binding != null && binding != fCurrentType.getTypeDeclaration()) {
            fSimpleNames.add(qualifier);
        }
    }
    return super.visit(node);
}
项目:Eclipse-Postfix-Code-Completion    文件:MoveInnerToTopRefactoring.java   
private Expression createEnclosingInstanceCreationString(final ASTNode node, final ICompilationUnit cu) throws JavaModelException {
    Assert.isTrue((node instanceof ClassInstanceCreation) || (node instanceof SuperConstructorInvocation));
    Assert.isNotNull(cu);
    Expression expression= null;
    if (node instanceof ClassInstanceCreation)
        expression= ((ClassInstanceCreation) node).getExpression();
    else
        expression= ((SuperConstructorInvocation) node).getExpression();
    final AST ast= node.getAST();
    if (expression != null)
        return expression;
    else if (JdtFlags.isStatic(fType))
        return null;
    else if (isInsideSubclassOfDeclaringType(node))
        return ast.newThisExpression();
    else if ((node.getStartPosition() >= fType.getSourceRange().getOffset() && ASTNodes.getExclusiveEnd(node) <= fType.getSourceRange().getOffset() + fType.getSourceRange().getLength())) {
        if (fCodeGenerationSettings.useKeywordThis || fEnclosingInstanceFieldName.equals(fNameForEnclosingInstanceConstructorParameter)) {
            final FieldAccess access= ast.newFieldAccess();
            access.setExpression(ast.newThisExpression());
            access.setName(ast.newSimpleName(fEnclosingInstanceFieldName));
            return access;
        } else
            return ast.newSimpleName(fEnclosingInstanceFieldName);
    } else if (isInsideTypeNestedInDeclaringType(node)) {
        final ThisExpression qualified= ast.newThisExpression();
        qualified.setQualifier(ast.newSimpleName(fType.getDeclaringType().getElementName()));
        return qualified;
    }
    return null;
}
项目:Eclipse-Postfix-Code-Completion    文件:MoveInnerToTopRefactoring.java   
private Expression createQualifiedReadAccessExpressionForEnclosingInstance(AST ast) {
    ThisExpression expression= ast.newThisExpression();
    expression.setQualifier(ast.newName(new String[] { fType.getElementName()}));
    FieldAccess access= ast.newFieldAccess();
    access.setExpression(expression);
    access.setName(ast.newSimpleName(fEnclosingInstanceFieldName));
    return access;
}
项目:Eclipse-Postfix-Code-Completion    文件:MoveInstanceMethodProcessor.java   
@Override
public final boolean visit(final ThisExpression node) {
    Assert.isNotNull(node);
    if (node.getQualifier() != null) {
        fStatus.merge(RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.MoveInstanceMethodProcessor_refers_enclosing_instances, JavaStatusContext.create(fMethod.getCompilationUnit(), node)));
        fResult.add(node);
    }
    return false;
}
项目:Eclipse-Postfix-Code-Completion    文件:MoveInstanceMethodProcessor.java   
@Override
public final boolean visit(final FieldAccess node) {
    Assert.isNotNull(node);
    final Expression expression= node.getExpression();
    final IVariableBinding variable= node.resolveFieldBinding();
    final AST ast= fRewrite.getAST();
    if (expression instanceof ThisExpression) {
        if (Bindings.equals(fTarget, variable)) {
            if (fAnonymousClass > 0) {
                final ThisExpression target= ast.newThisExpression();
                target.setQualifier(ast.newSimpleName(fTargetType.getElementName()));
                fRewrite.replace(node, target, null);
            } else
                fRewrite.replace(node, ast.newThisExpression(), null);
            return false;
        } else {
            expression.accept(this);
            return false;
        }
    } else if (expression instanceof FieldAccess) {
        final FieldAccess access= (FieldAccess) expression;
        final IBinding binding= access.getName().resolveBinding();
        if (access.getExpression() instanceof ThisExpression && Bindings.equals(fTarget, binding)) {
            ASTNode newFieldAccess= getFieldReference(node.getName(), fRewrite);
            fRewrite.replace(node, newFieldAccess, null);
            return false;
        }
    } else if (expression != null) {
        expression.accept(this);
        return false;
    }
    return true;
}
项目:Eclipse-Postfix-Code-Completion    文件:MoveInstanceMethodProcessor.java   
@Override
public final boolean visit(final FieldAccess node) {
    Assert.isNotNull(node);
    if (node.getExpression() instanceof ThisExpression) {
        final IVariableBinding binding= (IVariableBinding) node.getName().resolveBinding();
        if (binding != null) {
            final String key= binding.getKey();
            if (!fFound.contains(key)) {
                fFound.add(key);
                fBindings.add(binding);
            }
        }
    }
    return true;
}
项目:Eclipse-Postfix-Code-Completion    文件:MoveInstanceMethodProcessor.java   
@Override
public final boolean visit(final MethodInvocation node) {
    Assert.isNotNull(node);
    final Expression expression= node.getExpression();
    final IMethodBinding binding= node.resolveMethodBinding();
    if (binding == null || !Modifier.isStatic(binding.getModifiers()) && Bindings.equals(binding, fBinding) && (expression == null || expression instanceof ThisExpression)) {
        fStatus.merge(RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.MoveInstanceMethodProcessor_potentially_recursive, JavaStatusContext.create(fMethod.getCompilationUnit(), node)));
        fResult.add(node);
        return false;
    }
    return true;
}
项目:Eclipse-Postfix-Code-Completion    文件:MoveInstanceMethodProcessor.java   
@Override
public final boolean visit(final ThisExpression node) {
    Assert.isNotNull(node);
    fResult.add(node);
    fStatus.merge(RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.MoveInstanceMethodProcessor_this_reference, JavaStatusContext.create(fMethod.getCompilationUnit(), node)));
    return false;
}
项目:Eclipse-Postfix-Code-Completion    文件:PullUpRefactoringProcessor.java   
@Override
public final boolean visit(final SuperMethodInvocation node) {
    if (!fAnonymousClassDeclaration && !fTypeDeclarationStatement) {
        final IBinding superBinding= node.getName().resolveBinding();
        if (superBinding instanceof IMethodBinding) {
            final IMethodBinding extended= (IMethodBinding) superBinding;
            if (fEnclosingMethod != null && fEnclosingMethod.overrides(extended))
                return true;
            final ITypeBinding declaringBinding= extended.getDeclaringClass();
            if (declaringBinding != null) {
                final IType type= (IType) declaringBinding.getJavaElement();
                if (!fSuperReferenceType.equals(type))
                    return true;
            }
        }
        final AST ast= node.getAST();
        final ThisExpression expression= ast.newThisExpression();
        final MethodInvocation invocation= ast.newMethodInvocation();
        final SimpleName simple= ast.newSimpleName(node.getName().getIdentifier());
        invocation.setName(simple);
        invocation.setExpression(expression);
        final List<Expression> arguments= node.arguments();
        if (arguments != null && arguments.size() > 0) {
            final ListRewrite rewriter= fRewrite.getListRewrite(invocation, MethodInvocation.ARGUMENTS_PROPERTY);
            ListRewrite superRewriter= fRewrite.getListRewrite(node, SuperMethodInvocation.ARGUMENTS_PROPERTY);
            ASTNode copyTarget= superRewriter.createCopyTarget(arguments.get(0), arguments.get(arguments.size() - 1));
            rewriter.insertLast(copyTarget, null);
        }
        fRewrite.replace(node, invocation, null);
        if (!fSourceRewriter.getCu().equals(fTargetRewriter.getCu()))
            fSourceRewriter.getImportRemover().registerRemovedNode(node);
        return true;
    }
    return false;
}
项目:Eclipse-Postfix-Code-Completion    文件:InferTypeArgumentsConstraintCreator.java   
private Expression getSimpleNameReceiver(SimpleName node) {
    Expression receiver;
    if (node.getParent() instanceof QualifiedName && node.getLocationInParent() == QualifiedName.NAME_PROPERTY) {
        receiver= ((QualifiedName) node.getParent()).getQualifier();
    } else if (node.getParent() instanceof FieldAccess && node.getLocationInParent() == FieldAccess.NAME_PROPERTY) {
        receiver= ((FieldAccess) node.getParent()).getExpression();
    } else {
        //TODO other cases? (ThisExpression, SuperAccessExpression, ...)
        receiver= null;
    }
    if (receiver instanceof ThisExpression)
        return null;
    else
        return receiver;
}
项目:Eclipse-Postfix-Code-Completion    文件:SourceAnalyzer.java   
@Override
public boolean visit(ThisExpression node) {
    if (node.getQualifier() != null) {
        status.addFatalError(
            RefactoringCoreMessages.InlineMethodRefactoring_SourceAnalyzer_qualified_this_expressions,
            JavaStatusContext.create(fTypeRoot, node));
        return false;
    }
    return true;
}