mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-18 09:34:34 +07:00
[java-inspection] IDEA-382122 IJ-CR-189661 Convert from compact source file
- reuse holder.problem().fix().register() GitOrigin-RevId: ebbcc1c2b00b2dcfe58926ed973c303fed5dc950
This commit is contained in:
committed by
intellij-monorepo-bot
parent
3ffc1737dc
commit
57db570c30
+2
-32
@@ -9,25 +9,19 @@ import com.intellij.codeInsight.daemon.impl.quickfix.InsertMissingTokenFix;
|
||||
import com.intellij.codeInsight.daemon.impl.quickfix.RenameUnderscoreFix;
|
||||
import com.intellij.codeInsight.daemon.impl.quickfix.VariableAccessFromInnerClassJava10Fix;
|
||||
import com.intellij.codeInsight.intention.CommonIntentionAction;
|
||||
import com.intellij.codeInsight.intention.PriorityAction;
|
||||
import com.intellij.codeInspection.streamMigration.SimplifyForEachInspection;
|
||||
import com.intellij.core.JavaPsiBundle;
|
||||
import com.intellij.java.codeserver.highlighting.errors.JavaErrorKinds;
|
||||
import com.intellij.pom.java.JavaFeature;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiErrorElement;
|
||||
import com.intellij.psi.PsiImplicitClass;
|
||||
import com.intellij.psi.PsiJavaCodeReferenceElement;
|
||||
import com.intellij.psi.PsiMember;
|
||||
import com.intellij.psi.PsiMethod;
|
||||
import com.intellij.psi.PsiMethodCallExpression;
|
||||
import com.intellij.psi.PsiReferenceExpression;
|
||||
import com.intellij.psi.PsiSwitchBlock;
|
||||
import com.intellij.psi.PsiSwitchLabelStatement;
|
||||
import com.intellij.psi.PsiSwitchLabelStatementBase;
|
||||
import com.intellij.psi.PsiSwitchLabeledRuleStatement;
|
||||
import com.intellij.psi.PsiTryStatement;
|
||||
import com.intellij.psi.util.JvmMainMethodSearcher;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -48,36 +42,12 @@ public final class AdditionalJavaErrorFixProvider extends AbstractJavaErrorFixPr
|
||||
new RenameUnderscoreFix(ref) : null);
|
||||
fix(JavaErrorKinds.UNSUPPORTED_FEATURE, error -> {
|
||||
if (error.context() != JavaFeature.IMPLICIT_CLASSES) return null;
|
||||
PsiMember member = PsiTreeUtil.getNonStrictParentOfType(error.psi(), PsiMember.class);
|
||||
if (!(member instanceof PsiMethod)) return null;
|
||||
if (!(member.getContainingClass() instanceof PsiImplicitClass implicitClass)) return null;
|
||||
boolean hasMainMethod = new JvmMainMethodSearcher() {
|
||||
|
||||
@Override
|
||||
public boolean instanceMainMethodsEnabled(@NotNull PsiElement psiElement) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean inheritedStaticMainEnabled(@NotNull PsiElement psiElement) {
|
||||
return true;
|
||||
}
|
||||
}.hasMainMethod(implicitClass);
|
||||
if (!hasMainMethod) return null;
|
||||
if (PsiTreeUtil.hasErrorElements(implicitClass)) {
|
||||
return null;
|
||||
}
|
||||
return new ImplicitToExplicitClassBackwardMigrationInspection.ReplaceWithExplicitClassFix(implicitClass);
|
||||
return ImplicitToExplicitClassBackwardMigrationInspection.createFix(error.psi());
|
||||
});
|
||||
fix(JavaErrorKinds.REFERENCE_UNRESOLVED, error -> {
|
||||
PsiJavaCodeReferenceElement psi = error.psi();
|
||||
if (PsiUtil.isAvailable(JavaFeature.IMPLICIT_CLASSES, psi)) return null;
|
||||
if (!(psi instanceof PsiReferenceExpression)) return null;
|
||||
if (!(psi.getParent() instanceof PsiReferenceExpression parentReference)) return null;
|
||||
if (!(parentReference.getParent() instanceof PsiMethodCallExpression methodCallExpression)) return null;
|
||||
if (!MigrateFromJavaLangIoInspection.canBeIOPrint(methodCallExpression)) return null;
|
||||
return new MigrateFromJavaLangIoInspection.ConvertIOToSystemOutFix(methodCallExpression)
|
||||
.withPresentation(presentation -> presentation.withPriority(PriorityAction.Priority.HIGH));
|
||||
return MigrateFromJavaLangIoInspection.createCanBeIOFix(error.psi());
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
+33
-5
@@ -4,7 +4,6 @@ package com.intellij.codeInspection;
|
||||
import com.intellij.codeInspection.wrongPackageStatement.AdjustPackageNameFix;
|
||||
import com.intellij.java.JavaBundle;
|
||||
import com.intellij.modcommand.ActionContext;
|
||||
import com.intellij.modcommand.ModCommandService;
|
||||
import com.intellij.modcommand.ModPsiUpdater;
|
||||
import com.intellij.modcommand.PsiUpdateModCommandAction;
|
||||
import com.intellij.openapi.project.Project;
|
||||
@@ -30,6 +29,7 @@ import com.intellij.psi.PsiImplicitClass;
|
||||
import com.intellij.psi.PsiImportList;
|
||||
import com.intellij.psi.PsiImportModuleStatement;
|
||||
import com.intellij.psi.PsiJavaFile;
|
||||
import com.intellij.psi.PsiMember;
|
||||
import com.intellij.psi.PsiMethod;
|
||||
import com.intellij.psi.PsiModifier;
|
||||
import com.intellij.psi.PsiModifierList;
|
||||
@@ -39,11 +39,13 @@ import com.intellij.psi.codeStyle.JavaCodeStyleSettings;
|
||||
import com.intellij.psi.impl.file.PsiDirectoryFactory;
|
||||
import com.intellij.psi.impl.source.codeStyle.ImportHelper;
|
||||
import com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl;
|
||||
import com.intellij.psi.util.JvmMainMethodSearcher;
|
||||
import com.intellij.psi.util.PsiMethodUtil;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import org.jetbrains.annotations.Nls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
@@ -79,22 +81,48 @@ public final class ImplicitToExplicitClassBackwardMigrationInspection extends Ab
|
||||
return;
|
||||
}
|
||||
ReplaceWithExplicitClassFix fix = new ReplaceWithExplicitClassFix(aClass);
|
||||
LocalQuickFix localQuickFix = ModCommandService.getInstance().wrapToQuickFix(fix);
|
||||
if (InspectionProjectProfileManager.isInformationLevel(getShortName(), identifier)) {
|
||||
TextRange textRange =
|
||||
TextRange.create(0, method.getParameterList().getTextRange().getEndOffset() - method.getTextRange().getStartOffset());
|
||||
holder.registerProblem(method, textRange, message, localQuickFix);
|
||||
holder.problem(method, message)
|
||||
.range(textRange)
|
||||
.fix(fix)
|
||||
.register();
|
||||
}
|
||||
else {
|
||||
holder.registerProblem(identifier, message, localQuickFix);
|
||||
holder.problem(identifier, message)
|
||||
.fix(fix)
|
||||
.register();
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
public static @Nullable PsiUpdateModCommandAction<PsiImplicitClass> createFix(@NotNull PsiElement psiElement) {
|
||||
PsiMember member = PsiTreeUtil.getNonStrictParentOfType(psiElement, PsiMember.class);
|
||||
if (!(member instanceof PsiMethod)) return null;
|
||||
if (!(member.getContainingClass() instanceof PsiImplicitClass implicitClass)) return null;
|
||||
boolean hasMainMethod = new JvmMainMethodSearcher() {
|
||||
@Override
|
||||
public boolean instanceMainMethodsEnabled(@NotNull PsiElement psiElement) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean inheritedStaticMainEnabled(@NotNull PsiElement psiElement) {
|
||||
return true;
|
||||
}
|
||||
}.hasMainMethod(implicitClass);
|
||||
if (!hasMainMethod) return null;
|
||||
if (PsiTreeUtil.hasErrorElements(implicitClass)) {
|
||||
return null;
|
||||
}
|
||||
return new ImplicitToExplicitClassBackwardMigrationInspection.ReplaceWithExplicitClassFix(implicitClass);
|
||||
}
|
||||
|
||||
public static class ReplaceWithExplicitClassFix extends PsiUpdateModCommandAction<PsiImplicitClass> {
|
||||
|
||||
protected ReplaceWithExplicitClassFix(@NotNull PsiImplicitClass element) {
|
||||
private ReplaceWithExplicitClassFix(@NotNull PsiImplicitClass element) {
|
||||
super(element);
|
||||
}
|
||||
|
||||
|
||||
+32
-7
@@ -1,10 +1,12 @@
|
||||
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.codeInspection;
|
||||
|
||||
import com.intellij.codeInsight.intention.PriorityAction;
|
||||
import com.intellij.java.JavaBundle;
|
||||
import com.intellij.modcommand.ActionContext;
|
||||
import com.intellij.modcommand.ModCommandService;
|
||||
import com.intellij.modcommand.ModCommandAction;
|
||||
import com.intellij.modcommand.ModPsiUpdater;
|
||||
import com.intellij.modcommand.Presentation;
|
||||
import com.intellij.modcommand.PsiUpdateModCommandAction;
|
||||
import com.intellij.psi.JavaElementVisitor;
|
||||
import com.intellij.psi.PsiElement;
|
||||
@@ -15,6 +17,7 @@ import com.intellij.psi.codeStyle.JavaCodeStyleManager;
|
||||
import com.siyeh.ig.callMatcher.CallMatcher;
|
||||
import com.siyeh.ig.psiutils.CommentTracker;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import static com.intellij.psi.CommonClassNames.JAVA_LANG_IO;
|
||||
|
||||
@@ -47,17 +50,34 @@ public final class MigrateFromJavaLangIoInspection extends AbstractBaseJavaLocal
|
||||
if (!isIOPrint(expression)) return;
|
||||
|
||||
PsiReferenceExpression methodExpression = expression.getMethodExpression();
|
||||
ConvertIOToSystemOutFix fix = new ConvertIOToSystemOutFix(expression);
|
||||
LocalQuickFix localQuickFix = ModCommandService.getInstance().wrapToQuickFix(fix);
|
||||
holder.registerProblem(methodExpression, JavaBundle.message("inspection.migrate.from.java.lang.io.name"), localQuickFix);
|
||||
ConvertIOToSystemOutFix fix = new ConvertIOToSystemOutFix(expression, referenceName);
|
||||
holder.problem(methodExpression, JavaBundle.message("inspection.migrate.from.java.lang.io.name"))
|
||||
.fix(fix)
|
||||
.register();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
public static @Nullable ModCommandAction createCanBeIOFix(@NotNull PsiElement psi) {
|
||||
if (!(psi instanceof PsiReferenceExpression)) return null;
|
||||
if (!(psi.getParent() instanceof PsiReferenceExpression parentReference)) return null;
|
||||
if (!(parentReference.getParent() instanceof PsiMethodCallExpression methodCallExpression)) return null;
|
||||
if (!canBeIOPrint(methodCallExpression)) return null;
|
||||
String referenceName = methodCallExpression.getMethodExpression().getReferenceName();
|
||||
if (referenceName == null) return null;
|
||||
return new MigrateFromJavaLangIoInspection.ConvertIOToSystemOutFix(methodCallExpression, referenceName)
|
||||
.withPresentation(presentation -> presentation.withPriority(PriorityAction.Priority.HIGH));
|
||||
}
|
||||
|
||||
public static class ConvertIOToSystemOutFix extends PsiUpdateModCommandAction<PsiMethodCallExpression> {
|
||||
|
||||
public ConvertIOToSystemOutFix(@NotNull PsiMethodCallExpression expression) {
|
||||
@NotNull
|
||||
private final String methodName;
|
||||
|
||||
private ConvertIOToSystemOutFix(@NotNull PsiMethodCallExpression expression,
|
||||
@NotNull String name) {
|
||||
super(expression);
|
||||
methodName = name;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -65,6 +85,11 @@ public final class MigrateFromJavaLangIoInspection extends AbstractBaseJavaLocal
|
||||
return JavaBundle.message("inspection.migrate.from.java.lang.io.fix.family");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected @Nullable Presentation getPresentation(@NotNull ActionContext context, @NotNull PsiMethodCallExpression element) {
|
||||
return Presentation.of(JavaBundle.message("inspection.migrate.from.java.lang.io.fix.name", "System.out." + methodName + "()"));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void invoke(@NotNull ActionContext context, @NotNull PsiMethodCallExpression element, @NotNull ModPsiUpdater updater) {
|
||||
replaceToSystemOut(element);
|
||||
@@ -81,12 +106,12 @@ public final class MigrateFromJavaLangIoInspection extends AbstractBaseJavaLocal
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean isIOPrint(@NotNull PsiMethodCallExpression expression) {
|
||||
private static boolean isIOPrint(@NotNull PsiMethodCallExpression expression) {
|
||||
if (!IO_PRINT.test(expression)) return false;
|
||||
return MigrateToJavaLangIoInspection.callIOAndSystemIdentical(expression.getArgumentList());
|
||||
}
|
||||
|
||||
public static boolean canBeIOPrint(@NotNull PsiMethodCallExpression expression) {
|
||||
private static boolean canBeIOPrint(@NotNull PsiMethodCallExpression expression) {
|
||||
if (!CAN_BE_IO_PRINT.test(expression)) return false;
|
||||
return MigrateToJavaLangIoInspection.callIOAndSystemIdentical(expression.getArgumentList());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user