Skip to content

Commit 83d814d

Browse files
committed
support rename references
Signed-off-by: Shi Chen <chenshi@microsoft.com>
1 parent 0e79bc4 commit 83d814d

11 files changed

Lines changed: 214 additions & 9 deletions

File tree

org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/ResourceUtils.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -383,4 +383,17 @@ public static IMarker createWarningMarker(String type, IResource resource, Strin
383383
marker.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_WARNING);
384384
return marker;
385385
}
386+
387+
/**
388+
* Creates a simple info marker with the given type, id and status message to the given resource.
389+
*/
390+
public static IMarker createInfoMarker(String type, IResource resource, String message, int id, int start, int end) throws CoreException {
391+
IMarker marker = resource.createMarker(type);
392+
marker.setAttribute(IJavaModelMarker.ID, id);
393+
marker.setAttribute(IMarker.MESSAGE, message);
394+
marker.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_INFO);
395+
marker.setAttribute(IMarker.CHAR_START, start);
396+
marker.setAttribute(IMarker.CHAR_END, end);
397+
return marker;
398+
}
386399
}

org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/corrections/CorrectionMessages.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ private CorrectionMessages() {
127127
public static String LocalCorrectionsSubProcessor_hiding_field_label;
128128
public static String LocalCorrectionsSubProcessor_rename_var_label;
129129
public static String LocalCorrectionsSubProcessor_hiding_argument_label;
130+
public static String LocalCorrectionsSubProcessor_manual_rename_label;
130131
public static String LocalCorrectionsSubProcessor_setparenteses_description;
131132
public static String LocalCorrectionsSubProcessor_setparenteses_instanceof_description;
132133
public static String LocalCorrectionsSubProcessor_InferGenericTypeArguments;

org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/corrections/CorrectionMessages.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ LocalCorrectionsSubProcessor_hiding_local_label=Rename local variable ''{0}''
115115
LocalCorrectionsSubProcessor_hiding_field_label=Rename field ''{0}''
116116
LocalCorrectionsSubProcessor_rename_var_label=Rename ''{0}''
117117
LocalCorrectionsSubProcessor_hiding_argument_label=Rename argument ''{0}''
118+
LocalCorrectionsSubProcessor_manual_rename_label=Rename usages of ''{0}'' to ''{1}''
118119
LocalCorrectionsSubProcessor_setparenteses_description=Put ''{0}'' expression in parentheses
119120
LocalCorrectionsSubProcessor_InferGenericTypeArguments=Infer Generic Type Arguments...
120121
LocalCorrectionsSubProcessor_InferGenericTypeArguments_description=Start the 'Infer Generic Type Arguments' refactoring

org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/corrections/QuickFixProcessor.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@
5151
import org.eclipse.jdt.ls.core.internal.corrections.proposals.ReplaceCorrectionProposal;
5252
import org.eclipse.jdt.ls.core.internal.corrections.proposals.TypeMismatchSubProcessor;
5353
import org.eclipse.jdt.ls.core.internal.corrections.proposals.UnresolvedElementsSubProcessor;
54+
import org.eclipse.jdt.ls.core.internal.handlers.BaseDocumentLifeCycleHandler;
55+
import org.eclipse.jdt.ls.core.internal.handlers.DocumentLifeCycleHandler;
5456
import org.eclipse.jdt.ls.core.internal.handlers.OrganizeImportsHandler;
5557
import org.eclipse.jdt.ls.core.internal.text.correction.ModifierCorrectionSubProcessor;
5658
import org.eclipse.lsp4j.CodeActionKind;
@@ -75,7 +77,7 @@ private static int moveBack(int offset, int start, String ignoreCharacters, ICom
7577
return start;
7678
}
7779

78-
public List<ChangeCorrectionProposal> getCorrections(CodeActionParams params, IInvocationContext context, IProblemLocationCore[] locations) throws CoreException {
80+
public List<ChangeCorrectionProposal> getCorrections(CodeActionParams params, IInvocationContext context, IProblemLocationCore[] locations, DocumentLifeCycleHandler documentLifeCycleHandler) throws CoreException {
7981
if (locations == null || locations.length == 0) {
8082
return Collections.emptyList();
8183
}
@@ -84,7 +86,7 @@ public List<ChangeCorrectionProposal> getCorrections(CodeActionParams params, II
8486
for (int i = 0; i < locations.length; i++) {
8587
IProblemLocationCore curr = locations[i];
8688
if (handledProblems(curr, locations, handledProblems)) {
87-
process(params, context, curr, resultingCollections);
89+
process(params, context, curr, resultingCollections, documentLifeCycleHandler);
8890
}
8991
}
9092
return resultingCollections;
@@ -107,7 +109,7 @@ private static boolean handledProblems(IProblemLocationCore location, IProblemLo
107109
return handledProblems.add(problemId);
108110
}
109111

110-
private void process(CodeActionParams params, IInvocationContext context, IProblemLocationCore problem, Collection<ChangeCorrectionProposal> proposals) throws CoreException {
112+
private void process(CodeActionParams params, IInvocationContext context, IProblemLocationCore problem, Collection<ChangeCorrectionProposal> proposals, DocumentLifeCycleHandler documentLifeCycleHandler) throws CoreException {
111113
int id = problem.getProblemId();
112114
if (id == 0) { // no proposals for none-problem locations
113115
return;
@@ -668,7 +670,9 @@ private void process(CodeActionParams params, IInvocationContext context, IProbl
668670
// TypeAnnotationSubProcessor.addMoveTypeAnnotationToTypeProposal(context,
669671
// problem, proposals);
670672
// break;
671-
673+
case BaseDocumentLifeCycleHandler.RENAME_REFERENCE_PROBLEM_ID:
674+
LocalCorrectionsSubProcessor.getManualRenameCorrectionProposals(context, problem, proposals, documentLifeCycleHandler);
675+
break;
672676
default:
673677
String str = problem.toString();
674678
System.out.println(str);

org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/corrections/proposals/LocalCorrectionsSubProcessor.java

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,16 @@
2121
package org.eclipse.jdt.ls.core.internal.corrections.proposals;
2222

2323
import java.util.ArrayList;
24+
import java.util.Arrays;
2425
import java.util.Collection;
2526
import java.util.HashMap;
2627
import java.util.Hashtable;
2728
import java.util.List;
2829
import java.util.Map;
30+
import java.util.Objects;
2931

32+
import org.eclipse.core.resources.IMarker;
33+
import org.eclipse.core.resources.IResource;
3034
import org.eclipse.core.runtime.CoreException;
3135
import org.eclipse.jdt.core.ICompilationUnit;
3236
import org.eclipse.jdt.core.IType;
@@ -101,7 +105,9 @@
101105
import org.eclipse.jdt.internal.ui.fix.UnnecessaryCodeCleanUpCore;
102106
import org.eclipse.jdt.internal.ui.text.correction.IProblemLocationCore;
103107
import org.eclipse.jdt.internal.ui.util.ASTHelper;
108+
import org.eclipse.jdt.ls.core.internal.JDTUtils;
104109
import org.eclipse.jdt.ls.core.internal.JavaLanguageServerPlugin;
110+
import org.eclipse.jdt.ls.core.internal.Messages;
105111
import org.eclipse.jdt.ls.core.internal.corext.refactoring.surround.ExceptionAnalyzer;
106112
import org.eclipse.jdt.ls.core.internal.corext.refactoring.surround.SurroundWithTryCatchRefactoring;
107113
import org.eclipse.jdt.ls.core.internal.corrections.CorrectionMessages;
@@ -111,13 +117,18 @@
111117
import org.eclipse.jdt.ls.core.internal.corrections.proposals.ChangeMethodSignatureProposal.ChangeDescription;
112118
import org.eclipse.jdt.ls.core.internal.corrections.proposals.ChangeMethodSignatureProposal.InsertDescription;
113119
import org.eclipse.jdt.ls.core.internal.corrections.proposals.ChangeMethodSignatureProposal.RemoveDescription;
120+
import org.eclipse.jdt.ls.core.internal.handlers.BaseDocumentLifeCycleHandler;
121+
import org.eclipse.jdt.ls.core.internal.handlers.DocumentLifeCycleHandler;
122+
import org.eclipse.jdt.ls.core.internal.text.correction.CUCorrectionCommandProposal;
114123
import org.eclipse.jdt.ls.core.internal.text.correction.ModifierCorrectionSubProcessor;
115124
import org.eclipse.jdt.ls.core.internal.text.correction.QuickAssistProcessor;
116125
import org.eclipse.lsp4j.CodeActionKind;
126+
import org.eclipse.lsp4j.Range;
117127

118128
public class LocalCorrectionsSubProcessor {
119129

120130
private static final String ADD_STATIC_ACCESS_ID = "org.eclipse.jdt.ui.correction.changeToStatic"; //$NON-NLS-1$
131+
private static final String RENAME_REFERENCES_COMMAND = "java.action.renameReferences";
121132

122133
public static void addUncaughtExceptionProposals(IInvocationContext context, IProblemLocationCore problem, Collection<ChangeCorrectionProposal> proposals) throws CoreException {
123134
ICompilationUnit cu = context.getCompilationUnit();
@@ -1109,4 +1120,33 @@ public static void addValueForAnnotationProposals(IInvocationContext context, IP
11091120
}
11101121
}
11111122

1123+
public static void getManualRenameCorrectionProposals(IInvocationContext context, IProblemLocationCore problem, Collection<ChangeCorrectionProposal> proposals, DocumentLifeCycleHandler documentLifeCycleHandler) throws CoreException {
1124+
if (!JavaLanguageServerPlugin.getPreferencesManager().getPreferences().getRenameReferencesEnabled()) {
1125+
return;
1126+
}
1127+
ICompilationUnit cu = context.getCompilationUnit();
1128+
if (cu == null) {
1129+
return;
1130+
}
1131+
IResource resource = cu.getResource();
1132+
if (resource == null) {
1133+
return;
1134+
}
1135+
IMarker[] markers = resource.findMarkers(BaseDocumentLifeCycleHandler.RENAME_REFERENCE_MARKER_ID, false, IResource.DEPTH_ONE);
1136+
Arrays.stream(markers).forEach(marker -> {
1137+
try {
1138+
if (Objects.equals(problem.getOffset(), marker.getAttribute(IMarker.CHAR_START)) && Objects.equals(problem.getOffset() + problem.getLength(), marker.getAttribute(IMarker.CHAR_END))) {
1139+
String originalName = (String) marker.getAttribute("OriginalName");
1140+
String newName = (String) marker.getAttribute("newName");
1141+
Range range = JDTUtils.toRange(cu, problem.getOffset(), problem.getLength());
1142+
if (originalName != null && newName != null) {
1143+
String label = Messages.format(CorrectionMessages.LocalCorrectionsSubProcessor_manual_rename_label, new String[]{ originalName, newName });
1144+
proposals.add(new CUCorrectionCommandProposal(label, CodeActionKind.QuickFix, cu, IProposalRelevance.RENAME_REFACTORING_QUICK_FIX, RENAME_REFERENCES_COMMAND, Arrays.asList(cu.getResource().getLocationURI().toString(), originalName, newName, range)));
1145+
}
1146+
}
1147+
} catch (CoreException e) {
1148+
// Do nothing
1149+
}
1150+
});
1151+
}
11121152
}

org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/BaseDocumentLifeCycleHandler.java

Lines changed: 105 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import java.util.List;
2222
import java.util.Map;
2323
import java.util.Set;
24+
import java.util.stream.Collectors;
2425

2526
import org.eclipse.core.resources.IFile;
2627
import org.eclipse.core.resources.IMarker;
@@ -45,22 +46,29 @@
4546
import org.eclipse.jdt.core.IJavaElement;
4647
import org.eclipse.jdt.core.IJavaModelMarker;
4748
import org.eclipse.jdt.core.IJavaProject;
49+
import org.eclipse.jdt.core.IMember;
4850
import org.eclipse.jdt.core.IPackageFragment;
4951
import org.eclipse.jdt.core.IProblemRequestor;
52+
import org.eclipse.jdt.core.IType;
5053
import org.eclipse.jdt.core.JavaCore;
5154
import org.eclipse.jdt.core.JavaModelException;
5255
import org.eclipse.jdt.core.WorkingCopyOwner;
5356
import org.eclipse.jdt.core.compiler.IProblem;
5457
import org.eclipse.jdt.core.dom.CompilationUnit;
58+
import org.eclipse.jdt.core.dom.Modifier;
5559
import org.eclipse.jdt.core.manipulation.CoreASTProvider;
5660
import org.eclipse.jdt.internal.core.OpenableElementInfo;
5761
import org.eclipse.jdt.internal.core.PackageFragment;
5862
import org.eclipse.jdt.ls.core.internal.DocumentAdapter;
63+
import org.eclipse.jdt.ls.core.internal.IConstants;
5964
import org.eclipse.jdt.ls.core.internal.JDTUtils;
6065
import org.eclipse.jdt.ls.core.internal.JavaLanguageServerPlugin;
6166
import org.eclipse.jdt.ls.core.internal.JobHelpers;
67+
import org.eclipse.jdt.ls.core.internal.Messages;
6268
import org.eclipse.jdt.ls.core.internal.MovingAverage;
6369
import org.eclipse.jdt.ls.core.internal.ProjectUtils;
70+
import org.eclipse.jdt.ls.core.internal.ResourceUtils;
71+
import org.eclipse.jdt.ls.core.internal.corrections.CorrectionMessages;
6472
import org.eclipse.jdt.ls.core.internal.corrections.DiagnosticsHelper;
6573
import org.eclipse.jdt.ls.core.internal.managers.InvisibleProjectImporter;
6674
import org.eclipse.jdt.ls.core.internal.managers.ProjectsManager;
@@ -102,6 +110,9 @@ public abstract class BaseDocumentLifeCycleHandler {
102110
*/
103111
private static final long PUBLISH_DIAGNOSTICS_MAX_DEBOUNCE = 2000; /*ms*/
104112

113+
public static final String RENAME_REFERENCE_MARKER_ID = IConstants.PLUGIN_ID + ".renameReferenceMarker";
114+
public static final int RENAME_REFERENCE_PROBLEM_ID = IProblem.Syntax + 2000;
115+
105116
private CoreASTProvider sharedASTProvider;
106117
private WorkspaceJob validationTimer;
107118
private WorkspaceJob publishDiagnosticsJob;
@@ -110,6 +121,9 @@ public abstract class BaseDocumentLifeCycleHandler {
110121
private MovingAverage movingAverageForValidation = new MovingAverage(DOCUMENT_LIFECYCLE_MAX_DEBOUNCE);
111122
private MovingAverage movingAverageForDiagnostics = new MovingAverage(PUBLISH_DIAGNOSTICS_MIN_DEBOUNCE);
112123

124+
private Map<String, List<String>> documentOriginalNames = new HashMap<>();
125+
private Map<String, List<IMarker>> documentMarkers = new HashMap<>();
126+
113127
public BaseDocumentLifeCycleHandler(boolean delayValidation) {
114128
this.sharedASTProvider = CoreASTProvider.getInstance();
115129
if (delayValidation) {
@@ -179,7 +193,7 @@ private long getDocumentLifecycleDelay() {
179193
*/
180194
private long getPublishDiagnosticsDelay() {
181195
return Math.min(
182-
Math.max(PUBLISH_DIAGNOSTICS_MIN_DEBOUNCE, Math.round(1.5 * movingAverageForDiagnostics.value)),
196+
Math.max(PUBLISH_DIAGNOSTICS_MIN_DEBOUNCE, Math.round(1.5 * movingAverageForDiagnostics.value)),
183197
PUBLISH_DIAGNOSTICS_MAX_DEBOUNCE
184198
);
185199
}
@@ -302,11 +316,18 @@ public IProblemRequestor getProblemRequestor(ICompilationUnit workingCopy) {
302316

303317
};
304318
int flags = ICompilationUnit.FORCE_PROBLEM_DETECTION | ICompilationUnit.ENABLE_BINDINGS_RECOVERY | ICompilationUnit.ENABLE_STATEMENTS_RECOVERY;
319+
if (JavaLanguageServerPlugin.getPreferencesManager().getPreferences().getRenameReferencesEnabled()) {
320+
provideRenameReferencesMarkers(unit);
321+
}
305322
unit.reconcile(ICompilationUnit.NO_AST, flags, wcOwner, monitor);
306323
}
307324

308325
public void didClose(DidCloseTextDocumentParams params) {
309326
documentVersions.remove(params.getTextDocument().getUri());
327+
ICompilationUnit cu = JDTUtils.resolveCompilationUnit(params.getTextDocument().getUri());
328+
if (cu != null) {
329+
this.documentOriginalNames.remove(cu.getResource().getLocationURI().toString());
330+
}
310331
ISchedulingRule rule = JDTUtils.getRule(params.getTextDocument().getUri());
311332
try {
312333
ResourcesPlugin.getWorkspace().run(new IWorkspaceRunnable() {
@@ -402,6 +423,18 @@ public ICompilationUnit handleOpen(DidOpenTextDocumentParams params) {
402423
// see https://github.com/redhat-developer/vscode-java/issues/274
403424
checkPackageDeclaration(uri, unit);
404425
inferInvisibleProjectSourceRoot(unit);
426+
List<String> memberNames = new ArrayList<>();
427+
if (JavaLanguageServerPlugin.getPreferencesManager().getPreferences().getRenameReferencesEnabled()) {
428+
IType[] types = unit.getAllTypes();
429+
for (IType type : types) {
430+
for (IJavaElement child : type.getChildren()) {
431+
if (child instanceof IMember member && Modifier.isPublic(member.getFlags())) {
432+
memberNames.add(member.getElementName());
433+
}
434+
}
435+
}
436+
this.documentOriginalNames.put(unit.getResource().getLocationURI().toString(), memberNames);
437+
}
405438
} catch (JavaModelException e) {
406439
JavaLanguageServerPlugin.logException("Error while opening document. URI: " + uri, e);
407440
}
@@ -459,6 +492,77 @@ public ICompilationUnit handleChanged(DidChangeTextDocumentParams params) {
459492
return unit;
460493
}
461494

495+
private void provideRenameReferencesMarkers(ICompilationUnit unit) {
496+
String uri = unit.getResource().getLocationURI().toString();
497+
List<IMember> members = new ArrayList<>();
498+
try {
499+
IType[] types = unit.getAllTypes();
500+
for (IType type : types) {
501+
for (IJavaElement child : type.getChildren()) {
502+
if (child instanceof IMember member && Modifier.isPublic(member.getFlags())) {
503+
members.add(member);
504+
}
505+
}
506+
}
507+
if (this.documentOriginalNames.containsKey(uri)) {
508+
// delete existing markers
509+
List<IMarker> currentMarkers = this.documentMarkers.get(uri);
510+
if (currentMarkers != null) {
511+
unit.getResource().deleteMarkers(RENAME_REFERENCE_MARKER_ID, false, IResource.DEPTH_ONE);
512+
currentMarkers.clear();
513+
} else {
514+
currentMarkers = new ArrayList<>();
515+
this.documentMarkers.put(uri, currentMarkers);
516+
}
517+
List<String> existingMemberNames = this.documentOriginalNames.get(uri);
518+
if (existingMemberNames.size() == members.size()) {
519+
for (int i = 0; i < members.size(); i++) {
520+
IMember member = members.get(i);
521+
String existingMemberName = existingMemberNames.get(i);
522+
String newName = member.getElementName();
523+
if (newName == null) {
524+
this.documentOriginalNames.put(uri, members.stream().map(m -> m.getElementName()).collect(Collectors.toList()));
525+
break;
526+
}
527+
if (existingMemberName.equals(newName)) {
528+
continue;
529+
}
530+
String message = Messages.format(CorrectionMessages.LocalCorrectionsSubProcessor_manual_rename_label, new String[]{ existingMemberName, newName });
531+
IMarker marker = ResourceUtils.createInfoMarker(RENAME_REFERENCE_MARKER_ID, unit.getResource(), message, RENAME_REFERENCE_PROBLEM_ID, member.getNameRange().getOffset(), member.getNameRange().getOffset() + member.getNameRange().getLength());
532+
marker.setAttribute("OriginalName", existingMemberName);
533+
marker.setAttribute("newName", newName);
534+
currentMarkers.add(marker);
535+
}
536+
} else {
537+
// update the storage names list, since it's outdated
538+
this.documentOriginalNames.put(uri, members.stream().map(m -> m.getElementName()).collect(Collectors.toList()));
539+
}
540+
} else {
541+
this.documentOriginalNames.put(uri, members.stream().map(m -> m.getElementName()).collect(Collectors.toList()));
542+
}
543+
} catch (Exception e) {
544+
// Do nothing
545+
}
546+
}
547+
548+
public void cleanRenameReferenceCache(ICompilationUnit unit) {
549+
if (unit == null) {
550+
return;
551+
}
552+
IResource resource = unit.getResource();
553+
if (resource == null) {
554+
return;
555+
}
556+
String uri = resource.getLocationURI().toString();
557+
this.documentOriginalNames.remove(uri);
558+
this.documentMarkers.remove(uri);
559+
try {
560+
unit.getResource().deleteMarkers(RENAME_REFERENCE_MARKER_ID, false, IResource.DEPTH_ONE);
561+
} catch (CoreException e) {
562+
// do nothing
563+
}
564+
}
565+
462566
public ICompilationUnit handleClosed(DidCloseTextDocumentParams params) {
463567
String uri = params.getTextDocument().getUri();
464568
ICompilationUnit unit = JDTUtils.resolveCompilationUnit(uri);

org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/CodeActionHandler.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ public class CodeActionHandler {
8181
private NonProjectFixProcessor nonProjectFixProcessor;
8282

8383
private PreferenceManager preferenceManager;
84+
private DocumentLifeCycleHandler documentLifeCycleHandler;
8485

8586
public CodeActionHandler(PreferenceManager preferenceManager) {
8687
this.preferenceManager = preferenceManager;
@@ -91,6 +92,11 @@ public CodeActionHandler(PreferenceManager preferenceManager) {
9192
this.nonProjectFixProcessor = new NonProjectFixProcessor(preferenceManager);
9293
}
9394

95+
public CodeActionHandler(PreferenceManager preferenceManager, DocumentLifeCycleHandler documentLifeCycleHandler) {
96+
this(preferenceManager);
97+
this.documentLifeCycleHandler = documentLifeCycleHandler;
98+
}
99+
94100
public List<Either<Command, CodeAction>> getCodeActionCommands(CodeActionParams params, IProgressMonitor monitor) {
95101
if (monitor.isCanceled()) {
96102
return Collections.emptyList();
@@ -159,7 +165,7 @@ public List<Either<Command, CodeAction>> getCodeActionCommands(CodeActionParams
159165
if (containsKind(codeActionKinds, CodeActionKind.QuickFix)) {
160166
try {
161167
codeActions.addAll(nonProjectFixProcessor.getCorrections(params, context, locations));
162-
List<ChangeCorrectionProposal> quickfixProposals = this.quickFixProcessor.getCorrections(params, context, locations);
168+
List<ChangeCorrectionProposal> quickfixProposals = this.quickFixProcessor.getCorrections(params, context, locations, documentLifeCycleHandler);
163169
this.quickFixProcessor.addAddAllMissingImportsProposal(context, quickfixProposals);
164170
Set<ChangeCorrectionProposal> quickSet = new TreeSet<>(comparator);
165171
quickSet.addAll(quickfixProposals);

org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/JDTLanguageServer.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -694,7 +694,7 @@ public CompletableFuture<List<Either<SymbolInformation, DocumentSymbol>>> docume
694694
@Override
695695
public CompletableFuture<List<Either<Command, CodeAction>>> codeAction(CodeActionParams params) {
696696
logInfo(">> document/codeAction");
697-
CodeActionHandler handler = new CodeActionHandler(this.preferenceManager);
697+
CodeActionHandler handler = new CodeActionHandler(this.preferenceManager, this.documentLifeCycleHandler);
698698
return computeAsync((monitor) -> {
699699
waitForLifecycleJobs(monitor);
700700
return handler.getCodeActionCommands(params, monitor);
@@ -803,7 +803,7 @@ public CompletableFuture<Either<Range, PrepareRenameResult>> prepareRename(Prepa
803803
@Override
804804
public CompletableFuture<WorkspaceEdit> rename(RenameParams params) {
805805
logInfo(">> document/rename");
806-
RenameHandler handler = new RenameHandler(preferenceManager);
806+
RenameHandler handler = new RenameHandler(preferenceManager, this.documentLifeCycleHandler);
807807
return computeAsync((monitor) -> {
808808
waitForLifecycleJobs(monitor);
809809
return handler.rename(params, monitor);

0 commit comments

Comments
 (0)