From cfc4b4e6b3e696778a7ae53fcbfb7b629be9c781 Mon Sep 17 00:00:00 2001 From: Hope Hadfield Date: Wed, 13 Mar 2024 12:04:26 -0400 Subject: [PATCH] move setting to clean-up actions and move rename to didSave --- .../BaseDocumentLifeCycleHandler.java | 43 ++++++++++++++++++- .../internal/handlers/SaveActionHandler.java | 8 ++-- .../internal/preferences/Preferences.java | 19 -------- 3 files changed, 45 insertions(+), 25 deletions(-) diff --git a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/BaseDocumentLifeCycleHandler.java b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/BaseDocumentLifeCycleHandler.java index 00a64a7368..63641905db 100644 --- a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/BaseDocumentLifeCycleHandler.java +++ b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/BaseDocumentLifeCycleHandler.java @@ -16,12 +16,14 @@ import java.io.File; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.Optional; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; @@ -69,6 +71,7 @@ import org.eclipse.jdt.ls.core.internal.managers.InvisibleProjectImporter; import org.eclipse.jdt.ls.core.internal.managers.ProjectsManager; import org.eclipse.jdt.ls.core.internal.preferences.PreferenceManager; +import org.eclipse.jdt.ls.core.internal.preferences.Preferences; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.IDocument; import org.eclipse.lsp4j.DidChangeTextDocumentParams; @@ -77,8 +80,13 @@ import org.eclipse.lsp4j.DidSaveTextDocumentParams; import org.eclipse.lsp4j.Position; import org.eclipse.lsp4j.Range; +import org.eclipse.lsp4j.RenameFile; +import org.eclipse.lsp4j.ResourceOperation; import org.eclipse.lsp4j.TextDocumentContentChangeEvent; +import org.eclipse.lsp4j.TextDocumentEdit; +import org.eclipse.lsp4j.WorkspaceEdit; import org.eclipse.lsp4j.jsonrpc.ResponseErrorException; +import org.eclipse.lsp4j.jsonrpc.messages.Either; import org.eclipse.lsp4j.jsonrpc.messages.ResponseError; import org.eclipse.osgi.util.NLS; import org.eclipse.text.edits.DeleteEdit; @@ -355,7 +363,8 @@ public void didChange(DidChangeTextDocumentParams params) { } public void didSave(DidSaveTextDocumentParams params) { - lastSyncedDocumentLengths.remove(params.getTextDocument().getUri()); + String documentUri = params.getTextDocument().getUri(); + lastSyncedDocumentLengths.remove(documentUri); IFile file = JDTUtils.findFile(params.getTextDocument().getUri()); if (file != null && !Objects.equals(ProjectsManager.getDefaultProject(), file.getProject())) { // no need for a workspace runnable, change is trivial @@ -369,6 +378,38 @@ public void didSave(DidSaveTextDocumentParams params) { JavaLanguageServerPlugin.logException("Handle document save ", e); } } + + Preferences preferences = preferenceManager.getPreferences(); + List lspCleanups = Collections.emptyList(); + if (preferences.getCleanUpActionsOnSaveEnabled()) { + lspCleanups = preferences.getCleanUpActions(); + } + + if (lspCleanups.contains("renameFile")) { + handleSaveActionRenameFile(documentUri); + } + } + + private void handleSaveActionRenameFile(String documentUri) { + ICompilationUnit cu = JDTUtils.resolveCompilationUnit(documentUri); + CompilationUnit astRoot = CoreASTProvider.getInstance().getAST(cu, CoreASTProvider.WAIT_YES, null); + IProblem[] problems = astRoot.getProblems(); + Optional desiredProblem = Arrays.stream(problems).filter(p -> p.getID() == IProblem.PublicClassMustMatchFileName).findFirst(); + if (desiredProblem.isPresent()) { + IProblem renameProblem = desiredProblem.get(); + String newName = renameProblem.getArguments()[1]; + String oldName = cu.getElementName(); + String newUri = documentUri.replace(oldName, newName + ".java"); + List> documentChanges = new ArrayList<>(); + RenameFile operation = new RenameFile(documentUri, newUri); + documentChanges.add(Either.forRight(operation)); + WorkspaceEdit edit = new WorkspaceEdit(documentChanges); + edit.setChanges(Collections.emptyMap()); + final boolean applyNow = JavaLanguageServerPlugin.getPreferencesManager().getClientPreferences().isWorkspaceApplyEditSupported(); + if (applyNow) { + JavaLanguageServerPlugin.getInstance().getClientConnection().applyWorkspaceEdit(edit); + } + } } public ICompilationUnit handleOpen(DidOpenTextDocumentParams params) { diff --git a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/SaveActionHandler.java b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/SaveActionHandler.java index 8b865d85b7..969932f47a 100644 --- a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/SaveActionHandler.java +++ b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/SaveActionHandler.java @@ -79,10 +79,6 @@ public List willSaveWaitUntil(WillSaveTextDocumentParams params, IProg edit.addAll(handleSaveActionOrganizeImports(documentUri, monitor)); } - if (preferences.isJavaSaveActionsRenameFileEnabled()) { - handleSaveActionRenameFile(documentUri, monitor); - } - LinkedHashSet cleanUpIds = new LinkedHashSet<>(); List lspCleanups = Collections.emptyList(); @@ -92,6 +88,7 @@ public List willSaveWaitUntil(WillSaveTextDocumentParams params, IProg Collection jdtSettingCleanups = getCleanupsFromJDTUIPreferences(jdtUiPreferences); cleanUpIds.addAll(canUseInternalSettings ? jdtSettingCleanups : lspCleanups); + cleanUpIds.remove("renameFile"); List cleanUpEdits = cleanUpRegistry.getEditsForAllActiveCleanUps(params.getTextDocument(), new ArrayList<>(cleanUpIds), monitor); edit.addAll(cleanUpEdits); return edit; @@ -114,6 +111,7 @@ public WorkspaceEdit performManualCleanupActions(TextDocumentIdentifier doc, IPr Collection jdtSettingCleanups = getCleanupsFromJDTUIPreferences(jdtUiPreferences); cleanUpIds.addAll(canUseInternalSettings ? jdtSettingCleanups : lspCleanups); + cleanUpIds.remove("renameFile"); List cleanUpEdits = cleanUpRegistry.getEditsForAllActiveCleanUps(doc, new ArrayList<>(cleanUpIds), monitor); edit.addAll(cleanUpEdits); Map> editMap = new HashMap<>(); @@ -167,7 +165,7 @@ private List handleSaveActionOrganizeImports(String documentUri, IProg return edit; } - private void handleSaveActionRenameFile(String documentUri, IProgressMonitor monitor) { + private void handleSaveActionRenameFile(String documentUri) { ICompilationUnit cu = JDTUtils.resolveCompilationUnit(documentUri); CompilationUnit astRoot = CoreASTProvider.getInstance().getAST(cu, CoreASTProvider.WAIT_YES, null); IProblem[] problems = astRoot.getProblems(); diff --git a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/preferences/Preferences.java b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/preferences/Preferences.java index 98d3d40613..11d01ea438 100644 --- a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/preferences/Preferences.java +++ b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/preferences/Preferences.java @@ -244,11 +244,6 @@ public class Preferences { */ public static final String JAVA_SAVE_ACTIONS_ORGANIZE_IMPORTS_KEY = "java.saveActions.organizeImports"; - /** - * Preference key to enable/disable rename file on save - */ - public static final String JAVA_SAVE_ACTIONS_RENAME_FILE_ENABLED = "java.saveActions.renameFile"; - /** * Preference key to enable/disable signature help. */ @@ -616,7 +611,6 @@ public class Preferences { private String javaQuickFixShowAt; private boolean javaFormatOnTypeEnabled; private boolean javaSaveActionsOrganizeImportsEnabled; - private boolean javaSaveActionsRenameFileEnabled; private boolean signatureHelpEnabled; private boolean signatureHelpDescriptionEnabled; private boolean renameEnabled; @@ -875,7 +869,6 @@ public Preferences() { javaQuickFixShowAt = LINE; javaFormatOnTypeEnabled = false; javaSaveActionsOrganizeImportsEnabled = false; - javaSaveActionsRenameFileEnabled = true; signatureHelpEnabled = false; signatureHelpDescriptionEnabled = false; renameEnabled = true; @@ -1048,9 +1041,6 @@ public static Preferences createFrom(Map configuration) { boolean javaSaveActionAutoOrganizeImportsEnabled = getBoolean(configuration, JAVA_SAVE_ACTIONS_ORGANIZE_IMPORTS_KEY, false); prefs.setJavaSaveActionAutoOrganizeImportsEnabled(javaSaveActionAutoOrganizeImportsEnabled); - boolean javaSaveActionRenameFileEnabled = getBoolean(configuration, JAVA_SAVE_ACTIONS_RENAME_FILE_ENABLED, true); - prefs.setJavaSaveActionRenameFileEnabled(javaSaveActionRenameFileEnabled); - boolean signatureHelpEnabled = getBoolean(configuration, SIGNATURE_HELP_ENABLED_KEY, true); prefs.setSignatureHelpEnabled(signatureHelpEnabled); @@ -1594,11 +1584,6 @@ public Preferences setJavaSaveActionAutoOrganizeImportsEnabled(boolean javaSaveA return this; } - public Preferences setJavaSaveActionRenameFileEnabled(boolean javaSaveActionsRenameFileEnabled) { - this.javaSaveActionsRenameFileEnabled = javaSaveActionsRenameFileEnabled; - return this; - } - public Preferences setHashCodeEqualsTemplateUseJava7Objects(boolean hashCodeEqualsTemplateUseJ7Objects) { this.hashCodeEqualsTemplateUseJava7Objects = hashCodeEqualsTemplateUseJ7Objects; return this; @@ -1864,10 +1849,6 @@ public boolean isJavaSaveActionsOrganizeImportsEnabled() { return javaSaveActionsOrganizeImportsEnabled; } - public boolean isJavaSaveActionsRenameFileEnabled() { - return javaSaveActionsRenameFileEnabled; - } - public boolean isSignatureHelpEnabled() { return signatureHelpEnabled; }