Search in sources :

Example 1 with ChangeCorrectionProposal

use of org.eclipse.jdt.ls.core.internal.corrections.proposals.ChangeCorrectionProposal in project eclipse.jdt.ls by eclipse.

the class CodeActionResolveHandler method resolve.

public CodeAction resolve(CodeAction params, IProgressMonitor monitor) {
    Map<String, String> data = JSONUtility.toModel(params.getData(), Map.class);
    // clean resolve data
    params.setData(null);
    int proposalId = Integer.parseInt(data.get(DATA_FIELD_PROPOSAL_ID));
    long requestId = Long.parseLong(data.get(DATA_FIELD_REQUEST_ID));
    ResponseStore.ResponseItem<Either<ChangeCorrectionProposal, CodeActionProposal>> response = CodeActionHandler.codeActionStore.get(requestId);
    if (response == null || response.getProposals().size() <= proposalId) {
        throw new IllegalStateException("Invalid codeAction proposal");
    }
    try {
        Either<ChangeCorrectionProposal, CodeActionProposal> proposal = response.getProposals().get(proposalId);
        WorkspaceEdit edit = proposal.isLeft() ? ChangeUtil.convertToWorkspaceEdit(proposal.getLeft().getChange()) : proposal.getRight().resolveEdit(monitor);
        if (ChangeUtil.hasChanges(edit)) {
            params.setEdit(edit);
        }
    } catch (CoreException e) {
        JavaLanguageServerPlugin.logException("Problem converting code action proposal to workspace edit", e);
    }
    return params;
}
Also used : WorkspaceEdit(org.eclipse.lsp4j.WorkspaceEdit) ChangeCorrectionProposal(org.eclipse.jdt.ls.core.internal.corrections.proposals.ChangeCorrectionProposal) CoreException(org.eclipse.core.runtime.CoreException) Either(org.eclipse.lsp4j.jsonrpc.messages.Either)

Example 2 with ChangeCorrectionProposal

use of org.eclipse.jdt.ls.core.internal.corrections.proposals.ChangeCorrectionProposal in project eclipse.jdt.ls by eclipse.

the class RefactorProcessor method getInlineProposal.

private boolean getInlineProposal(IInvocationContext context, ASTNode node, Collection<ChangeCorrectionProposal> resultingCollections) {
    if (resultingCollections == null) {
        return false;
    }
    if (!(node instanceof SimpleName)) {
        return false;
    }
    SimpleName name = (SimpleName) node;
    IBinding binding = name.resolveBinding();
    try {
        if (binding instanceof IVariableBinding) {
            IVariableBinding varBinding = (IVariableBinding) binding;
            if (varBinding.isParameter()) {
                return false;
            }
            if (varBinding.isField()) {
                // Inline Constant (static final field)
                if (RefactoringAvailabilityTesterCore.isInlineConstantAvailable((IField) varBinding.getJavaElement())) {
                    InlineConstantRefactoring refactoring = new InlineConstantRefactoring(context.getCompilationUnit(), context.getASTRoot(), context.getSelectionOffset(), context.getSelectionLength());
                    if (refactoring != null && refactoring.checkInitialConditions(new NullProgressMonitor()).isOK() && refactoring.getReferences(new NullProgressMonitor(), new RefactoringStatus()).length > 0) {
                        refactoring.setRemoveDeclaration(refactoring.isDeclarationSelected());
                        refactoring.setReplaceAllReferences(refactoring.isDeclarationSelected());
                        CheckConditionsOperation check = new CheckConditionsOperation(refactoring, CheckConditionsOperation.FINAL_CONDITIONS);
                        final CreateChangeOperation create = new CreateChangeOperation(check, RefactoringStatus.FATAL);
                        create.run(new NullProgressMonitor());
                        String label = ActionMessages.InlineConstantRefactoringAction_label;
                        int relevance = IProposalRelevance.INLINE_LOCAL;
                        ChangeCorrectionProposal proposal = new ChangeCorrectionProposal(label, CodeActionKind.RefactorInline, create.getChange(), relevance);
                        resultingCollections.add(proposal);
                        return true;
                    }
                }
                return false;
            }
            ASTNode decl = context.getASTRoot().findDeclaringNode(varBinding);
            if (!(decl instanceof VariableDeclarationFragment) || decl.getLocationInParent() != VariableDeclarationStatement.FRAGMENTS_PROPERTY) {
                return false;
            }
            // Inline Local Variable
            if (binding.getJavaElement() instanceof ILocalVariable && RefactoringAvailabilityTesterCore.isInlineTempAvailable((ILocalVariable) binding.getJavaElement())) {
                InlineTempRefactoring refactoring = new InlineTempRefactoring((VariableDeclaration) decl);
                boolean status;
                try {
                    status = refactoring.checkAllConditions(new NullProgressMonitor()).isOK();
                } catch (Exception e) {
                    // ignore
                    status = false;
                }
                if (status && refactoring.getReferences().length > 0) {
                    String label = CorrectionMessages.QuickAssistProcessor_inline_local_description;
                    int relevance = IProposalRelevance.INLINE_LOCAL;
                    RefactoringCorrectionProposal proposal = new RefactoringCorrectionProposal(label, CodeActionKind.RefactorInline, context.getCompilationUnit(), refactoring, relevance);
                    resultingCollections.add(proposal);
                    return true;
                }
            }
        } else if (binding instanceof IMethodBinding) {
            // Inline Method
            if (RefactoringAvailabilityTesterCore.isInlineMethodAvailable((IMethod) binding.getJavaElement())) {
                InlineMethodRefactoring refactoring = InlineMethodRefactoring.create(context.getCompilationUnit(), context.getASTRoot(), context.getSelectionOffset(), context.getSelectionLength());
                if (refactoring != null && refactoring.checkInitialConditions(new NullProgressMonitor()).isOK()) {
                    CheckConditionsOperation check = new CheckConditionsOperation(refactoring, CheckConditionsOperation.FINAL_CONDITIONS);
                    final CreateChangeOperation create = new CreateChangeOperation(check, RefactoringStatus.FATAL);
                    create.run(new NullProgressMonitor());
                    String label = ActionMessages.InlineMethodRefactoringAction_label;
                    int relevance = IProposalRelevance.INLINE_LOCAL;
                    ChangeCorrectionProposal proposal = new ChangeCorrectionProposal(label, CodeActionKind.RefactorInline, create.getChange(), relevance);
                    resultingCollections.add(proposal);
                    return true;
                }
            }
        }
    } catch (CoreException e) {
        JavaLanguageServerPlugin.log(e);
    }
    return false;
}
Also used : IMethodBinding(org.eclipse.jdt.core.dom.IMethodBinding) NullProgressMonitor(org.eclipse.core.runtime.NullProgressMonitor) InlineMethodRefactoring(org.eclipse.jdt.internal.corext.refactoring.code.InlineMethodRefactoring) InlineConstantRefactoring(org.eclipse.jdt.internal.corext.refactoring.code.InlineConstantRefactoring) SimpleName(org.eclipse.jdt.core.dom.SimpleName) IBinding(org.eclipse.jdt.core.dom.IBinding) RefactoringStatus(org.eclipse.ltk.core.refactoring.RefactoringStatus) IVariableBinding(org.eclipse.jdt.core.dom.IVariableBinding) RefactoringCorrectionProposal(org.eclipse.jdt.ls.core.internal.corrections.proposals.RefactoringCorrectionProposal) TypeChangeCorrectionProposal(org.eclipse.jdt.ls.core.internal.corrections.proposals.TypeChangeCorrectionProposal) ChangeCorrectionProposal(org.eclipse.jdt.ls.core.internal.corrections.proposals.ChangeCorrectionProposal) CoreException(org.eclipse.core.runtime.CoreException) JavaModelException(org.eclipse.jdt.core.JavaModelException) ILocalVariable(org.eclipse.jdt.core.ILocalVariable) CreateChangeOperation(org.eclipse.ltk.core.refactoring.CreateChangeOperation) CoreException(org.eclipse.core.runtime.CoreException) VariableDeclarationFragment(org.eclipse.jdt.core.dom.VariableDeclarationFragment) CheckConditionsOperation(org.eclipse.ltk.core.refactoring.CheckConditionsOperation) ASTNode(org.eclipse.jdt.core.dom.ASTNode) InlineTempRefactoring(org.eclipse.jdt.internal.corext.refactoring.code.InlineTempRefactoring) IMethod(org.eclipse.jdt.core.IMethod)

Example 3 with ChangeCorrectionProposal

use of org.eclipse.jdt.ls.core.internal.corrections.proposals.ChangeCorrectionProposal in project eclipse.jdt.ls by eclipse.

the class RefactorProcessor method getInverseLocalVariableProposals.

private boolean getInverseLocalVariableProposals(CodeActionParams params, IInvocationContext context, ASTNode covering, Collection<ChangeCorrectionProposal> proposals) {
    if (proposals == null) {
        return false;
    }
    ChangeCorrectionProposal proposal = null;
    if (this.preferenceManager.getClientPreferences().isAdvancedExtractRefactoringSupported()) {
        proposal = InvertBooleanUtility.getInvertVariableProposal(params, context, covering, true);
    } else {
        proposal = InvertBooleanUtility.getInvertVariableProposal(params, context, covering, false);
    }
    if (proposal == null) {
        return false;
    }
    proposals.add(proposal);
    return true;
}
Also used : TypeChangeCorrectionProposal(org.eclipse.jdt.ls.core.internal.corrections.proposals.TypeChangeCorrectionProposal) ChangeCorrectionProposal(org.eclipse.jdt.ls.core.internal.corrections.proposals.ChangeCorrectionProposal)

Example 4 with ChangeCorrectionProposal

use of org.eclipse.jdt.ls.core.internal.corrections.proposals.ChangeCorrectionProposal in project eclipse.jdt.ls by eclipse.

the class RefactorProcessor method getAddStaticImportProposals.

/**
 * Create static import proposal, which converts invocations to static import.
 *
 * @param context
 *            the invocation context
 * @param node
 *            the node to work on
 * @param proposals
 *            the receiver of proposals, may be {@code null}
 * @return {@code true} if the operation could or has been performed,
 *         {@code false otherwise}
 */
private static boolean getAddStaticImportProposals(IInvocationContext context, ASTNode node, Collection<ChangeCorrectionProposal> proposals) {
    if (!(node instanceof SimpleName)) {
        return false;
    }
    final SimpleName name = (SimpleName) node;
    final IBinding binding;
    final ITypeBinding declaringClass;
    if (name.getParent() instanceof MethodInvocation) {
        MethodInvocation mi = (MethodInvocation) name.getParent();
        Expression expression = mi.getExpression();
        if (expression == null || expression.equals(name)) {
            return false;
        }
        binding = mi.resolveMethodBinding();
        if (binding == null) {
            return false;
        }
        declaringClass = ((IMethodBinding) binding).getDeclaringClass();
    } else if (name.getParent() instanceof QualifiedName) {
        QualifiedName qn = (QualifiedName) name.getParent();
        if (name.equals(qn.getQualifier()) || qn.getParent() instanceof ImportDeclaration) {
            return false;
        }
        binding = qn.resolveBinding();
        if (!(binding instanceof IVariableBinding)) {
            return false;
        }
        declaringClass = ((IVariableBinding) binding).getDeclaringClass();
    } else {
        return false;
    }
    if (!Modifier.isStatic(binding.getModifiers())) {
        // only work with static bindings
        return false;
    }
    boolean needImport = false;
    if (!isDirectlyAccessible(name, declaringClass)) {
        if (Modifier.isPrivate(declaringClass.getModifiers())) {
            return false;
        }
        needImport = true;
    }
    if (proposals == null) {
        // return early, just testing if we could do it
        return true;
    }
    try {
        ImportRewrite importRewrite = StubUtility.createImportRewrite(context.getCompilationUnit(), true);
        ASTRewrite astRewrite = ASTRewrite.create(node.getAST());
        ASTRewrite astRewriteReplaceAllOccurrences = ASTRewrite.create(node.getAST());
        ImportRemover remover = new ImportRemover(context.getCompilationUnit().getJavaProject(), context.getASTRoot());
        ImportRemover removerAllOccurences = new ImportRemover(context.getCompilationUnit().getJavaProject(), context.getASTRoot());
        MethodInvocation mi = null;
        QualifiedName qn = null;
        if (name.getParent() instanceof MethodInvocation) {
            mi = (MethodInvocation) name.getParent();
            // convert the method invocation
            astRewrite.remove(mi.getExpression(), null);
            remover.registerRemovedNode(mi.getExpression());
            removerAllOccurences.registerRemovedNode(mi.getExpression());
            mi.typeArguments().forEach(typeObject -> {
                Type type = (Type) typeObject;
                astRewrite.remove(type, null);
                remover.registerRemovedNode(type);
                removerAllOccurences.registerRemovedNode(type);
            });
        } else if (name.getParent() instanceof QualifiedName) {
            qn = (QualifiedName) name.getParent();
            // convert the field access
            astRewrite.replace(qn, ASTNodeFactory.newName(node.getAST(), name.getFullyQualifiedName()), null);
            remover.registerRemovedNode(qn);
            removerAllOccurences.registerRemovedNode(qn);
        } else {
            return false;
        }
        MethodInvocation miFinal = mi;
        name.getRoot().accept(new ASTVisitor() {

            @Override
            public boolean visit(MethodInvocation methodInvocation) {
                Expression methodInvocationExpression = methodInvocation.getExpression();
                if (methodInvocationExpression == null) {
                    return super.visit(methodInvocation);
                }
                if (methodInvocationExpression instanceof Name) {
                    String fullyQualifiedName = ((Name) methodInvocationExpression).getFullyQualifiedName();
                    if (miFinal != null && miFinal.getExpression() instanceof Name && ((Name) miFinal.getExpression()).getFullyQualifiedName().equals(fullyQualifiedName) && miFinal.getName().getIdentifier().equals(methodInvocation.getName().getIdentifier())) {
                        methodInvocation.typeArguments().forEach(type -> {
                            astRewriteReplaceAllOccurrences.remove((Type) type, null);
                            removerAllOccurences.registerRemovedNode((Type) type);
                        });
                        astRewriteReplaceAllOccurrences.remove(methodInvocationExpression, null);
                        removerAllOccurences.registerRemovedNode(methodInvocationExpression);
                    }
                }
                return super.visit(methodInvocation);
            }
        });
        QualifiedName qnFinal = qn;
        name.getRoot().accept(new ASTVisitor() {

            @Override
            public boolean visit(QualifiedName qualifiedName) {
                if (qnFinal != null && qualifiedName.getFullyQualifiedName().equals(qnFinal.getFullyQualifiedName())) {
                    astRewriteReplaceAllOccurrences.replace(qualifiedName, ASTNodeFactory.newName(node.getAST(), name.getFullyQualifiedName()), null);
                    removerAllOccurences.registerRemovedNode(qualifiedName);
                }
                return super.visit(qualifiedName);
            }
        });
        if (needImport) {
            importRewrite.addStaticImport(binding);
        }
        ASTRewriteRemoveImportsCorrectionProposal proposal = new ASTRewriteRemoveImportsCorrectionProposal(CorrectionMessages.QuickAssistProcessor_convert_to_static_import, CodeActionKind.Refactor, context.getCompilationUnit(), astRewrite, IProposalRelevance.ADD_STATIC_IMPORT);
        proposal.setImportRewrite(importRewrite);
        proposal.setImportRemover(remover);
        proposals.add(proposal);
        ASTRewriteRemoveImportsCorrectionProposal proposalReplaceAllOccurrences = new ASTRewriteRemoveImportsCorrectionProposal(CorrectionMessages.QuickAssistProcessor_convert_to_static_import_replace_all, CodeActionKind.Refactor, context.getCompilationUnit(), astRewriteReplaceAllOccurrences, IProposalRelevance.ADD_STATIC_IMPORT);
        proposalReplaceAllOccurrences.setImportRewrite(importRewrite);
        proposalReplaceAllOccurrences.setImportRemover(removerAllOccurences);
        proposals.add(proposalReplaceAllOccurrences);
    } catch (IllegalArgumentException e) {
        // Wrong use of ASTRewrite or ImportRewrite API, see bug 541586
        JavaLanguageServerPlugin.logException("Failed to get static import proposal", e);
        return false;
    } catch (JavaModelException e) {
        return false;
    }
    return true;
}
Also used : ICompilationUnit(org.eclipse.jdt.core.ICompilationUnit) Dimension(org.eclipse.jdt.core.dom.Dimension) RefactoringAvailabilityTesterCore(org.eclipse.jdt.internal.corext.refactoring.RefactoringAvailabilityTesterCore) Arrays(java.util.Arrays) CleanUpRequirementsCore(org.eclipse.jdt.core.manipulation.CleanUpRequirementsCore) CompilationUnit(org.eclipse.jdt.core.dom.CompilationUnit) IMethodBinding(org.eclipse.jdt.core.dom.IMethodBinding) AbstractTypeDeclaration(org.eclipse.jdt.core.dom.AbstractTypeDeclaration) StructuralPropertyDescriptor(org.eclipse.jdt.core.dom.StructuralPropertyDescriptor) CreateChangeOperation(org.eclipse.ltk.core.refactoring.CreateChangeOperation) ArrayInitializer(org.eclipse.jdt.core.dom.ArrayInitializer) CoreException(org.eclipse.core.runtime.CoreException) MultiFixMessages(org.eclipse.jdt.internal.ui.fix.MultiFixMessages) InlineConstantRefactoring(org.eclipse.jdt.internal.corext.refactoring.code.InlineConstantRefactoring) StubUtility(org.eclipse.jdt.internal.core.manipulation.StubUtility) ASTVisitor(org.eclipse.jdt.core.dom.ASTVisitor) AnonymousClassDeclaration(org.eclipse.jdt.core.dom.AnonymousClassDeclaration) InlineTempRefactoring(org.eclipse.jdt.internal.corext.refactoring.code.InlineTempRefactoring) Expression(org.eclipse.jdt.core.dom.Expression) TypeChangeCorrectionProposal(org.eclipse.jdt.ls.core.internal.corrections.proposals.TypeChangeCorrectionProposal) Map(java.util.Map) SimpleName(org.eclipse.jdt.core.dom.SimpleName) Bindings(org.eclipse.jdt.internal.corext.dom.Bindings) RefactoringCorrectionProposal(org.eclipse.jdt.ls.core.internal.corrections.proposals.RefactoringCorrectionProposal) ASTNodes(org.eclipse.jdt.internal.corext.dom.ASTNodes) ASTNode(org.eclipse.jdt.core.dom.ASTNode) IProposalRelevance(org.eclipse.jdt.ls.core.internal.corrections.proposals.IProposalRelevance) ConvertLoopFixCore(org.eclipse.jdt.internal.corext.fix.ConvertLoopFixCore) IJavaProject(org.eclipse.jdt.core.IJavaProject) ASTRewriteRemoveImportsCorrectionProposal(org.eclipse.jdt.ls.core.internal.corrections.proposals.ASTRewriteRemoveImportsCorrectionProposal) Messages(org.eclipse.jdt.internal.corext.util.Messages) ImportRewrite(org.eclipse.jdt.core.dom.rewrite.ImportRewrite) Collection(java.util.Collection) QualifiedName(org.eclipse.jdt.core.dom.QualifiedName) FixCorrectionProposal(org.eclipse.jdt.ls.core.internal.corrections.proposals.FixCorrectionProposal) IBinding(org.eclipse.jdt.core.dom.IBinding) VariableDeclaration(org.eclipse.jdt.core.dom.VariableDeclaration) JavaModelUtil(org.eclipse.jdt.internal.corext.util.JavaModelUtil) AbstractCleanUpCore(org.eclipse.jdt.internal.ui.fix.AbstractCleanUpCore) IJavaModelMarker(org.eclipse.jdt.core.IJavaModelMarker) IType(org.eclipse.jdt.core.IType) VariableDeclarationExpression(org.eclipse.jdt.core.dom.VariableDeclarationExpression) CleanUpOptionsCore(org.eclipse.jdt.core.manipulation.CleanUpOptionsCore) IProposableFix(org.eclipse.jdt.internal.corext.fix.IProposableFix) IProblemLocationCore(org.eclipse.jdt.internal.ui.text.correction.IProblemLocationCore) List(java.util.List) ASTRewrite(org.eclipse.jdt.core.dom.rewrite.ASTRewrite) EnhancedForStatement(org.eclipse.jdt.core.dom.EnhancedForStatement) CleanUpConstants(org.eclipse.jdt.internal.corext.fix.CleanUpConstants) ImportRemover(org.eclipse.jdt.internal.corext.refactoring.structure.ImportRemover) MethodDeclaration(org.eclipse.jdt.core.dom.MethodDeclaration) ICleanUpFixCore(org.eclipse.jdt.core.manipulation.ICleanUpFixCore) RefactoringCorrectionCommandProposal(org.eclipse.jdt.ls.core.internal.text.correction.RefactoringCorrectionCommandProposal) IField(org.eclipse.jdt.core.IField) LinkedProposalModelCore(org.eclipse.jdt.internal.corext.fix.LinkedProposalModelCore) JavaModelException(org.eclipse.jdt.core.JavaModelException) ConvertAnonymousToNestedRefactoring(org.eclipse.jdt.internal.corext.refactoring.code.ConvertAnonymousToNestedRefactoring) MethodReference(org.eclipse.jdt.core.dom.MethodReference) HashMap(java.util.HashMap) CheckConditionsOperation(org.eclipse.ltk.core.refactoring.CheckConditionsOperation) InlineMethodRefactoring(org.eclipse.jdt.internal.corext.refactoring.code.InlineMethodRefactoring) ArrayList(java.util.ArrayList) Type(org.eclipse.jdt.core.dom.Type) RefactorProposalUtility(org.eclipse.jdt.ls.core.internal.text.correction.RefactorProposalUtility) CodeActionParams(org.eclipse.lsp4j.CodeActionParams) ImportDeclaration(org.eclipse.jdt.core.dom.ImportDeclaration) RefactoringStatus(org.eclipse.ltk.core.refactoring.RefactoringStatus) IVariableBinding(org.eclipse.jdt.core.dom.IVariableBinding) MethodInvocation(org.eclipse.jdt.core.dom.MethodInvocation) Name(org.eclipse.jdt.core.dom.Name) LambdaExpressionsCleanUpCore(org.eclipse.jdt.internal.ui.fix.LambdaExpressionsCleanUpCore) ChangeCorrectionProposal(org.eclipse.jdt.ls.core.internal.corrections.proposals.ChangeCorrectionProposal) ASTNodeFactory(org.eclipse.jdt.internal.corext.dom.ASTNodeFactory) Modifier(org.eclipse.jdt.core.dom.Modifier) JavaCore(org.eclipse.jdt.core.JavaCore) ILocalVariable(org.eclipse.jdt.core.ILocalVariable) ForStatement(org.eclipse.jdt.core.dom.ForStatement) JavaLanguageServerPlugin(org.eclipse.jdt.ls.core.internal.JavaLanguageServerPlugin) ITypeBinding(org.eclipse.jdt.core.dom.ITypeBinding) PreferenceManager(org.eclipse.jdt.ls.core.internal.preferences.PreferenceManager) CleanUpContextCore(org.eclipse.jdt.core.manipulation.CleanUpContextCore) ActionMessages(org.eclipse.jdt.ls.core.internal.text.correction.ActionMessages) SingleVariableDeclaration(org.eclipse.jdt.core.dom.SingleVariableDeclaration) CUCorrectionProposal(org.eclipse.jdt.ls.core.internal.corrections.proposals.CUCorrectionProposal) IJavaElement(org.eclipse.jdt.core.IJavaElement) ClassInstanceCreation(org.eclipse.jdt.core.dom.ClassInstanceCreation) NullProgressMonitor(org.eclipse.core.runtime.NullProgressMonitor) ICleanUpCore(org.eclipse.jdt.internal.corext.fix.ICleanUpCore) LambdaExpression(org.eclipse.jdt.core.dom.LambdaExpression) IMethod(org.eclipse.jdt.core.IMethod) LambdaExpressionsFixCore(org.eclipse.jdt.internal.corext.fix.LambdaExpressionsFixCore) CodeActionKind(org.eclipse.lsp4j.CodeActionKind) VariableDeclarationFragment(org.eclipse.jdt.core.dom.VariableDeclarationFragment) Collections(java.util.Collections) VariableDeclarationStatement(org.eclipse.jdt.core.dom.VariableDeclarationStatement) JavaModelException(org.eclipse.jdt.core.JavaModelException) ImportRewrite(org.eclipse.jdt.core.dom.rewrite.ImportRewrite) SimpleName(org.eclipse.jdt.core.dom.SimpleName) IBinding(org.eclipse.jdt.core.dom.IBinding) QualifiedName(org.eclipse.jdt.core.dom.QualifiedName) MethodInvocation(org.eclipse.jdt.core.dom.MethodInvocation) IVariableBinding(org.eclipse.jdt.core.dom.IVariableBinding) ASTVisitor(org.eclipse.jdt.core.dom.ASTVisitor) SimpleName(org.eclipse.jdt.core.dom.SimpleName) QualifiedName(org.eclipse.jdt.core.dom.QualifiedName) Name(org.eclipse.jdt.core.dom.Name) IType(org.eclipse.jdt.core.IType) Type(org.eclipse.jdt.core.dom.Type) Expression(org.eclipse.jdt.core.dom.Expression) VariableDeclarationExpression(org.eclipse.jdt.core.dom.VariableDeclarationExpression) LambdaExpression(org.eclipse.jdt.core.dom.LambdaExpression) ITypeBinding(org.eclipse.jdt.core.dom.ITypeBinding) ImportDeclaration(org.eclipse.jdt.core.dom.ImportDeclaration) ASTRewrite(org.eclipse.jdt.core.dom.rewrite.ASTRewrite) ASTRewriteRemoveImportsCorrectionProposal(org.eclipse.jdt.ls.core.internal.corrections.proposals.ASTRewriteRemoveImportsCorrectionProposal) ImportRemover(org.eclipse.jdt.internal.corext.refactoring.structure.ImportRemover)

Example 5 with ChangeCorrectionProposal

use of org.eclipse.jdt.ls.core.internal.corrections.proposals.ChangeCorrectionProposal in project eclipse.jdt.ls by eclipse.

the class QuickFixProcessor method getCorrections.

public List<ChangeCorrectionProposal> getCorrections(IInvocationContext context, IProblemLocationCore[] locations) throws CoreException {
    if (locations == null || locations.length == 0) {
        return Collections.emptyList();
    }
    ArrayList<ChangeCorrectionProposal> resultingCollections = new ArrayList<>();
    Set<Integer> handledProblems = new HashSet<>(locations.length);
    for (int i = 0; i < locations.length; i++) {
        IProblemLocationCore curr = locations[i];
        if (handledProblems(curr, locations, handledProblems)) {
            process(context, curr, resultingCollections);
        }
    }
    return resultingCollections;
}
Also used : IProblemLocationCore(org.eclipse.jdt.internal.ui.text.correction.IProblemLocationCore) ArrayList(java.util.ArrayList) ChangeCorrectionProposal(org.eclipse.jdt.ls.core.internal.corrections.proposals.ChangeCorrectionProposal) HashSet(java.util.HashSet)

Aggregations

ChangeCorrectionProposal (org.eclipse.jdt.ls.core.internal.corrections.proposals.ChangeCorrectionProposal)9 ArrayList (java.util.ArrayList)5 CoreException (org.eclipse.core.runtime.CoreException)5 ASTNode (org.eclipse.jdt.core.dom.ASTNode)4 NullProgressMonitor (org.eclipse.core.runtime.NullProgressMonitor)3 IProblemLocationCore (org.eclipse.jdt.internal.ui.text.correction.IProblemLocationCore)3 TypeChangeCorrectionProposal (org.eclipse.jdt.ls.core.internal.corrections.proposals.TypeChangeCorrectionProposal)3 Arrays (java.util.Arrays)2 Collections (java.util.Collections)2 HashMap (java.util.HashMap)2 List (java.util.List)2 Map (java.util.Map)2 ICompilationUnit (org.eclipse.jdt.core.ICompilationUnit)2 IJavaModelMarker (org.eclipse.jdt.core.IJavaModelMarker)2 ILocalVariable (org.eclipse.jdt.core.ILocalVariable)2 IMethod (org.eclipse.jdt.core.IMethod)2 JavaCore (org.eclipse.jdt.core.JavaCore)2 JavaModelException (org.eclipse.jdt.core.JavaModelException)2 IBinding (org.eclipse.jdt.core.dom.IBinding)2 IMethodBinding (org.eclipse.jdt.core.dom.IMethodBinding)2