mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[java-inspections] IDEA-340624 Optimize imports quick fixes do nothing
- use not-on-the-fly GitOrigin-RevId: 31272bd0a4670ddd80aae4fdbe756010cf14ac47
This commit is contained in:
committed by
intellij-monorepo-bot
parent
a93a03b864
commit
839cb86f9d
@@ -279,7 +279,7 @@ public abstract class QuickFixFactory {
|
||||
|
||||
public abstract @NotNull IntentionAction createCreateAnnotationMethodFromUsageFix(@NotNull PsiNameValuePair pair);
|
||||
|
||||
public abstract @NotNull IntentionAction createOptimizeImportsFix(boolean onTheFly, @NotNull PsiFile file);
|
||||
public abstract @NotNull IntentionAction createOptimizeImportsFix(boolean fixOnTheFly, @NotNull PsiFile file);
|
||||
|
||||
public abstract @NotNull IntentionAction createSafeDeleteUnusedParameterInHierarchyFix(@NotNull PsiParameter parameter, boolean excludingHierarchy);
|
||||
|
||||
|
||||
+11
-9
@@ -39,7 +39,7 @@ class UnusedImportsVisitor extends JavaElementVisitor {
|
||||
private final @NotNull Project myProject;
|
||||
private final PsiFile myFile;
|
||||
private final @NotNull Document myDocument;
|
||||
private IntentionAction myOptimizeImportsFix; // when not null, there are not-optimized imports in the file
|
||||
private boolean requiresFix = false;
|
||||
private int myCurrentEntryIndex = -1;
|
||||
private boolean errorFound;
|
||||
|
||||
@@ -71,15 +71,17 @@ class UnusedImportsVisitor extends JavaElementVisitor {
|
||||
FileStatusMap fileStatusMap = daemonCodeAnalyzer.getFileStatusMap();
|
||||
fileStatusMap.setErrorFoundFlag(myProject, myDocument, true);
|
||||
}
|
||||
IntentionAction fix = myOptimizeImportsFix;
|
||||
if (fix != null) {
|
||||
IntentionAction fixNotOnFly = null;
|
||||
if (requiresFix) {
|
||||
IntentionAction fix = QuickFixFactory.getInstance().createOptimizeImportsFix(true, myFile);
|
||||
OptimizeImportRestarter.getInstance(myProject).scheduleOnDaemonFinish(myFile, fix);
|
||||
fixNotOnFly = QuickFixFactory.getInstance().createOptimizeImportsFix(false, myFile);
|
||||
}
|
||||
HighlightDisplayKey misSortedKey = HighlightDisplayKey.find(MissortedImportsInspection.SHORT_NAME);
|
||||
if (misSortedKey != null && isToolEnabled(misSortedKey) && fix != null && importList != null) {
|
||||
if (misSortedKey != null && isToolEnabled(misSortedKey) && fixNotOnFly != null && importList != null) {
|
||||
holder.add(HighlightInfo.newHighlightInfo(JavaHighlightInfoTypes.MISSORTED_IMPORTS)
|
||||
.range(importList)
|
||||
.registerFix(fix, null, HighlightDisplayKey.getDisplayNameByKey(misSortedKey), null, misSortedKey)
|
||||
.registerFix(fixNotOnFly, null, HighlightDisplayKey.getDisplayNameByKey(misSortedKey), null, misSortedKey)
|
||||
.create());
|
||||
}
|
||||
}
|
||||
@@ -134,9 +136,9 @@ class UnusedImportsVisitor extends JavaElementVisitor {
|
||||
}
|
||||
|
||||
int entryIndex = JavaCodeStyleManager.getInstance(myProject).findEntryIndex(importStatement);
|
||||
if (entryIndex < myCurrentEntryIndex && myOptimizeImportsFix == null) {
|
||||
if (entryIndex < myCurrentEntryIndex && !requiresFix) {
|
||||
// mis-sorted imports found
|
||||
myOptimizeImportsFix = QuickFixFactory.getInstance().createOptimizeImportsFix(true, myFile);
|
||||
requiresFix = true;
|
||||
}
|
||||
myCurrentEntryIndex = entryIndex;
|
||||
}
|
||||
@@ -196,8 +198,8 @@ class UnusedImportsVisitor extends JavaElementVisitor {
|
||||
|
||||
IntentionAction switchFix = QuickFixFactory.getInstance().createEnableOptimizeImportsOnTheFlyFix();
|
||||
builder.registerFix(switchFix, null, HighlightDisplayKey.getDisplayNameByKey(unusedImportKey), null, unusedImportKey);
|
||||
if (!predefinedImport && myOptimizeImportsFix == null) {
|
||||
myOptimizeImportsFix = QuickFixFactory.getInstance().createOptimizeImportsFix(true, myFile);
|
||||
if (!predefinedImport && !requiresFix) {
|
||||
requiresFix = true;
|
||||
}
|
||||
addInfo(holder, builder);
|
||||
}
|
||||
|
||||
+1
-1
@@ -52,7 +52,7 @@ public final class MissortedImportsInspection extends GlobalSimpleInspectionTool
|
||||
int entryIndex = JavaCodeStyleManager.getInstance(javaFile.getProject()).findEntryIndex(importStatement);
|
||||
if (entryIndex < currentEntryIndex) {
|
||||
// mis-sorted import found
|
||||
IntentionAction fix = QuickFixFactory.getInstance().createOptimizeImportsFix(true, javaFile);
|
||||
IntentionAction fix = QuickFixFactory.getInstance().createOptimizeImportsFix(false, javaFile);
|
||||
problemsHolder.registerProblem(importList, getDisplayNameText(), new IntentionWrapper(fix));
|
||||
return;
|
||||
}
|
||||
|
||||
+2
-2
@@ -591,11 +591,11 @@ public final class QuickFixFactoryImpl extends QuickFixFactory {
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull IntentionAction createOptimizeImportsFix(final boolean onTheFly, @NotNull PsiFile file) {
|
||||
public @NotNull IntentionAction createOptimizeImportsFix(final boolean fixOnTheFly, @NotNull PsiFile file) {
|
||||
ApplicationManager.getApplication().assertIsNonDispatchThread();
|
||||
VirtualFile virtualFile = file.getVirtualFile();
|
||||
boolean isInContent = virtualFile != null && (ModuleUtilCore.projectContainsFile(file.getProject(), virtualFile, false) || ScratchUtil.isScratch(virtualFile));
|
||||
return new OptimizeImportsFix(onTheFly, isInContent, virtualFile == null ? ThreeState.UNSURE : SilentChangeVetoer.extensionsAllowToChangeFileSilently(file.getProject(), virtualFile));
|
||||
return new OptimizeImportsFix(fixOnTheFly, isInContent, virtualFile == null ? ThreeState.UNSURE : SilentChangeVetoer.extensionsAllowToChangeFileSilently(file.getProject(), virtualFile));
|
||||
}
|
||||
|
||||
private static final class OptimizeImportsFix implements IntentionAction {
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
import java.util.List;
|
||||
import java.util.ArrayList;
|
||||
<warning descr="Unused import statement">import java.util.Map;</warning>
|
||||
<warning descr="Unused import statement">import java.util.Set;</warning>
|
||||
|
||||
class MissortedImports{
|
||||
public static void main(String[] <warning descr="Parameter 'args' is never used">args</warning>) {
|
||||
List<String> a = new ArrayList<>();
|
||||
System.out.println(a);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
<caret>import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
class MissortedImports{
|
||||
public static void main(String[] args) {
|
||||
List<String> a = new ArrayList<>();
|
||||
System.out.println(a);
|
||||
}
|
||||
}
|
||||
@@ -5,9 +5,11 @@ import com.intellij.application.options.CodeStyle;
|
||||
import com.intellij.application.options.codeStyle.excludedFiles.NamedScopeDescriptor;
|
||||
import com.intellij.codeInsight.CodeInsightWorkspaceSettings;
|
||||
import com.intellij.codeInsight.daemon.JavaErrorBundle;
|
||||
import com.intellij.codeInsight.daemon.QuickFixBundle;
|
||||
import com.intellij.codeInsight.intention.IntentionAction;
|
||||
import com.intellij.codeInsight.intention.QuickFixFactory;
|
||||
import com.intellij.codeInspection.deadCode.UnusedDeclarationInspection;
|
||||
import com.intellij.codeInspection.unusedImport.MissortedImportsInspection;
|
||||
import com.intellij.codeInspection.unusedImport.UnusedImportInspection;
|
||||
import com.intellij.formatting.MockCodeStyleSettingsModifier;
|
||||
import com.intellij.ide.scratch.ScratchFileService;
|
||||
@@ -443,6 +445,15 @@ public class OptimizeImportsTest extends OptimizeImportsTestCase {
|
||||
assertNotEmpty(myFixture.doHighlighting(HighlightSeverity.ERROR));
|
||||
}
|
||||
|
||||
public void testOptimizeImportNotOnTheFly() {
|
||||
myFixture.enableInspections(new MissortedImportsInspection(), new UnusedImportInspection());
|
||||
myFixture.testHighlighting(getTestName(false) + ".java");
|
||||
IntentionAction intention = myFixture.findSingleIntention(QuickFixBundle.message("optimize.imports.fix"));
|
||||
assertNotNull(intention);
|
||||
myFixture.launchAction(intention);
|
||||
myFixture.checkResultByFile(getTestName(false) + "_after.java");
|
||||
}
|
||||
|
||||
public void testRemovingAllUnusedImports() throws Exception {
|
||||
myFixture.enableInspections(new UnusedImportInspection());
|
||||
myFixture.configureByText("a.java", """
|
||||
|
||||
Reference in New Issue
Block a user