use of org.eclipse.jdt.internal.ui.text.correction.IProblemLocationCore 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;
}
use of org.eclipse.jdt.internal.ui.text.correction.IProblemLocationCore in project eclipse.jdt.ls by eclipse.
the class QuickAssistProcessor method getTryWithResourceProposals.
public static boolean getTryWithResourceProposals(IProblemLocationCore[] locations, IInvocationContext context, ASTNode node, Collection<ChangeCorrectionProposal> resultingCollections) throws IllegalArgumentException, CoreException {
final List<Integer> exceptionProblems = Arrays.asList(IProblem.UnclosedCloseable, IProblem.UnclosedCloseable, IProblem.PotentiallyUnclosedCloseable, IProblem.UnhandledException);
for (IProblemLocationCore location : locations) {
if (exceptionProblems.contains(location.getProblemId())) {
return false;
}
}
ArrayList<ASTNode> coveredNodes = QuickAssistProcessor.getFullyCoveredNodes(context, context.getCoveringNode());
return getTryWithResourceProposals(context, node, coveredNodes, resultingCollections);
}
use of org.eclipse.jdt.internal.ui.text.correction.IProblemLocationCore in project eclipse.jdt.ls by eclipse.
the class NonProjectFixProcessor method getCorrections.
public List<Either<Command, CodeAction>> getCorrections(CodeActionParams params, IInvocationContext context, IProblemLocationCore[] locations) {
if (locations == null || locations.length == 0) {
return Collections.emptyList();
}
List<Either<Command, CodeAction>> $ = new ArrayList<>();
String uri = JDTUtils.toURI(context.getCompilationUnit());
for (int i = 0; i < locations.length; i++) {
IProblemLocationCore curr = locations[i];
Integer id = Integer.valueOf(curr.getProblemId());
if (id == DiagnosticsHandler.NON_PROJECT_JAVA_FILE || id == DiagnosticsHandler.NOT_ON_CLASSPATH) {
if (this.nonProjectDiagnosticsState.isOnlySyntaxReported(uri)) {
$.add(getDiagnosticsFixes(ActionMessages.ReportAllErrorsForThisFile, uri, "thisFile", false));
$.add(getDiagnosticsFixes(ActionMessages.ReportAllErrorsForAnyNonProjectFile, uri, "anyNonProjectFile", false));
} else {
$.add(getDiagnosticsFixes(ActionMessages.ReportSyntaxErrorsForThisFile, uri, "thisFile", true));
$.add(getDiagnosticsFixes(ActionMessages.ReportSyntaxErrorsForAnyNonProjectFile, uri, "anyNonProjectFile", true));
}
}
}
return $;
}
use of org.eclipse.jdt.internal.ui.text.correction.IProblemLocationCore in project eclipse.jdt.ls by eclipse.
the class SourceAssistProcessor method getSourceActionCommands.
public List<Either<Command, CodeAction>> getSourceActionCommands(CodeActionParams params, IInvocationContext context, IProblemLocationCore[] locations, IProgressMonitor monitor) {
List<Either<Command, CodeAction>> $ = new ArrayList<>();
ICompilationUnit cu = context.getCompilationUnit();
IType type = getSelectionType(context);
boolean isInTypeDeclaration = isInTypeDeclaration(context);
boolean isInImportDeclaration = isInImportDeclaration(context);
try {
// Generate Constructor QuickAssist
IJavaElement element = JDTUtils.findElementAtSelection(cu, params.getRange().getEnd().getLine(), params.getRange().getEnd().getCharacter(), this.preferenceManager, new NullProgressMonitor());
if (element instanceof IField || isInTypeDeclaration) {
Optional<Either<Command, CodeAction>> quickAssistGenerateConstructors = getGenerateConstructorsAction(params, context, type, JavaCodeActionKind.QUICK_ASSIST, monitor);
addSourceActionCommand($, params.getContext(), quickAssistGenerateConstructors);
}
} catch (JavaModelException e) {
JavaLanguageServerPlugin.logException(e);
}
// Generate Constructor Source Action
Optional<Either<Command, CodeAction>> sourceGenerateConstructors = getGenerateConstructorsAction(params, context, type, JavaCodeActionKind.SOURCE_GENERATE_CONSTRUCTORS, monitor);
addSourceActionCommand($, params.getContext(), sourceGenerateConstructors);
// Organize Imports
if (preferenceManager.getClientPreferences().isAdvancedOrganizeImportsSupported()) {
// Generate QuickAssist
if (isInImportDeclaration) {
Optional<Either<Command, CodeAction>> quickAssistOrganizeImports = getOrganizeImportsAction(params, JavaCodeActionKind.QUICK_ASSIST);
addSourceActionCommand($, params.getContext(), quickAssistOrganizeImports);
}
// Generate Source Action
Optional<Either<Command, CodeAction>> sourceOrganizeImports = getOrganizeImportsAction(params, CodeActionKind.SourceOrganizeImports);
addSourceActionCommand($, params.getContext(), sourceOrganizeImports);
} else {
CodeActionProposal organizeImportsProposal = (pm) -> {
TextEdit edit = getOrganizeImportsProposal(context, pm);
return convertToWorkspaceEdit(cu, edit);
};
// Generate QuickAssist
if (isInImportDeclaration) {
Optional<Either<Command, CodeAction>> sourceOrganizeImports = getCodeActionFromProposal(params.getContext(), context.getCompilationUnit(), CorrectionMessages.ReorgCorrectionsSubProcessor_organizeimports_description, JavaCodeActionKind.QUICK_ASSIST, organizeImportsProposal);
addSourceActionCommand($, params.getContext(), sourceOrganizeImports);
}
// Generate Source Action
Optional<Either<Command, CodeAction>> sourceOrganizeImports = getCodeActionFromProposal(params.getContext(), context.getCompilationUnit(), CorrectionMessages.ReorgCorrectionsSubProcessor_organizeimports_description, CodeActionKind.SourceOrganizeImports, organizeImportsProposal);
addSourceActionCommand($, params.getContext(), sourceOrganizeImports);
}
if (!UNSUPPORTED_RESOURCES.contains(cu.getResource().getName())) {
// Override/Implement Methods QuickAssist
if (isInTypeDeclaration) {
Optional<Either<Command, CodeAction>> quickAssistOverrideMethods = getOverrideMethodsAction(params, JavaCodeActionKind.QUICK_ASSIST);
addSourceActionCommand($, params.getContext(), quickAssistOverrideMethods);
}
// Override/Implement Methods Source Action
Optional<Either<Command, CodeAction>> sourceOverrideMethods = getOverrideMethodsAction(params, JavaCodeActionKind.SOURCE_OVERRIDE_METHODS);
addSourceActionCommand($, params.getContext(), sourceOverrideMethods);
}
// Generate Getter and Setter QuickAssist
if (isInTypeDeclaration) {
Optional<Either<Command, CodeAction>> quickAssistGetterSetter = getGetterSetterAction(params, context, type, JavaCodeActionKind.QUICK_ASSIST, isInTypeDeclaration);
addSourceActionCommand($, params.getContext(), quickAssistGetterSetter);
}
// Generate Getter and Setter Source Action
Optional<Either<Command, CodeAction>> sourceGetterSetter = getGetterSetterAction(params, context, type, JavaCodeActionKind.SOURCE_GENERATE_ACCESSORS, isInTypeDeclaration);
addSourceActionCommand($, params.getContext(), sourceGetterSetter);
// Generate hashCode() and equals()
if (supportsHashCodeEquals(context, type, monitor)) {
// Generate QuickAssist
if (isInTypeDeclaration) {
Optional<Either<Command, CodeAction>> quickAssistHashCodeEquals = getHashCodeEqualsAction(params, JavaCodeActionKind.QUICK_ASSIST);
addSourceActionCommand($, params.getContext(), quickAssistHashCodeEquals);
}
// Generate Source Action
Optional<Either<Command, CodeAction>> sourceActionHashCodeEquals = getHashCodeEqualsAction(params, JavaCodeActionKind.SOURCE_GENERATE_HASHCODE_EQUALS);
addSourceActionCommand($, params.getContext(), sourceActionHashCodeEquals);
}
// Generate toString()
if (supportsGenerateToString(type)) {
boolean nonStaticFields = true;
try {
nonStaticFields = hasFields(type, false);
} catch (JavaModelException e) {
// do nothing.
}
if (nonStaticFields) {
// Generate QuickAssist
if (isInTypeDeclaration) {
Optional<Either<Command, CodeAction>> generateToStringQuickAssist = getGenerateToStringAction(params, JavaCodeActionKind.QUICK_ASSIST);
addSourceActionCommand($, params.getContext(), generateToStringQuickAssist);
}
// Generate Source Action
Optional<Either<Command, CodeAction>> generateToStringCommand = getGenerateToStringAction(params, JavaCodeActionKind.SOURCE_GENERATE_TO_STRING);
addSourceActionCommand($, params.getContext(), generateToStringCommand);
} else {
CodeActionProposal generateToStringProposal = (pm) -> {
IJavaElement insertPosition = isInTypeDeclaration ? CodeGenerationUtils.findInsertElement(type, null) : CodeGenerationUtils.findInsertElement(type, context.getSelectionOffset());
TextEdit edit = GenerateToStringHandler.generateToString(type, new LspVariableBinding[0], insertPosition, pm);
return convertToWorkspaceEdit(cu, edit);
};
// Generate QuickAssist
if (isInTypeDeclaration) {
Optional<Either<Command, CodeAction>> generateToStringQuickAssist = getCodeActionFromProposal(params.getContext(), context.getCompilationUnit(), ActionMessages.GenerateToStringAction_label, JavaCodeActionKind.QUICK_ASSIST, generateToStringProposal);
addSourceActionCommand($, params.getContext(), generateToStringQuickAssist);
}
// Generate Source Action
Optional<Either<Command, CodeAction>> generateToStringCommand = getCodeActionFromProposal(params.getContext(), context.getCompilationUnit(), ActionMessages.GenerateToStringAction_label, JavaCodeActionKind.SOURCE_GENERATE_TO_STRING, generateToStringProposal);
addSourceActionCommand($, params.getContext(), generateToStringCommand);
}
}
// Generate Delegate Methods
Optional<Either<Command, CodeAction>> generateDelegateMethods = getGenerateDelegateMethodsAction(params, context, type);
addSourceActionCommand($, params.getContext(), generateDelegateMethods);
// Add final modifiers where possible
Optional<Either<Command, CodeAction>> generateFinalModifiers = addFinalModifierWherePossibleAction(context);
addSourceActionCommand($, params.getContext(), generateFinalModifiers);
return $;
}
use of org.eclipse.jdt.internal.ui.text.correction.IProblemLocationCore in project eclipse.jdt.ls by eclipse.
the class GetRefactorEditHandler method getEditsForRefactor.
public static RefactorWorkspaceEdit getEditsForRefactor(GetRefactorEditParams params) {
final ICompilationUnit unit = JDTUtils.resolveCompilationUnit(params.context.getTextDocument().getUri());
if (unit == null) {
return null;
}
int start = DiagnosticsHelper.getStartOffset(unit, params.context.getRange());
int end = DiagnosticsHelper.getEndOffset(unit, params.context.getRange());
InnovationContext context = new InnovationContext(unit, start, end - start);
context.setASTRoot(CodeActionHandler.getASTRoot(unit));
IProblemLocationCore[] locations = CodeActionHandler.getProblemLocationCores(unit, params.context.getContext().getDiagnostics());
boolean problemsAtLocation = locations.length != 0;
String positionKey = DEFAULT_POSITION_KEY;
try {
Map formatterOptions = params.options == null ? null : FormatterHandler.getOptions(params.options, unit);
LinkedCorrectionProposal proposal = null;
if (RefactorProposalUtility.EXTRACT_VARIABLE_COMMAND.equals(params.command) || RefactorProposalUtility.EXTRACT_VARIABLE_ALL_OCCURRENCE_COMMAND.equals(params.command) || RefactorProposalUtility.EXTRACT_CONSTANT_COMMAND.equals(params.command)) {
SelectionInfo info = (params.commandArguments != null && !params.commandArguments.isEmpty()) ? JSONUtility.toModel(params.commandArguments.get(0), SelectionInfo.class) : null;
if (info != null) {
context = new InnovationContext(unit, info.offset, info.length);
}
proposal = (LinkedCorrectionProposal) getExtractVariableProposal(params.context, context, problemsAtLocation, params.command, formatterOptions);
} else if (RefactorProposalUtility.ASSIGN_VARIABLE_COMMAND.equals(params.command)) {
proposal = (LinkedCorrectionProposal) getAssignVariableProposal(params, context, problemsAtLocation, params.command, formatterOptions, locations);
} else if (RefactorProposalUtility.ASSIGN_FIELD_COMMAND.equals(params.command)) {
proposal = (LinkedCorrectionProposal) RefactorProposalUtility.getAssignFieldProposal(params.context, context, problemsAtLocation, formatterOptions, false, locations);
} else if (RefactorProposalUtility.EXTRACT_METHOD_COMMAND.equals(params.command)) {
SelectionInfo info = (params.commandArguments != null && !params.commandArguments.isEmpty()) ? JSONUtility.toModel(params.commandArguments.get(0), SelectionInfo.class) : null;
if (info != null) {
context = new InnovationContext(unit, info.offset, info.length);
}
proposal = (LinkedCorrectionProposal) getExtractMethodProposal(params.context, context, context.getCoveringNode(), problemsAtLocation, formatterOptions);
} else if (RefactorProposalUtility.CONVERT_VARIABLE_TO_FIELD_COMMAND.equals(params.command)) {
String initializeIn = (params.commandArguments != null && !params.commandArguments.isEmpty()) ? JSONUtility.toModel(params.commandArguments.get(0), String.class) : null;
proposal = (LinkedCorrectionProposal) RefactorProposalUtility.getConvertVariableToFieldProposal(params.context, context, problemsAtLocation, formatterOptions, initializeIn, false);
} else if (RefactorProposalUtility.EXTRACT_FIELD_COMMAND.equals(params.command)) {
String initializeIn = (params.commandArguments != null && !params.commandArguments.isEmpty()) ? JSONUtility.toModel(params.commandArguments.get(0), String.class) : null;
SelectionInfo info = (params.commandArguments != null && params.commandArguments.size() > 1) ? JSONUtility.toModel(params.commandArguments.get(1), SelectionInfo.class) : null;
if (info != null) {
context = new InnovationContext(unit, info.offset, info.length);
}
proposal = (LinkedCorrectionProposal) RefactorProposalUtility.getExtractFieldProposal(params.context, context, problemsAtLocation, formatterOptions, initializeIn, false);
} else if (InvertBooleanUtility.INVERT_VARIABLE_COMMAND.equals(params.command)) {
proposal = (LinkedCorrectionProposal) InvertBooleanUtility.getInvertVariableProposal(params.context, context, context.getCoveringNode(), false);
} else if (RefactorProcessor.CONVERT_ANONYMOUS_CLASS_TO_NESTED_COMMAND.equals(params.command)) {
proposal = RefactorProcessor.getConvertAnonymousToNestedProposal(params.context, context, context.getCoveringNode(), false);
positionKey = "type_name";
} else if (RefactorProposalUtility.INTRODUCE_PARAMETER_COMMAND.equals(params.command)) {
// String initializeIn = (params.commandArguments != null && !params.commandArguments.isEmpty()) ? JSONUtility.toModel(params.commandArguments.get(0), String.class) : null;
proposal = (LinkedCorrectionProposal) RefactorProposalUtility.getIntroduceParameterRefactoringProposals(params.context, context, context.getCoveringNode(), false, locations);
positionKey = null;
if (proposal instanceof RefactoringCorrectionProposal) {
RefactoringCorrectionProposal rcp = (RefactoringCorrectionProposal) proposal;
IntroduceParameterRefactoring refactoring = (IntroduceParameterRefactoring) rcp.getRefactoring();
ParameterInfo parameterInfo = refactoring.getAddedParameterInfo();
if (parameterInfo != null) {
positionKey = parameterInfo.getNewName();
}
}
}
if (proposal == null) {
return null;
}
Change change = proposal.getChange();
WorkspaceEdit edit = ChangeUtil.convertToWorkspaceEdit(change);
LinkedProposalModelCore linkedProposalModel = proposal.getLinkedProposalModel();
Command additionalCommand = null;
if (linkedProposalModel != null) {
LinkedProposalPositionGroupCore linkedPositionGroup = linkedProposalModel.getPositionGroup(positionKey, false);
if (linkedPositionGroup == null) {
Iterator<LinkedProposalPositionGroupCore> iter = linkedProposalModel.getPositionGroupCoreIterator();
while (iter.hasNext()) {
LinkedProposalPositionGroupCore lppgc = iter.next();
if (lppgc.getGroupId().startsWith(positionKey)) {
linkedPositionGroup = lppgc;
break;
}
}
}
PositionInformation highlightPosition = getFirstTrackedNodePositionBySequenceRank(linkedPositionGroup);
if (highlightPosition != null) {
int offset = highlightPosition.getOffset();
int length = highlightPosition.getLength();
RenamePosition renamePosition = new RenamePosition(JDTUtils.toURI(unit), offset, length);
additionalCommand = new Command("Rename", RENAME_COMMAND, Arrays.asList(renamePosition));
}
}
return new RefactorWorkspaceEdit(edit, additionalCommand);
} catch (CoreException e) {
// do nothing.
}
return null;
}
Aggregations