[java-inspections] IDEA-346242 Add 'minimal java version' clause automatically to inspection descriptions, based on the required feature(s)

GitOrigin-RevId: 50a25148d4d36c46e9552b3123d1ef966b40a2c2
This commit is contained in:
Tagir Valeev
2024-02-15 15:28:00 +00:00
committed by intellij-monorepo-bot
parent a028674bdb
commit 64327f79d6
162 changed files with 730 additions and 427 deletions
@@ -622,3 +622,4 @@ intention.family.name.move.members.into.class=Move members into class
chooser.popup.title.select.class.to.move.members.to=Select Target Class
intention.family.name.move.members.to=Move members to {0}
inspection.name.can.be.replaced.with.long.hashcode=Standard 'hashCode()' method can be used
inspection.depends.on.the.java.feature=This inspection depends on the Java feature ''{0}'' which is available since Java {1}.
@@ -1,12 +1,47 @@
// Copyright 2000-2021 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.codeInspection;
import com.intellij.java.analysis.JavaAnalysisBundle;
import com.intellij.openapi.util.text.HtmlChunk;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiUtil;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Set;
public abstract class AbstractBaseJavaLocalInspectionTool extends LocalInspectionTool {
/**
* @return set of the features required for a given inspection. The inspection will not be launched on the files where
* the corresponding features are not available.
*/
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of();
}
@Override
public boolean isAvailableForFile(@NotNull PsiFile file) {
for (JavaFeature feature : requiredFeatures()) {
if (!PsiUtil.isAvailable(feature, file)) return false;
}
return true;
}
@Override
public HtmlChunk getDescriptionAddendum() {
Set<JavaFeature> features = requiredFeatures();
JavaFeature feature = ContainerUtil.getOnlyItem(features);
if (feature != null) {
return HtmlChunk.text(JavaAnalysisBundle.message("inspection.depends.on.the.java.feature",
feature.getFeatureName(), feature.getMinimumLevel().getShortText()))
.wrapWith("p");
}
return HtmlChunk.empty();
}
/**
* Override this to report problems at method level.
*
@@ -64,6 +64,11 @@ public final class AnonymousCanBeLambdaInspection extends AbstractBaseJavaLocalI
JavaAnalysisBundle.message("report.when.interface.is.not.annotated.with.functional.interface")));
}
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.LAMBDA_EXPRESSIONS);
}
@NotNull
@Override
public PsiElementVisitor buildVisitor(@NotNull final ProblemsHolder holder, boolean isOnTheFly) {
@@ -10,13 +10,13 @@ import com.intellij.openapi.util.TextRange;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import java.util.Collections;
import java.util.Set;
import java.util.function.UnaryOperator;
public final class AnonymousHasLambdaAlternativeInspection extends AbstractBaseJavaLocalInspectionTool {
@@ -46,13 +46,14 @@ public final class AnonymousHasLambdaAlternativeInspection extends AbstractBaseJ
"new Thread(() -> {…})")
};
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.THREAD_LOCAL_WITH_INITIAL);
}
@NotNull
@Override
public PsiElementVisitor buildVisitor(@NotNull final ProblemsHolder holder, boolean isOnTheFly) {
@NotNull PsiFile context = holder.getFile();
if (!PsiUtil.isAvailable(JavaFeature.THREAD_LOCAL_WITH_INITIAL, context)) {
return PsiElementVisitor.EMPTY_VISITOR;
}
return new JavaElementVisitor() {
@Override
public void visitAnonymousClass(final @NotNull PsiAnonymousClass aClass) {
@@ -8,6 +8,7 @@ import com.intellij.modcommand.PsiUpdateModCommandQuickFix;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.TextRange;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.CodeStyleManager;
import com.intellij.psi.impl.PsiDiamondTypeUtil;
@@ -15,6 +16,8 @@ import com.intellij.psi.util.PsiTreeUtil;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
import java.util.Set;
public final class ExplicitTypeCanBeDiamondInspection extends AbstractBaseJavaLocalInspectionTool {
public static final Logger LOG = Logger.getInstance(ExplicitTypeCanBeDiamondInspection.class);
@@ -36,6 +39,11 @@ public final class ExplicitTypeCanBeDiamondInspection extends AbstractBaseJavaLo
return "Convert2Diamond";
}
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.DIAMOND_TYPES);
}
@NotNull
@Override
public PsiElementVisitor buildVisitor(@NotNull final ProblemsHolder holder, boolean isOnTheFly) {
@@ -10,12 +10,12 @@ import com.intellij.openapi.project.Project;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import java.util.Collection;
import java.util.Set;
public final class RedundantLambdaCodeBlockInspection extends AbstractBaseJavaLocalInspectionTool {
public static final Logger LOG = Logger.getInstance(RedundantLambdaCodeBlockInspection.class);
@@ -39,12 +39,13 @@ public final class RedundantLambdaCodeBlockInspection extends AbstractBaseJavaLo
return SHORT_NAME;
}
@NotNull
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.LAMBDA_EXPRESSIONS);
}
@Override
public PsiElementVisitor buildVisitor(@NotNull final ProblemsHolder holder, boolean isOnTheFly) {
if (!PsiUtil.isAvailable(JavaFeature.LAMBDA_EXPRESSIONS, holder.getFile())) {
return PsiElementVisitor.EMPTY_VISITOR;
}
public @NotNull PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
return new JavaElementVisitor() {
@Override
public void visitLambdaExpression(@NotNull PsiLambdaExpression expression) {
@@ -6,19 +6,21 @@ import com.intellij.java.analysis.JavaAnalysisBundle;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiTypesUtil;
import com.intellij.psi.util.PsiUtil;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
public final class VariableTypeCanBeExplicitInspection extends AbstractBaseJavaLocalInspectionTool implements CleanupLocalInspectionTool {
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.LVTI);
}
@NotNull
@Override
public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
if (!PsiUtil.isAvailable(JavaFeature.LVTI, holder.getFile())) { //var won't be parsed as inferred type otherwise
return PsiElementVisitor.EMPTY_VISITOR;
}
return new JavaElementVisitor() {
@Override
public void visitLambdaExpression(@NotNull PsiLambdaExpression expression) {
@@ -10,19 +10,21 @@ import com.intellij.openapi.project.Project;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
import com.siyeh.ig.psiutils.ParenthesesUtils;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
import java.util.Set;
public class Java8ListSortInspection extends AbstractBaseJavaLocalInspectionTool {
@NotNull
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.ADVANCED_COLLECTIONS_API);
}
@Override
public PsiElementVisitor buildVisitor(@NotNull final ProblemsHolder holder, boolean isOnTheFly) {
if (!PsiUtil.isAvailable(JavaFeature.ADVANCED_COLLECTIONS_API, holder.getFile())) {
return PsiElementVisitor.EMPTY_VISITOR;
}
public @NotNull PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
return new JavaElementVisitor() {
@Override
public void visitMethodCallExpression(@NotNull PsiMethodCallExpression expression) {
@@ -5,6 +5,7 @@ import com.intellij.codeInsight.intention.QuickFixFactory;
import com.intellij.codeInspection.AbstractBaseJavaLocalInspectionTool;
import com.intellij.codeInspection.ProblemsHolder;
import com.intellij.java.analysis.JavaAnalysisBundle;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
@@ -12,8 +13,14 @@ import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
import java.util.List;
import java.util.Set;
public final class Java9ModuleExportsPackageToItselfInspection extends AbstractBaseJavaLocalInspectionTool {
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.MODULES);
}
@NotNull
@Override
public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
@@ -5,12 +5,15 @@ import com.intellij.codeInspection.AbstractBaseJavaLocalInspectionTool;
import com.intellij.codeInspection.ProblemsHolder;
import com.intellij.codeInspection.options.OptPane;
import com.intellij.java.analysis.JavaAnalysisBundle;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.impl.light.LightJavaModule;
import com.intellij.psi.util.PsiUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Set;
import static com.intellij.codeInspection.options.OptPane.checkbox;
import static com.intellij.codeInspection.options.OptPane.pane;
@@ -33,6 +36,11 @@ public final class JavaRequiresAutoModuleInspection extends AbstractBaseJavaLoca
return "requires-transitive-automatic";
}
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.MODULES);
}
@NotNull
@Override
public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
@@ -161,7 +161,9 @@ public abstract class BaseInspection extends AbstractBaseJavaLocalInspectionTool
* Useful for e.g. a {@link com.intellij.psi.util.PsiUtil#isLanguageLevel5OrHigher(PsiElement)} check
* which will be the same for all elements in the specified file.
* When this method returns false, {@link #buildVisitor()} will not be called.
* @deprecated use {@link #isAvailableForFile(PsiFile)} or {@link #requiredFeatures()}
*/
@Deprecated
public boolean shouldInspect(@NotNull PsiFile file) {
return true;
}
@@ -17,8 +17,8 @@ package com.siyeh.ig.bugs;
import com.intellij.codeInsight.daemon.impl.quickfix.AddTypeCastFix;
import com.intellij.codeInspection.LocalQuickFix;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiUtil;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.BaseInspection;
import com.siyeh.ig.BaseInspectionVisitor;
@@ -26,6 +26,7 @@ import com.siyeh.ig.psiutils.TypeUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Set;
import java.util.function.Supplier;
public final class NullArgumentToVariableArgMethodInspection extends BaseInspection {
@@ -65,8 +66,8 @@ public final class NullArgumentToVariableArgMethodInspection extends BaseInspect
}
@Override
public boolean shouldInspect(@NotNull PsiFile file) {
return PsiUtil.isLanguageLevel5OrHigher(file);
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.VARARGS);
}
@Override
@@ -18,8 +18,8 @@ package com.siyeh.ig.bugs;
import com.intellij.codeInsight.AnnotationUtil;
import com.intellij.codeInsight.daemon.impl.quickfix.AddTypeCastFix;
import com.intellij.codeInspection.LocalQuickFix;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiUtil;
import com.intellij.psi.util.TypeConversionUtil;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.BaseInspection;
@@ -27,6 +27,8 @@ import com.siyeh.ig.BaseInspectionVisitor;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Set;
public final class PrimitiveArrayArgumentToVariableArgMethodInspection extends BaseInspection {
@NotNull
@@ -53,13 +55,12 @@ public final class PrimitiveArrayArgumentToVariableArgMethodInspection extends B
}
@Override
public boolean shouldInspect(@NotNull PsiFile file) {
return PsiUtil.isLanguageLevel5OrHigher(file);
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.VARARGS);
}
@Nullable
@Override
protected LocalQuickFix buildFix(Object... infos) {
protected @NotNull LocalQuickFix buildFix(Object... infos) {
final PsiExpression argument = (PsiExpression)infos[0];
final PsiType type = (PsiType)infos[1];
return LocalQuickFix.from(new AddTypeCastFix(type, argument));
@@ -24,6 +24,7 @@ import com.intellij.modcommand.ModPsiUpdater;
import com.intellij.modcommand.Presentation;
import com.intellij.modcommand.PsiUpdateModCommandAction;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
import com.intellij.psi.util.PsiTypesUtil;
@@ -36,8 +37,15 @@ import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Set;
public final class ReflectionForUnavailableAnnotationInspection extends BaseInspection {
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.ANNOTATIONS);
}
@Override
protected LocalQuickFix buildFix(Object... infos) {
if (infos.length == 1) {
@@ -6,14 +6,17 @@ import com.intellij.codeInsight.daemon.impl.analysis.LambdaHighlightingUtil;
import com.intellij.codeInsight.intention.AddAnnotationPsiFix;
import com.intellij.codeInspection.LocalQuickFix;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.CommonClassNames;
import com.intellij.psi.LambdaUtil;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiModifier;
import com.intellij.psi.util.MethodSignature;
import com.intellij.psi.util.PsiUtil;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.BaseInspection;
import com.siyeh.ig.BaseInspectionVisitor;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Set;
/**
* @author Bas Leijdekkers
@@ -27,13 +30,12 @@ public final class InterfaceMayBeAnnotatedFunctionalInspection extends BaseInspe
}
@Override
public boolean shouldInspect(@NotNull PsiFile file) {
return PsiUtil.isAvailable(JavaFeature.LAMBDA_EXPRESSIONS, file);
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.LAMBDA_EXPRESSIONS);
}
@Nullable
@Override
protected LocalQuickFix buildFix(Object... infos) {
protected @NotNull LocalQuickFix buildFix(Object... infos) {
final PsiClass aClass = (PsiClass)infos[0];
return new AddAnnotationPsiFix(CommonClassNames.JAVA_LANG_FUNCTIONAL_INTERFACE, aClass);
}
@@ -2,10 +2,11 @@
package com.siyeh.ig.classlayout;
import com.intellij.codeInspection.CleanupLocalInspectionTool;
import com.intellij.modcommand.ModPsiUpdater;
import com.intellij.codeInspection.LocalQuickFix;
import com.intellij.modcommand.ModPsiUpdater;
import com.intellij.modcommand.PsiUpdateModCommandQuickFix;
import com.intellij.openapi.project.Project;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.search.LocalSearchScope;
import com.intellij.psi.search.searches.ReferencesSearch;
@@ -17,9 +18,9 @@ import com.siyeh.ig.BaseInspectionVisitor;
import com.siyeh.ig.psiutils.UtilityClassUtil;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.List;
import java.util.Set;
/**
* @author Bas Leijdekkers
@@ -32,9 +33,8 @@ public final class UtilityClassCanBeEnumInspection extends BaseInspection implem
return InspectionGadgetsBundle.message("utility.class.code.can.be.enum.problem.descriptor");
}
@Nullable
@Override
protected LocalQuickFix buildFix(Object... infos) {
protected @NotNull LocalQuickFix buildFix(Object... infos) {
return new UtilityClassCanBeEnumFix();
}
@@ -84,8 +84,8 @@ public final class UtilityClassCanBeEnumInspection extends BaseInspection implem
}
@Override
public boolean shouldInspect(@NotNull PsiFile file) {
return PsiUtil.isLanguageLevel5OrHigher(file);
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.ENUMS);
}
private static class UtilityClassCanBeEnumVisitor extends BaseInspectionVisitor {
@@ -23,9 +23,13 @@ import org.jetbrains.annotations.Nullable;
import java.util.*;
public final class SwitchExpressionCanBePushedDownInspection extends AbstractBaseJavaLocalInspectionTool {
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.SWITCH_EXPRESSION);
}
@Override
public @NotNull PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
if (!PsiUtil.isAvailable(JavaFeature.SWITCH_EXPRESSION, holder.getFile())) return PsiElementVisitor.EMPTY_VISITOR;
return new JavaElementVisitor() {
@Override
public void visitSwitchExpression(@NotNull PsiSwitchExpression expression) {
@@ -15,14 +15,19 @@
*/
package com.siyeh.ig.inheritance;
import com.intellij.psi.*;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiJavaCodeReferenceElement;
import com.intellij.psi.PsiReferenceList;
import com.intellij.psi.util.InheritanceUtil;
import com.intellij.psi.util.PsiUtil;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.BaseInspection;
import com.siyeh.ig.BaseInspectionVisitor;
import org.jetbrains.annotations.NotNull;
import java.util.Set;
public final class ExtendsAnnotationInspection extends BaseInspection {
@Override
@@ -46,8 +51,8 @@ public final class ExtendsAnnotationInspection extends BaseInspection {
}
@Override
public boolean shouldInspect(@NotNull PsiFile file) {
return PsiUtil.isLanguageLevel5OrHigher(file);
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.ANNOTATIONS);
}
@Override
@@ -17,19 +17,19 @@ package com.siyeh.ig.javadoc;
import com.intellij.codeInspection.CleanupLocalInspectionTool;
import com.intellij.codeInspection.LocalQuickFix;
import com.intellij.modcommand.PsiUpdateModCommandQuickFix;
import com.intellij.codeInspection.options.OptPane;
import com.intellij.modcommand.ModPsiUpdater;
import com.intellij.modcommand.PsiUpdateModCommandQuickFix;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.NlsSafe;
import com.intellij.openapi.util.TextRange;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.javadoc.PsiDocComment;
import com.intellij.psi.javadoc.PsiDocTag;
import com.intellij.psi.javadoc.PsiDocTagValue;
import com.intellij.psi.javadoc.PsiDocToken;
import com.intellij.psi.util.PsiUtil;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.BaseInspection;
import com.siyeh.ig.BaseInspectionVisitor;
@@ -38,6 +38,8 @@ import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import java.util.Set;
import static com.intellij.codeInspection.options.OptPane.checkbox;
import static com.intellij.codeInspection.options.OptPane.pane;
@@ -146,8 +148,8 @@ final class MissingDeprecatedAnnotationInspection extends BaseInspection impleme
}
@Override
public boolean shouldInspect(@NotNull PsiFile file) {
return PsiUtil.isLanguageLevel5OrHigher(file);
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.ANNOTATIONS);
}
@Override
@@ -4,9 +4,9 @@ package com.siyeh.ig.migration;
import com.intellij.codeInsight.NullableNotNullManager;
import com.intellij.codeInspection.LocalQuickFix;
import com.intellij.codeInspection.options.OptPane;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.util.JavaPsiRecordUtil;
import com.intellij.psi.util.PsiUtil;
import com.siyeh.ig.BaseInspection;
import com.siyeh.ig.BaseInspectionVisitor;
import com.siyeh.ig.fixes.ConvertToVarargsMethodFix;
@@ -14,6 +14,8 @@ import com.siyeh.ig.psiutils.LibraryUtil;
import com.siyeh.ig.psiutils.MethodUtils;
import org.jetbrains.annotations.NotNull;
import java.util.Set;
import static com.intellij.codeInspection.options.OptPane.checkbox;
import static com.intellij.codeInspection.options.OptPane.pane;
import static com.siyeh.InspectionGadgetsBundle.message;
@@ -61,8 +63,8 @@ public final class MethodCanBeVariableArityMethodInspection extends BaseInspecti
}
@Override
public boolean shouldInspect(@NotNull PsiFile file) {
return PsiUtil.isLanguageLevel5OrHigher(file);
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.VARARGS);
}
@Override
@@ -209,8 +209,8 @@ public final class TryFinallyCanBeTryWithResourcesInspection extends BaseInspect
}
@Override
public boolean shouldInspect(@NotNull PsiFile file) {
return PsiUtil.isLanguageLevel7OrHigher(file);
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.TRY_WITH_RESOURCES);
}
@Override
@@ -18,7 +18,6 @@ import com.intellij.psi.javadoc.PsiDocComment;
import com.intellij.psi.search.LocalSearchScope;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
import com.intellij.refactoring.extractMethod.InputVariables;
import com.intellij.refactoring.util.duplicates.DuplicatesFinder;
import com.intellij.refactoring.util.duplicates.Match;
@@ -62,8 +61,8 @@ public final class TryWithIdenticalCatchesInspection extends BaseInspection {
}
@Override
public boolean shouldInspect(@NotNull PsiFile file) {
return PsiUtil.isAvailable(JavaFeature.MULTI_CATCH, file);
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.MULTI_CATCH);
}
@Override
@@ -7,7 +7,6 @@ import com.intellij.codeInspection.util.InspectionMessage;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.BaseInspection;
import com.siyeh.ig.BaseInspectionVisitor;
@@ -15,14 +14,16 @@ import com.siyeh.ig.psiutils.SerializationUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Set;
import static com.intellij.psi.CommonClassNames.JAVA_IO_SERIAL;
import static com.intellij.psi.PsiModifier.PRIVATE;
public final class MissingSerialAnnotationInspection extends BaseInspection {
@Override
public boolean shouldInspect(@NotNull PsiFile file) {
return PsiUtil.isAvailable(JavaFeature.SERIAL_ANNOTATION, file);
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.SERIAL_ANNOTATION);
}
@Override
@@ -7,13 +7,14 @@ import com.intellij.codeInspection.util.InspectionMessage;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.BaseInspection;
import com.siyeh.ig.BaseInspectionVisitor;
import com.siyeh.ig.psiutils.SerializationUtils;
import org.jetbrains.annotations.NotNull;
import java.util.Set;
public final class SerialAnnotationUsedOnWrongMemberInspection extends BaseInspection {
@Override
@@ -22,8 +23,8 @@ public final class SerialAnnotationUsedOnWrongMemberInspection extends BaseInspe
}
@Override
public boolean shouldInspect(@NotNull PsiFile file) {
return PsiUtil.isAvailable(JavaFeature.SERIAL_ANNOTATION, file);
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.SERIAL_ANNOTATION);
}
@Override
@@ -3,19 +3,23 @@ package com.siyeh.ig.serialization;
import com.intellij.codeInspection.util.InspectionMessage;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiUtil;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiField;
import com.intellij.psi.PsiMethod;
import com.intellij.psi.PsiModifier;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.BaseInspection;
import com.siyeh.ig.BaseInspectionVisitor;
import com.siyeh.ig.psiutils.SerializationUtils;
import org.jetbrains.annotations.NotNull;
import java.util.Set;
public final class SerializableRecordContainsIgnoredMembersInspection extends BaseInspection {
@Override
public boolean shouldInspect(@NotNull PsiFile file) {
return PsiUtil.isAvailable(JavaFeature.SERIAL_ANNOTATION, file);
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.RECORDS);
}
@Override
@@ -10,7 +10,6 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.TextRange;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiUtil;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.PsiReplacementUtil;
import com.siyeh.ig.psiutils.TypeUtils;
@@ -19,10 +18,16 @@ import it.unimi.dsi.fastutil.ints.IntList;
import one.util.streamex.IntStreamEx;
import org.jetbrains.annotations.NotNull;
import java.util.Set;
public final class EscapedSpaceInspection extends AbstractBaseJavaLocalInspectionTool implements CleanupLocalInspectionTool {
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.TEXT_BLOCK_ESCAPES);
}
@Override
public @NotNull PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
if (!PsiUtil.isAvailable(JavaFeature.TEXT_BLOCK_ESCAPES, holder.getFile())) return PsiElementVisitor.EMPTY_VISITOR;
return new JavaElementVisitor() {
@Override
public void visitFragment(@NotNull PsiFragment fragment) {
@@ -15,6 +15,7 @@
*/
package com.siyeh.ig.style;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.BaseInspection;
@@ -23,6 +24,8 @@ import com.siyeh.ig.psiutils.CollectionUtils;
import com.siyeh.ig.psiutils.TypeUtils;
import org.jetbrains.annotations.NotNull;
import java.util.Set;
/**
* @author Bas Leijdekkers
*/
@@ -36,6 +39,11 @@ public final class OptionalContainsCollectionInspection extends BaseInspection {
type instanceof PsiArrayType ? "optional.contains.array.problem.descriptor" : "optional.contains.collection.problem.descriptor");
}
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.STREAM_OPTIONAL);
}
@Override
public BaseInspectionVisitor buildVisitor() {
return new OptionalContainsCollectionVisitor();
@@ -4,6 +4,7 @@ package com.intellij.pom.java;
import com.intellij.core.JavaPsiBundle;
import com.intellij.openapi.projectRoots.JavaSdkVersion;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.NlsSafe;
import com.intellij.util.lang.JavaVersion;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.Nls;
@@ -167,6 +168,16 @@ public enum LanguageLevel {
return myVersion.feature;
}
/**
* @return short representation of the corresponding language level, like '8', or '21-preview'
*/
public @NlsSafe String getShortText() {
if (this == JDK_X) {
return "X";
}
return feature() + (isPreview() ? "-preview" : "");
}
/** See {@link JavaVersion#parse(String)} for supported formats. */
@Nullable
public static LanguageLevel parse(@Nullable String compilerComplianceOption) {
@@ -23,10 +23,7 @@ import com.siyeh.ig.psiutils.*;
import one.util.streamex.StreamEx;
import org.jetbrains.annotations.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Objects;
import java.util.*;
import static com.intellij.util.ObjectUtils.tryCast;
@@ -34,12 +31,13 @@ public final class ComparatorCombinatorsInspection extends AbstractBaseJavaLocal
private static final Logger LOG = Logger.getInstance(ComparatorCombinatorsInspection.class);
@NotNull
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.LAMBDA_EXPRESSIONS);
}
@Override
public PsiElementVisitor buildVisitor(@NotNull final ProblemsHolder holder, boolean isOnTheFly) {
if (!PsiUtil.isAvailable(JavaFeature.LAMBDA_EXPRESSIONS, holder.getFile())) {
return PsiElementVisitor.EMPTY_VISITOR;
}
public @NotNull PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
return new JavaElementVisitor() {
@Override
public void visitLambdaExpression(@NotNull PsiLambdaExpression lambda) {
@@ -16,7 +16,6 @@ import com.intellij.psi.*;
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
import com.intellij.psi.codeStyle.VariableKind;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
import com.intellij.util.containers.ContainerUtil;
import com.siyeh.ig.psiutils.*;
import org.jetbrains.annotations.Contract;
@@ -26,16 +25,18 @@ import org.jetbrains.annotations.Nullable;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import static com.intellij.util.ObjectUtils.tryCast;
public final class ConditionalCanBeOptionalInspection extends AbstractBaseJavaLocalInspectionTool {
@NotNull
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.STREAM_OPTIONAL);
}
@Override
public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
if (!PsiUtil.isAvailable(JavaFeature.STREAM_OPTIONAL, holder.getFile())) {
return PsiElementVisitor.EMPTY_VISITOR;
}
public @NotNull PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
return new JavaElementVisitor() {
@Override
public void visitConditionalExpression(@NotNull PsiConditionalExpression ternary) {
@@ -24,10 +24,14 @@ import java.util.*;
public final class DeconstructionCanBeUsedInspection extends AbstractBaseJavaLocalInspectionTool {
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.PATTERN_GUARDS_AND_RECORD_PATTERNS);
}
@NotNull
@Override
public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
if (!PsiUtil.isAvailable(JavaFeature.PATTERN_GUARDS_AND_RECORD_PATTERNS, holder.getFile())) return PsiElementVisitor.EMPTY_VISITOR;
return new JavaElementVisitor() {
@Override
public void visitInstanceOfExpression(@NotNull PsiInstanceOfExpression expression) {
@@ -4,7 +4,6 @@ package com.intellij.codeInspection;
import com.intellij.java.JavaBundle;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiUtil;
import com.siyeh.ig.callMatcher.CallMatcher;
import org.jetbrains.annotations.NotNull;
@@ -65,12 +64,13 @@ public final class EndlessStreamInspection extends AbstractBaseJavaLocalInspecti
CallMatcher.instanceCall("java.util.Random", "ints", "longs", "doubles").parameterCount(0)
);
@NotNull
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.STREAM_OPTIONAL);
}
@Override
public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
if (!PsiUtil.isAvailable(JavaFeature.STREAM_OPTIONAL, holder.getFile())) {
return PsiElementVisitor.EMPTY_VISITOR;
}
public @NotNull PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
return new JavaElementVisitor() {
@Override
public void visitMethodCallExpression(@NotNull PsiMethodCallExpression call) {
@@ -17,18 +17,23 @@ import com.intellij.psi.search.PsiSearchHelper;
import com.intellij.psi.search.searches.ReferencesSearch;
import com.intellij.psi.util.PsiMethodUtil;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
import com.intellij.util.ObjectUtils;
import com.siyeh.ig.psiutils.CommentTracker;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
import java.util.Set;
public final class ExplicitToImplicitClassMigrationInspection extends AbstractBaseJavaLocalInspectionTool {
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.IMPLICIT_CLASSES);
}
@NotNull
@Override
public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
if (!PsiUtil.isAvailable(JavaFeature.IMPLICIT_CLASSES, holder.getFile())) return PsiElementVisitor.EMPTY_VISITOR;
return new JavaElementVisitor() {
@Override
public void visitClass(@NotNull PsiClass aClass) {
@@ -16,9 +16,13 @@ import static com.intellij.util.ObjectUtils.tryCast;
public final class FillPermitsListInspection extends AbstractBaseJavaLocalInspectionTool {
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.SEALED_CLASSES);
}
@Override
public @NotNull PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
if (!PsiUtil.isAvailable(JavaFeature.SEALED_CLASSES, holder.getFile())) return PsiElementVisitor.EMPTY_VISITOR;
return new JavaElementVisitor() {
@Override
public void visitClass(@NotNull PsiClass psiClass) {
@@ -66,10 +66,14 @@ public final class ForEachWithRecordPatternCanBeUsedInspection extends AbstractB
);
}
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.RECORD_PATTERNS_IN_FOR_EACH);
}
@NotNull
@Override
public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
if (!PsiUtil.isAvailable(JavaFeature.RECORD_PATTERNS_IN_FOR_EACH, holder.getFile())) return PsiElementVisitor.EMPTY_VISITOR;
boolean useVar = IntroduceVariableBase.createVarType() || forceUseVar;
return new JavaElementVisitor() {
private final Options options = new Options(maxNotUsedComponentCounts,
@@ -10,18 +10,23 @@ import com.intellij.profile.codeInspection.InspectionProjectProfileManager;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiMethodUtil;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
import java.util.Set;
public final class ImplicitToExplicitClassBackwardMigrationInspection extends AbstractBaseJavaLocalInspectionTool {
public static final String SHORT_NAME =
InspectionProfileEntry.getShortName(ImplicitToExplicitClassBackwardMigrationInspection.class.getSimpleName());
getShortName(ImplicitToExplicitClassBackwardMigrationInspection.class.getSimpleName());
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.IMPLICIT_CLASSES);
}
@NotNull
@Override
public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
if (!PsiUtil.isAvailable(JavaFeature.IMPLICIT_CLASSES, holder.getFile())) return PsiElementVisitor.EMPTY_VISITOR;
return new JavaElementVisitor() {
@Override
public void visitImplicitClass(@NotNull PsiImplicitClass aClass) {
@@ -15,7 +15,6 @@ import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.PsiLiteralExpression;
import com.intellij.psi.util.PsiLiteralUtil;
import com.intellij.psi.util.PsiUtil;
import com.intellij.refactoring.util.CommonRefactoringUtil;
import com.intellij.util.SmartList;
import org.jetbrains.annotations.NotNull;
@@ -23,13 +22,18 @@ import org.jetbrains.annotations.Nullable;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
import static com.intellij.util.ObjectUtils.tryCast;
public final class InconsistentTextBlockIndentInspection extends AbstractBaseJavaLocalInspectionTool {
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.TEXT_BLOCKS);
}
@Override
public @NotNull PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
if (!PsiUtil.isAvailable(JavaFeature.TEXT_BLOCKS, holder.getFile())) return PsiElementVisitor.EMPTY_VISITOR;
return new JavaElementVisitor() {
@Override
public void visitLiteralExpression(@NotNull PsiLiteralExpression expression) {
@@ -4,12 +4,12 @@ package com.intellij.codeInspection;
import com.intellij.java.JavaBundle;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiUtil;
import com.siyeh.ig.callMatcher.CallMatcher;
import com.siyeh.ig.psiutils.MethodCallUtils;
import org.jetbrains.annotations.NotNull;
import java.util.Objects;
import java.util.Set;
public final class MappingBeforeCountInspection extends AbstractBaseJavaLocalInspectionTool {
private static final CallMatcher STREAM_COUNT =
@@ -19,11 +19,15 @@ public final class MappingBeforeCountInspection extends AbstractBaseJavaLocalIns
CallMatcher.instanceCall(CommonClassNames.JAVA_UTIL_STREAM_BASE_STREAM, "map", "mapToInt", "mapToLong", "mapToDouble", "mapToObj", "peek").parameterCount(1),
CallMatcher.instanceCall(CommonClassNames.JAVA_UTIL_STREAM_BASE_STREAM, "boxed", "asLongStream", "asDoubleStream").parameterCount(0)
);
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.STREAM_OPTIONAL);
}
@Override
@NotNull
public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
if (!PsiUtil.isAvailable(JavaFeature.STREAM_OPTIONAL, holder.getFile())) return PsiElementVisitor.EMPTY_VISITOR;
return new JavaElementVisitor() {
@Override
public void visitMethodCallExpression(@NotNull PsiMethodCallExpression call) {
@@ -8,7 +8,6 @@ import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.PsiAnnotation.TargetType;
import com.intellij.psi.util.JavaPsiRecordUtil;
import com.intellij.psi.util.PsiUtil;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
@@ -21,12 +20,14 @@ public final class MeaninglessRecordAnnotationInspection extends AbstractBaseJav
TargetType.PARAMETER, TargetType.TYPE_USE);
private static final Set<TargetType> ALWAYS_USEFUL_RECORD_TARGETS =
EnumSet.of(TargetType.RECORD_COMPONENT, TargetType.FIELD, TargetType.TYPE_USE);
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.RECORDS);
}
@Override
public @NotNull PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
if (!PsiUtil.isAvailable(JavaFeature.RECORDS, holder.getFile())) {
return PsiElementVisitor.EMPTY_VISITOR;
}
return new JavaElementVisitor() {
@Override
public void visitRecordComponent(@NotNull PsiRecordComponent recordComponent) {
@@ -10,6 +10,7 @@ import com.intellij.modcommand.ModPsiUpdater;
import com.intellij.modcommand.PsiUpdateModCommandQuickFix;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.pom.java.JavaFeature;
import com.intellij.pom.java.LanguageLevel;
import com.intellij.psi.*;
import com.intellij.psi.tree.IElementType;
@@ -24,6 +25,8 @@ import one.util.streamex.StreamEx;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
import java.util.Set;
import static com.intellij.codeInspection.options.OptPane.checkbox;
import static com.intellij.codeInspection.options.OptPane.pane;
@@ -39,6 +42,11 @@ public final class OptionalAssignedToNullInspection extends AbstractBaseJavaLoca
checkbox("WARN_ON_COMPARISON", JavaBundle.message("inspection.null.value.for.optional.option.comparisons")));
}
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.STREAM_OPTIONAL);
}
@NotNull
@Override
public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
@@ -28,6 +28,7 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Objects;
import java.util.Set;
import static com.intellij.codeInsight.PsiEquivalenceUtil.areElementsEquivalent;
@@ -58,12 +59,13 @@ public final class OptionalIsPresentInspection extends AbstractBaseJavaLocalInsp
}
}
@NotNull
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.STREAM_OPTIONAL);
}
@Override
public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
if (!PsiUtil.isAvailable(JavaFeature.STREAM_OPTIONAL, holder.getFile())) {
return PsiElementVisitor.EMPTY_VISITOR;
}
public @NotNull PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
return new JavaElementVisitor() {
@Override
public void visitConditionalExpression(@NotNull PsiConditionalExpression expression) {
@@ -24,12 +24,18 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.List;
import java.util.Set;
public final class PatternVariableCanBeUsedInspection extends AbstractBaseJavaLocalInspectionTool implements CleanupLocalInspectionTool {
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.PATTERNS);
}
@NotNull
@Override
public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
if (!PsiUtil.isAvailable(JavaFeature.PATTERNS, holder.getFile())) return PsiElementVisitor.EMPTY_VISITOR;
return new JavaElementVisitor() {
@Override
public void visitMethodCallExpression(@NotNull PsiMethodCallExpression call) {
@@ -6,15 +6,18 @@ import com.intellij.openapi.util.TextRange;
import com.intellij.pom.java.JavaFeature;
import com.intellij.profile.codeInspection.InspectionProjectProfileManager;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiUtil;
import org.jetbrains.annotations.NotNull;
import java.util.Set;
public final class RecordCanBeClassInspection extends AbstractBaseJavaLocalInspectionTool {
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.RECORDS);
}
@Override
public @NotNull PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
if (!PsiUtil.isAvailable(JavaFeature.RECORDS, holder.getFile())) {
return PsiElementVisitor.EMPTY_VISITOR;
}
return new JavaElementVisitor() {
@Override
public void visitClass(@NotNull PsiClass aClass) {
@@ -31,11 +31,13 @@ import java.util.Objects;
import java.util.Set;
public final class RedundantRecordConstructorInspection extends AbstractBaseJavaLocalInspectionTool {
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.RECORDS);
}
@Override
public @NotNull PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
if (!PsiUtil.isAvailable(JavaFeature.RECORDS, holder.getFile())) {
return PsiElementVisitor.EMPTY_VISITOR;
}
return new JavaElementVisitor() {
@Override
public void visitMethod(@NotNull PsiMethod method) {
@@ -95,12 +95,13 @@ public final class RedundantStreamOptionalCallInspection extends AbstractBaseJav
checkbox("USELESS_BOXING_IN_STREAM_MAP", JavaBundle.message("inspection.redundant.stream.optional.call.option.streamboxing")));
}
@NotNull
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.STREAM_OPTIONAL);
}
@Override
public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
if (!PsiUtil.isAvailable(JavaFeature.STREAM_OPTIONAL, holder.getFile())) {
return PsiElementVisitor.EMPTY_VISITOR;
}
public @NotNull PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
return new JavaElementVisitor() {
@Override
public void visitMethodCallExpression(@NotNull PsiMethodCallExpression call) {
@@ -26,6 +26,8 @@ import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Set;
import static com.siyeh.ig.psiutils.MethodCallUtils.getQualifierMethodCall;
public final class ReplaceInefficientStreamCountInspection extends AbstractBaseJavaLocalInspectionTool {
@@ -62,12 +64,13 @@ public final class ReplaceInefficientStreamCountInspection extends AbstractBaseJ
return true;
}
@NotNull
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.STREAM_OPTIONAL);
}
@Override
public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
if (!PsiUtil.isAvailable(JavaFeature.STREAM_OPTIONAL, holder.getFile())) {
return PsiElementVisitor.EMPTY_VISITOR;
}
public @NotNull PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
return new JavaElementVisitor() {
@Override
@@ -17,6 +17,7 @@ import one.util.streamex.StreamEx;
import org.jetbrains.annotations.NotNull;
import java.util.Objects;
import java.util.Set;
public final class SequencedCollectionMethodCanBeUsedInspection extends AbstractBaseJavaLocalInspectionTool {
private static final CallMatcher LIST_GET_REMOVE = CallMatcher.instanceCall(CommonClassNames.JAVA_UTIL_LIST, "get", "remove")
@@ -28,11 +29,13 @@ public final class SequencedCollectionMethodCanBeUsedInspection extends Abstract
private static final CallMatcher COLLECTION_ITERATOR = CallMatcher.instanceCall("java.util.Collection", "iterator")
.parameterCount(0);
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.SEQUENCED_COLLECTIONS);
}
@Override
public @NotNull PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
if (!PsiUtil.isAvailable(JavaFeature.SEQUENCED_COLLECTIONS, holder.getFile())) {
return PsiElementVisitor.EMPTY_VISITOR;
}
return new JavaElementVisitor() {
@Override
public void visitMethodCallExpression(@NotNull PsiMethodCallExpression call) {
@@ -21,13 +21,16 @@ import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Set;
public final class SimplifyCollectorInspection extends AbstractBaseJavaLocalInspectionTool {
@NotNull
@Override
public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
if (!PsiUtil.isAvailable(JavaFeature.STREAM_OPTIONAL, holder.getFile())) {
return PsiElementVisitor.EMPTY_VISITOR;
}
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.STREAM_OPTIONAL);
}
@Override
public @NotNull PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
return new JavaElementVisitor() {
@Override
@@ -10,6 +10,7 @@ import com.intellij.java.JavaBundle;
import com.intellij.modcommand.ModPsiUpdater;
import com.intellij.modcommand.PsiUpdateModCommandQuickFix;
import com.intellij.openapi.project.Project;
import com.intellij.pom.java.JavaFeature;
import com.intellij.pom.java.LanguageLevel;
import com.intellij.psi.*;
import com.intellij.psi.search.LocalSearchScope;
@@ -28,10 +29,7 @@ import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.*;
import java.util.function.Function;
import java.util.regex.Pattern;
@@ -102,14 +100,15 @@ public final class SimplifyOptionalCallChainsInspection extends AbstractBaseJava
}
}
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.STREAM_OPTIONAL);
}
@NotNull
@Override
public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
LanguageLevel level = PsiUtil.getLanguageLevel(holder.getFile());
if (level.isLessThan(LanguageLevel.JDK_1_8)) {
return PsiElementVisitor.EMPTY_VISITOR;
}
return new OptionalChainVisitor(level) {
return new OptionalChainVisitor(PsiUtil.getLanguageLevel(holder.getFile())) {
@Override
protected void handleSimplification(@NotNull PsiMethodCallExpression call, @NotNull OptionalSimplificationFix fix) {
PsiElement element = call.getMethodExpression().getReferenceNameElement();
@@ -149,12 +149,13 @@ public final class SimplifyStreamApiCallChainsInspection extends AbstractBaseJav
return true;
}
@NotNull
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.STREAM_OPTIONAL);
}
@Override
public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
if (!PsiUtil.isAvailable(JavaFeature.STREAM_OPTIONAL, holder.getFile())) {
return PsiElementVisitor.EMPTY_VISITOR;
}
public @NotNull PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
return new JavaElementVisitor() {
@Override
@@ -20,14 +20,19 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.List;
import java.util.Set;
import static com.intellij.util.ObjectUtils.tryCast;
public final class StringTemplateMigrationInspection extends AbstractBaseJavaLocalInspectionTool {
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.STRING_TEMPLATES);
}
@NotNull
@Override
public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
if (!PsiUtil.isAvailable(JavaFeature.STRING_TEMPLATES, holder.getFile())) return PsiElementVisitor.EMPTY_VISITOR;
return new JavaElementVisitor() {
@Override
public void visitPolyadicExpression(@NotNull PsiPolyadicExpression expression) {
@@ -5,6 +5,7 @@ import com.intellij.java.JavaBundle;
import com.intellij.modcommand.ModPsiUpdater;
import com.intellij.modcommand.PsiUpdateModCommandQuickFix;
import com.intellij.openapi.project.Project;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiUtil;
import com.intellij.util.ArrayUtil;
@@ -14,7 +15,14 @@ import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.java.generate.psi.PsiAdapter;
import java.util.Set;
public final class SuspiciousTernaryOperatorInVarargsCallInspection extends AbstractBaseJavaLocalInspectionTool {
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.VARARGS);
}
@NotNull
@Override
public PsiElementVisitor buildVisitor(@NotNull final ProblemsHolder holder, boolean isOnTheFly) {
@@ -8,6 +8,7 @@ import com.intellij.modcommand.ModPsiUpdater;
import com.intellij.modcommand.PsiUpdateModCommandQuickFix;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.CodeStyleManager;
import com.intellij.psi.codeStyle.CodeStyleSettings;
@@ -16,11 +17,16 @@ import com.siyeh.ig.psiutils.CommentTracker;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
import java.util.Set;
import java.util.StringJoiner;
import static com.intellij.util.ObjectUtils.tryCast;
public final class TextBlockBackwardMigrationInspection extends AbstractBaseJavaLocalInspectionTool {
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.TEXT_BLOCKS);
}
@NotNull
@Override
@@ -21,6 +21,8 @@ import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Set;
import static com.intellij.codeInspection.options.OptPane.checkbox;
import static com.intellij.codeInspection.options.OptPane.pane;
import static com.intellij.util.ObjectUtils.tryCast;
@@ -35,10 +37,14 @@ public final class TextBlockMigrationInspection extends AbstractBaseJavaLocalIns
checkbox("mySuggestLiteralReplacement", JavaBundle.message("inspection.text.block.migration.suggest.literal.replacement")));
}
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.TEXT_BLOCKS);
}
@NotNull
@Override
public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
if (!PsiUtil.isAvailable(JavaFeature.TEXT_BLOCKS, holder.getFile())) return PsiElementVisitor.EMPTY_VISITOR;
return new JavaElementVisitor() {
@Override
public void visitPolyadicExpression(@NotNull PsiPolyadicExpression expression) {
@@ -13,18 +13,23 @@ import com.intellij.psi.*;
import com.intellij.psi.codeStyle.CodeStyleManager;
import com.intellij.psi.impl.source.tree.java.PsiFragmentImpl;
import com.intellij.psi.util.PsiLiteralUtil;
import com.intellij.psi.util.PsiUtil;
import com.siyeh.ig.PsiReplacementUtil;
import org.jetbrains.annotations.NotNull;
import java.util.List;
import java.util.Set;
import java.util.function.Function;
public final class TrailingWhitespacesInTextBlockInspection extends AbstractBaseJavaLocalInspectionTool {
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.TEXT_BLOCKS);
}
@Override
public @NotNull PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
if (!PsiUtil.isAvailable(JavaFeature.TEXT_BLOCKS, holder.getFile())) return PsiElementVisitor.EMPTY_VISITOR;
return new JavaElementVisitor() {
@Override
public void visitTemplate(@NotNull PsiTemplate template) {
@@ -13,9 +13,7 @@ import com.intellij.openapi.util.text.HtmlChunk;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.PsiAnnotation;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiIdentifier;
import com.intellij.psi.util.PsiUtil;
import com.intellij.util.ObjectUtils;
import com.intellij.util.SmartList;
import com.siyeh.ig.BaseInspection;
@@ -26,6 +24,7 @@ import org.jetbrains.annotations.TestOnly;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import static com.intellij.codeInspection.options.OptPane.*;
@@ -47,8 +46,8 @@ public final class ClassCanBeRecordInspection extends BaseInspection {
}
@Override
public boolean shouldInspect(@NotNull PsiFile file) {
return PsiUtil.isAvailable(JavaFeature.RECORDS, file);
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.RECORDS);
}
@Override
@@ -5,16 +5,23 @@ import com.intellij.codeInspection.AbstractBaseJavaLocalInspectionTool;
import com.intellij.codeInspection.LocalQuickFix;
import com.intellij.codeInspection.ProblemsHolder;
import com.intellij.codeInspection.dataFlow.java.anchor.JavaMethodReferenceArgumentAnchor;
import com.intellij.codeInspection.dataFlow.types.DfReferenceType;
import com.intellij.codeInspection.dataFlow.types.DfType;
import com.intellij.codeInspection.util.OptionalUtil;
import com.intellij.java.analysis.JavaAnalysisBundle;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiUtil;
import com.intellij.util.ArrayUtil;
import org.jetbrains.annotations.NotNull;
import java.util.Set;
public final class OptionalOfNullableMisuseInspection extends AbstractBaseJavaLocalInspectionTool {
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.STREAM_OPTIONAL);
}
@Override
public @NotNull PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
return new JavaElementVisitor() {
@@ -1,7 +1,7 @@
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.codeInspection.enhancedSwitch;
import com.intellij.codeInspection.LocalInspectionTool;
import com.intellij.codeInspection.AbstractBaseJavaLocalInspectionTool;
import com.intellij.codeInspection.ProblemsHolder;
import com.intellij.modcommand.ModPsiUpdater;
import com.intellij.modcommand.PsiUpdateModCommandQuickFix;
@@ -9,21 +9,23 @@ import com.intellij.openapi.project.Project;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
import com.siyeh.ig.psiutils.CommentTracker;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Set;
import static com.intellij.java.JavaBundle.message;
public final class RedundantLabeledSwitchRuleCodeBlockInspection extends LocalInspectionTool {
@NotNull
public final class RedundantLabeledSwitchRuleCodeBlockInspection extends AbstractBaseJavaLocalInspectionTool {
@Override
public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
if (!PsiUtil.isAvailable(JavaFeature.ENHANCED_SWITCH, holder.getFile())) {
return PsiElementVisitor.EMPTY_VISITOR;
}
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.ENHANCED_SWITCH);
}
@Override
public @NotNull PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
return new JavaElementVisitor() {
@Override
public void visitSwitchLabeledRuleStatement(@NotNull PsiSwitchLabeledRuleStatement statement) {
@@ -1,6 +1,7 @@
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.codeInspection.enhancedSwitch;
import com.intellij.codeInspection.AbstractBaseJavaLocalInspectionTool;
import com.intellij.codeInspection.LocalInspectionTool;
import com.intellij.codeInspection.ProblemsHolder;
import com.intellij.modcommand.ModPsiUpdater;
@@ -16,15 +17,18 @@ import com.siyeh.ig.psiutils.CommentTracker;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
import java.util.Set;
import static com.intellij.java.JavaBundle.message;
public final class SwitchLabeledRuleCanBeCodeBlockInspection extends LocalInspectionTool {
@NotNull
public final class SwitchLabeledRuleCanBeCodeBlockInspection extends AbstractBaseJavaLocalInspectionTool {
@Override
public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
if (!PsiUtil.isAvailable(JavaFeature.ENHANCED_SWITCH, holder.getFile())) {
return PsiElementVisitor.EMPTY_VISITOR;
}
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.ENHANCED_SWITCH);
}
@Override
public @NotNull PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
return new JavaElementVisitor() {
@Override
@@ -28,15 +28,18 @@ import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Set;
import static com.intellij.util.ObjectUtils.tryCast;
public class Java8CollectionRemoveIfInspection extends AbstractBaseJavaLocalInspectionTool {
@NotNull
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.ADVANCED_COLLECTIONS_API);
}
@Override
public PsiElementVisitor buildVisitor(@NotNull final ProblemsHolder holder, boolean isOnTheFly) {
if (!PsiUtil.isAvailable(JavaFeature.ADVANCED_COLLECTIONS_API, holder.getFile())) {
return PsiElementVisitor.EMPTY_VISITOR;
}
public @NotNull PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
return new JavaElementVisitor() {
void handleIteratorLoop(PsiLoopStatement statement, PsiJavaToken endToken, IteratorDeclaration declaration) {
if (endToken == null || declaration == null || !declaration.isCollection()) return;
@@ -32,6 +32,7 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.List;
import java.util.Set;
import java.util.function.Predicate;
import static com.intellij.codeInspection.options.OptPane.checkbox;
@@ -49,12 +50,13 @@ public final class Java8ListReplaceAllInspection extends AbstractBaseJavaLocalIn
checkbox("dontWarnInCaseOfMultilineLambda", JavaBundle.message("checkbox.don.t.warn.in.case.of.multiline.lambda")));
}
@NotNull
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.ADVANCED_COLLECTIONS_API);
}
@Override
public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
if (!PsiUtil.isAvailable(JavaFeature.ADVANCED_COLLECTIONS_API, holder.getFile())) {
return PsiElementVisitor.EMPTY_VISITOR;
}
public @NotNull PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
return new JavaElementVisitor() {
private static boolean isRedundantOperation(PsiExpression replacement,
PsiStatement body,
@@ -24,7 +24,6 @@ import com.intellij.psi.codeStyle.JavaCodeStyleManager;
import com.intellij.psi.codeStyle.VariableKind;
import com.intellij.psi.search.searches.ReferencesSearch;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
import com.intellij.util.ObjectUtils;
import com.siyeh.ig.callMatcher.CallMatcher;
import com.siyeh.ig.psiutils.*;
@@ -36,6 +35,7 @@ import org.jetbrains.annotations.Nullable;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import static com.intellij.codeInspection.options.OptPane.checkbox;
import static com.intellij.codeInspection.options.OptPane.pane;
@@ -77,12 +77,13 @@ public final class Java8MapApiInspection extends AbstractBaseJavaLocalInspection
checkbox("mySideEffects", JavaBundle.message("checkbox.suggest.replacement.even.if.lambda.may.have.side.effects")));
}
@NotNull
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.ADVANCED_COLLECTIONS_API);
}
@Override
public PsiElementVisitor buildVisitor(@NotNull final ProblemsHolder holder, boolean isOnTheFly) {
if (!PsiUtil.isAvailable(JavaFeature.ADVANCED_COLLECTIONS_API, holder.getFile())) {
return PsiElementVisitor.EMPTY_VISITOR;
}
public @NotNull PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
return new JavaElementVisitor() {
@Override
public void visitConditionalExpression(@NotNull PsiConditionalExpression expression) {
@@ -29,6 +29,7 @@ import org.jetbrains.annotations.NotNull;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import static com.intellij.codeInspection.options.OptPane.checkbox;
import static com.intellij.codeInspection.options.OptPane.pane;
@@ -51,12 +52,13 @@ public final class Java8MapForEachInspection extends AbstractBaseJavaLocalInspec
checkbox("DO_NOT_HIGHLIGHT_LOOP", JavaBundle.message("inspection.map.foreach.option.no.loops")));
}
@NotNull
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.ADVANCED_COLLECTIONS_API);
}
@Override
public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
if (!PsiUtil.isAvailable(JavaFeature.ADVANCED_COLLECTIONS_API, holder.getFile())) {
return PsiElementVisitor.EMPTY_VISITOR;
}
public @NotNull PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
return new JavaElementVisitor() {
@Override
public void visitMethodCallExpression(@NotNull PsiMethodCallExpression call) {
@@ -2,7 +2,10 @@
package com.intellij.codeInspection.java18api;
import com.intellij.codeInsight.PsiEquivalenceUtil;
import com.intellij.codeInspection.*;
import com.intellij.codeInspection.AbstractBaseJavaLocalInspectionTool;
import com.intellij.codeInspection.LambdaCanBeMethodReferenceInspection;
import com.intellij.codeInspection.LocalQuickFix;
import com.intellij.codeInspection.ProblemsHolder;
import com.intellij.codeInspection.dataFlow.CommonDataflow;
import com.intellij.codeInspection.dataFlow.DfaNullability;
import com.intellij.codeInspection.dataFlow.java.anchor.JavaDfaAnchor;
@@ -17,6 +20,7 @@ import com.intellij.java.JavaBundle;
import com.intellij.modcommand.ModPsiUpdater;
import com.intellij.modcommand.PsiUpdateModCommandQuickFix;
import com.intellij.openapi.project.Project;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.VariableKind;
import com.intellij.psi.util.PsiTreeUtil;
@@ -29,8 +33,14 @@ import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
import java.util.Objects;
import java.util.Set;
public final class OptionalGetWithoutIsPresentInspection extends AbstractBaseJavaLocalInspectionTool {
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.STREAM_OPTIONAL);
}
@NotNull
@Override
public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
@@ -68,12 +68,13 @@ public final class Java9CollectionFactoryInspection extends AbstractBaseJavaLoca
checkbox("SUGGEST_MAP_OF_ENTRIES", JavaBundle.message("inspection.collection.factories.option.suggest.ofentries")));
}
@NotNull
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.COLLECTION_FACTORIES);
}
@Override
public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
if (!PsiUtil.isAvailable(JavaFeature.COLLECTION_FACTORIES, holder.getFile())) {
return PsiElementVisitor.EMPTY_VISITOR;
}
public @NotNull PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
return new JavaElementVisitor() {
@Override
public void visitMethodCallExpression(@NotNull PsiMethodCallExpression call) {
@@ -9,18 +9,24 @@ import com.intellij.java.JavaBundle;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.impl.source.resolve.reference.impl.JavaReflectionReferenceUtil;
import com.intellij.psi.util.PsiUtil;
import org.jetbrains.annotations.NotNull;
import java.util.Set;
import static com.intellij.codeInsight.daemon.impl.JavaServiceUtil.JAVA_UTIL_SERVICE_LOADER_METHODS;
import static com.intellij.psi.CommonClassNames.JAVA_UTIL_SERVICE_LOADER;
import static com.intellij.psi.impl.source.resolve.reference.impl.JavaReflectionReferenceUtil.ReflectiveType;
public final class Java9UndeclaredServiceUsageInspection extends AbstractBaseJavaLocalInspectionTool {
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.MODULES);
}
@NotNull
@Override
public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
if (!PsiUtil.isAvailable(JavaFeature.MODULES, holder.getFile())) return PsiElementVisitor.EMPTY_VISITOR;
return new JavaElementVisitor() {
@Override
public void visitMethodCallExpression(@NotNull PsiMethodCallExpression expression) {
@@ -14,7 +14,6 @@ import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
import com.intellij.util.ObjectUtils;
import com.intellij.util.containers.ContainerUtil;
import com.siyeh.ig.callMatcher.CallMatcher;
@@ -24,18 +23,21 @@ import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Set;
import static com.siyeh.ig.callMatcher.CallMatcher.instanceCall;
public final class ExcessiveLambdaUsageInspection extends AbstractBaseJavaLocalInspectionTool {
private static final CallMatcher LIST_REPLACE_ALL =
instanceCall(CommonClassNames.JAVA_UTIL_LIST, "replaceAll").parameterTypes("java.util.function.UnaryOperator");
@NotNull
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.LAMBDA_EXPRESSIONS);
}
@Override
public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
if (!PsiUtil.isAvailable(JavaFeature.LAMBDA_EXPRESSIONS, holder.getFile())) {
return PsiElementVisitor.EMPTY_VISITOR;
}
public @NotNull PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
return new JavaElementVisitor() {
@Override
public void visitLambdaExpression(@NotNull PsiLambdaExpression lambda) {
@@ -12,21 +12,23 @@ import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.impl.source.tree.java.PsiEmptyExpressionImpl;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
import com.intellij.util.ArrayUtil;
import com.intellij.util.ObjectUtils;
import com.siyeh.ig.psiutils.ExpressionUtils;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
import java.util.Set;
public final class ExplicitArgumentCanBeLambdaInspection extends AbstractBaseJavaLocalInspectionTool {
@NotNull
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.LAMBDA_EXPRESSIONS);
}
@Override
public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
if (!PsiUtil.isAvailable(JavaFeature.LAMBDA_EXPRESSIONS, holder.getFile())) {
return PsiElementVisitor.EMPTY_VISITOR;
}
public @NotNull PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
return new JavaElementVisitor() {
@Override
public void visitMethodCallExpression(@NotNull PsiMethodCallExpression call) {
@@ -1,12 +1,16 @@
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.codeInspection.miscGenerics;
import com.intellij.codeInspection.*;
import com.intellij.codeInspection.AbstractBaseJavaLocalInspectionTool;
import com.intellij.codeInspection.CommonQuickFixBundle;
import com.intellij.codeInspection.LocalQuickFix;
import com.intellij.codeInspection.ProblemsHolder;
import com.intellij.java.JavaBundle;
import com.intellij.modcommand.ModPsiUpdater;
import com.intellij.modcommand.PsiUpdateModCommandQuickFix;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.util.InheritanceUtil;
import com.intellij.psi.util.PsiUtil;
@@ -16,15 +20,19 @@ import com.siyeh.ig.psiutils.TypeUtils;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
import java.util.Set;
import static com.intellij.util.ObjectUtils.tryCast;
public final class IterableUsedAsVarargInspection extends AbstractBaseJavaLocalInspectionTool {
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.VARARGS);
}
@NotNull
@Override
public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
if (!PsiUtil.isLanguageLevel5OrHigher(holder.getFile())) {
return PsiElementVisitor.EMPTY_VISITOR;
}
return new JavaElementVisitor() {
@Override
public void visitMethodCallExpression(@NotNull PsiMethodCallExpression call) {
@@ -2,7 +2,10 @@
package com.intellij.codeInspection.miscGenerics;
import com.intellij.codeInsight.intention.HighPriorityAction;
import com.intellij.codeInspection.*;
import com.intellij.codeInspection.CommonQuickFixBundle;
import com.intellij.codeInspection.LocalQuickFix;
import com.intellij.codeInspection.ProblemDescriptor;
import com.intellij.codeInspection.RemoveRedundantTypeArgumentsUtil;
import com.intellij.codeInspection.options.OptPane;
import com.intellij.codeInspection.util.IntentionName;
import com.intellij.java.JavaBundle;
@@ -10,6 +13,7 @@ import com.intellij.modcommand.ModPsiUpdater;
import com.intellij.modcommand.PsiUpdateModCommandQuickFix;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Predicates;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.CodeStyleManager;
import com.intellij.psi.impl.PsiDiamondTypeUtil;
@@ -77,8 +81,8 @@ public final class RawUseOfParameterizedTypeInspection extends BaseInspection {
}
@Override
public boolean shouldInspect(@NotNull PsiFile file) {
return PsiUtil.isLanguageLevel5OrHigher(file);
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.GENERICS);
}
@Override
@@ -12,7 +12,6 @@ import com.intellij.openapi.project.Project;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
import com.intellij.util.containers.ContainerUtil;
import com.siyeh.ig.psiutils.CommentTracker;
import com.siyeh.ig.psiutils.ControlFlowUtils;
@@ -32,10 +31,14 @@ public final class OptionalToIfInspection extends AbstractBaseJavaLocalInspectio
private static final Set<String> SUPPORTED_TERMINALS = Set.of(
"get", "orElse", "ifPresent", "orElseGet", "ifPresentOrElse", "isPresent", "isEmpty", "stream", "orElseThrow");
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.STREAM_OPTIONAL);
}
@NotNull
@Override
public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
if (!PsiUtil.isAvailable(JavaFeature.STREAM_OPTIONAL, holder.getFile())) return PsiElementVisitor.EMPTY_VISITOR;
return new JavaElementVisitor() {
@Override
public void visitMethodCallExpression(@NotNull PsiMethodCallExpression terminalCall) {
@@ -12,34 +12,36 @@ import com.intellij.openapi.project.Project;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
import org.jetbrains.annotations.NotNull;
import java.util.List;
import java.util.Set;
import static com.intellij.psi.CommonClassNames.JAVA_LANG_CLASS;
import static com.intellij.psi.impl.source.resolve.reference.impl.JavaReflectionReferenceUtil.*;
public final class Java9ReflectionClassVisibilityInspection extends AbstractBaseJavaLocalInspectionTool {
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.MODULES);
}
@NotNull
@Override
public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
final PsiFile file = holder.getFile();
if (PsiUtil.isAvailable(JavaFeature.MODULES, file)) {
final PsiJavaModule javaModule = JavaModuleGraphUtil.findDescriptorByElement(file);
if (javaModule != null) {
return new JavaElementVisitor() {
@Override
public void visitMethodCallExpression(@NotNull PsiMethodCallExpression expression) {
super.visitMethodCallExpression(expression);
final PsiJavaModule javaModule = JavaModuleGraphUtil.findDescriptorByElement(holder.getFile());
if (javaModule != null) {
return new JavaElementVisitor() {
@Override
public void visitMethodCallExpression(@NotNull PsiMethodCallExpression expression) {
super.visitMethodCallExpression(expression);
if (isCallToMethod(expression, JAVA_LANG_CLASS, FOR_NAME) || isCallToMethod(expression, JAVA_LANG_CLASS_LOADER, LOAD_CLASS)) {
checkClassVisibility(expression, holder, javaModule);
}
if (isCallToMethod(expression, JAVA_LANG_CLASS, FOR_NAME) || isCallToMethod(expression, JAVA_LANG_CLASS_LOADER, LOAD_CLASS)) {
checkClassVisibility(expression, holder, javaModule);
}
};
}
}
};
}
return PsiElementVisitor.EMPTY_VISITOR;
@@ -24,22 +24,20 @@ import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.*;
import static com.intellij.codeInsight.intention.impl.StreamRefactoringUtil.getMapOperationName;
import static com.intellij.psi.CommonClassNames.JAVA_LANG_CHAR_SEQUENCE;
import static com.intellij.util.ObjectUtils.tryCast;
public final class FoldExpressionIntoStreamInspection extends AbstractBaseJavaLocalInspectionTool {
@NotNull
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.STREAM_OPTIONAL);
}
@Override
public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
if (!PsiUtil.isAvailable(JavaFeature.STREAM_OPTIONAL, holder.getFile())) {
return PsiElementVisitor.EMPTY_VISITOR;
}
public @NotNull PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
return new JavaElementVisitor() {
@Override
public void visitPolyadicExpression(@NotNull PsiPolyadicExpression expression) {
@@ -26,6 +26,7 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Objects;
import java.util.Set;
import static com.intellij.codeInspection.options.OptPane.checkbox;
import static com.intellij.codeInspection.options.OptPane.pane;
@@ -125,12 +126,13 @@ public final class FuseStreamOperationsInspection extends AbstractBaseJavaLocalI
checkbox("myStrictMode", JavaBundle.message("inspection.fuse.stream.operations.option.strict.mode")));
}
@NotNull
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.STREAM_OPTIONAL);
}
@Override
public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
if (!PsiUtil.isAvailable(JavaFeature.STREAM_OPTIONAL, holder.getFile())) {
return PsiElementVisitor.EMPTY_VISITOR;
}
public @NotNull PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
return new JavaElementVisitor() {
@Override
public void visitMethodCallExpression(@NotNull PsiMethodCallExpression call) {
@@ -7,9 +7,7 @@ import com.intellij.java.JavaBundle;
import com.intellij.lang.java.JavaLanguage;
import com.intellij.modcommand.*;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.FileIndexFacade;
import com.intellij.openapi.util.TextRange;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.pom.java.JavaFeature;
import com.intellij.profile.codeInspection.InspectionProjectProfileManager;
import com.intellij.psi.*;
@@ -23,6 +21,8 @@ import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Set;
import static com.intellij.util.ObjectUtils.tryCast;
public final class SimplifyForEachInspection extends AbstractBaseJavaLocalInspectionTool {
@@ -41,15 +41,14 @@ public final class SimplifyForEachInspection extends AbstractBaseJavaLocalInspec
return InspectionsBundle.message("group.names.language.level.specific.issues.and.migration.aids");
}
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.ADVANCED_COLLECTIONS_API);
}
@NotNull
@Override
public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
PsiFile file = holder.getFile();
VirtualFile virtualFile = file.getVirtualFile();
if (!PsiUtil.isAvailable(JavaFeature.ADVANCED_COLLECTIONS_API, file) || virtualFile == null ||
!FileIndexFacade.getInstance(holder.getProject()).isInSourceContent(virtualFile)) {
return PsiElementVisitor.EMPTY_VISITOR;
}
return new JavaElementVisitor() {
@Override
public void visitMethodCallExpression(@NotNull PsiMethodCallExpression call) {
@@ -36,6 +36,7 @@ import org.jetbrains.annotations.Nullable;
import java.util.Collection;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.function.Predicate;
import static com.intellij.codeInspection.options.OptPane.checkbox;
@@ -79,15 +80,14 @@ public final class StreamApiMigrationInspection extends AbstractBaseJavaLocalIns
return SHORT_NAME;
}
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.STREAM_OPTIONAL);
}
@NotNull
@Override
public PsiElementVisitor buildVisitor(@NotNull final ProblemsHolder holder, boolean isOnTheFly) {
PsiFile file = holder.getFile();
VirtualFile virtualFile = file.getVirtualFile();
if (!PsiUtil.isAvailable(JavaFeature.STREAM_OPTIONAL, file) || virtualFile == null ||
!FileIndexFacade.getInstance(holder.getProject()).isInSourceContent(virtualFile)) {
return PsiElementVisitor.EMPTY_VISITOR;
}
return new StreamApiMigrationVisitor(holder, isOnTheFly);
}
@@ -60,12 +60,13 @@ public final class StreamToLoopInspection extends AbstractBaseJavaLocalInspectio
checkbox("SUPPORT_UNKNOWN_SOURCES", JavaBundle.message("checkbox.iterate.unknown.stream.sources.via.stream.iterator")));
}
@NotNull
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.STREAM_OPTIONAL);
}
@Override
public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
if (!PsiUtil.isAvailable(JavaFeature.STREAM_OPTIONAL, holder.getFile())) {
return PsiElementVisitor.EMPTY_VISITOR;
}
public @NotNull PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
return new JavaElementVisitor() {
@Override
public void visitMethodCallExpression(@NotNull PsiMethodCallExpression call) {
@@ -2750,15 +2750,15 @@
bundle="messages.InspectionGadgetsBundle" key="inspection.pattern.variable.can.be.used.display.name"
groupBundle="messages.InspectionsBundle" groupKey="group.names.language.level.specific.issues.and.migration.aids16"
implementationClass="com.intellij.codeInspection.PatternVariableCanBeUsedInspection" cleanupTool="true"/>
<localInspection groupPathKey="group.path.names.java.language.level.specific.issues.and.migration.aids" language="JAVA"
<localInspection groupPath="Java" language="JAVA"
shortName="ForEachWithRecordPatternCanBeUsed" enabledByDefault="true" level="WARNING"
bundle="messages.InspectionGadgetsBundle" key="inspection.enhanced.for.with.record.pattern.can.be.used.display.name"
groupBundle="messages.InspectionsBundle" groupKey="group.names.language.level.specific.issues.and.migration.aids20"
groupBundle="messages.InspectionsBundle" groupKey="group.names.language.level.specific.issues.and.migration.aids"
implementationClass="com.intellij.codeInspection.ForEachWithRecordPatternCanBeUsedInspection" cleanupTool="true"/>
<localInspection groupPathKey="group.path.names.java.language.level.specific.issues.and.migration.aids" language="JAVA"
shortName="DeconstructionCanBeUsed" enabledByDefault="false" level="INFORMATION"
bundle="messages.InspectionGadgetsBundle" key="inspection.deconstruction.can.be.used.display.name"
groupBundle="messages.InspectionsBundle" groupKey="group.names.language.level.specific.issues.and.migration.aids19"
groupBundle="messages.InspectionsBundle" groupKey="group.names.language.level.specific.issues.and.migration.aids21"
implementationClass="com.intellij.codeInspection.DeconstructionCanBeUsedInspection" cleanupTool="false"/>
<localInspection groupPath="Java" language="JAVA" shortName="CastCanBeReplacedWithVariable" enabledByDefault="true" level="INFORMATION"
bundle="messages.InspectionGadgetsBundle" key="inspection.cast.can.be.replaced.with.variable.display.name"
@@ -10,6 +10,7 @@ import com.intellij.modcommand.PsiUpdateModCommandQuickFix;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.TextRange;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
import com.intellij.psi.util.PsiTreeUtil;
@@ -20,6 +21,7 @@ import org.jetbrains.annotations.NotNull;
import java.util.Collection;
import java.util.Collections;
import java.util.Set;
import static com.intellij.codeInspection.options.OptPane.checkbox;
import static com.intellij.codeInspection.options.OptPane.pane;
@@ -54,6 +56,11 @@ public final class AnonymousCanBeMethodReferenceInspection extends AbstractBaseJ
JavaAnalysisBundle.message("report.when.interface.is.not.annotated.with.functional.interface")));
}
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.METHOD_REFERENCES);
}
@NotNull
@Override
public PsiElementVisitor buildVisitor(@NotNull final ProblemsHolder holder, boolean isOnTheFly) {
@@ -51,10 +51,14 @@ public final class EnhancedSwitchMigrationInspection extends AbstractBaseJavaLoc
(statement, branches, isExhaustive, maxNumberStatementsForExpression) -> inspectReplacementWithStatement(statement, branches)
};
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.ENHANCED_SWITCH);
}
@NotNull
@Override
public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
if (!PsiUtil.isAvailable(JavaFeature.ENHANCED_SWITCH, holder.getFile())) return PsiElementVisitor.EMPTY_VISITOR;
return new JavaElementVisitor() {
@Override
public void visitSwitchStatement(@NotNull PsiSwitchStatement statement) {
@@ -21,6 +21,8 @@ import com.siyeh.ig.psiutils.*;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
import java.util.Set;
public final class LambdaCanBeMethodCallInspection extends AbstractBaseJavaLocalInspectionTool {
private static final CallMatcher PREDICATE_TEST = CallMatcher.instanceCall(
CommonClassNames.JAVA_UTIL_FUNCTION_PREDICATE, "test").parameterTypes("T");
@@ -28,12 +30,13 @@ public final class LambdaCanBeMethodCallInspection extends AbstractBaseJavaLocal
private static final CallMatcher MATCHER_MATCHES = CallMatcher.instanceCall("java.util.regex.Matcher", "matches").parameterCount(0);
private static final CallMatcher PATTERN_MATCHER = CallMatcher.instanceCall("java.util.regex.Pattern", "matcher").parameterCount(1);
@NotNull
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.LAMBDA_EXPRESSIONS);
}
@Override
public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
if (!PsiUtil.isAvailable(JavaFeature.LAMBDA_EXPRESSIONS, holder.getFile())) {
return PsiElementVisitor.EMPTY_VISITOR;
}
public @NotNull PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
boolean java11 = PsiUtil.getLanguageLevel(holder.getFile()).isAtLeast(LanguageLevel.JDK_11);
return new JavaElementVisitor() {
@Override
@@ -33,6 +33,7 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Collection;
import java.util.Set;
public final class LambdaCanBeMethodReferenceInspection extends AbstractBaseJavaLocalInspectionTool {
private static final Logger LOG = Logger.getInstance(LambdaCanBeMethodReferenceInspection.class);
@@ -56,12 +57,13 @@ public final class LambdaCanBeMethodReferenceInspection extends AbstractBaseJava
return "Convert2MethodRef";
}
@NotNull
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.LAMBDA_EXPRESSIONS);
}
@Override
public PsiElementVisitor buildVisitor(@NotNull final ProblemsHolder holder, boolean isOnTheFly) {
if (!PsiUtil.isAvailable(JavaFeature.LAMBDA_EXPRESSIONS, holder.getFile())) {
return PsiElementVisitor.EMPTY_VISITOR;
}
public @NotNull PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
return new JavaElementVisitor() {
@Override
public void visitLambdaExpression(@NotNull PsiLambdaExpression expression) {
@@ -18,14 +18,16 @@ import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.Objects;
import java.util.Set;
public final class RedundantExplicitVariableTypeInspection extends AbstractBaseJavaLocalInspectionTool {
@NotNull
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.LVTI);
}
@Override
public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
if (!PsiUtil.isAvailable(JavaFeature.LVTI, holder.getFile())) {
return PsiElementVisitor.EMPTY_VISITOR;
}
public @NotNull PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
return new JavaElementVisitor() {
@Override
public void visitLocalVariable(@NotNull PsiLocalVariable variable) {
@@ -12,11 +12,11 @@ import com.intellij.openapi.util.WriteExternalException;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiUtil;
import org.jdom.Element;
import org.jetbrains.annotations.NotNull;
import java.util.Collection;
import java.util.Set;
/**
* @author Dmitry Batkovich
@@ -32,12 +32,13 @@ public final class StaticPseudoFunctionalStyleMethodInspection extends AbstractB
public void writeSettings(@NotNull Element node) throws WriteExternalException {
}
@NotNull
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.STREAM_OPTIONAL);
}
@Override
public PsiElementVisitor buildVisitor(@NotNull final ProblemsHolder holder, boolean isOnTheFly) {
if (!PsiUtil.isAvailable(JavaFeature.STREAM_OPTIONAL, holder.getFile())) {
return PsiElementVisitor.EMPTY_VISITOR;
}
public @NotNull PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
return new JavaElementVisitor() {
@Override
public void visitMethodCallExpression(@NotNull PsiMethodCallExpression methodCallExpression) {
@@ -20,6 +20,7 @@ import com.intellij.codeInspection.LocalQuickFix;
import com.intellij.modcommand.ModPsiUpdater;
import com.intellij.modcommand.PsiUpdateModCommandQuickFix;
import com.intellij.openapi.project.Project;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
@@ -31,7 +32,8 @@ import com.siyeh.ig.psiutils.BoolUtils;
import com.siyeh.ig.psiutils.CommentTracker;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Set;
public final class AssertionCanBeIfInspection extends BaseInspection {
@@ -41,14 +43,18 @@ public final class AssertionCanBeIfInspection extends BaseInspection {
return getDisplayName();
}
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.ASSERTIONS);
}
@Override
public BaseInspectionVisitor buildVisitor() {
return new AssertToIfVisitor();
}
@Nullable
@Override
protected LocalQuickFix buildFix(Object... infos) {
protected @NotNull LocalQuickFix buildFix(Object... infos) {
return new AssertToIfFix();
}
@@ -4,15 +4,15 @@ package com.siyeh.ig.assignment;
import com.intellij.codeInspection.LocalQuickFix;
import com.intellij.codeInspection.options.OptPane;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiLambdaExpression;
import com.intellij.psi.PsiLambdaParameterType;
import com.intellij.psi.PsiParameter;
import com.intellij.psi.util.PsiUtil;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.fixes.ExtractParameterAsLocalVariableFix;
import org.jetbrains.annotations.NotNull;
import java.util.Set;
import static com.intellij.codeInspection.options.OptPane.checkbox;
import static com.intellij.codeInspection.options.OptPane.pane;
@@ -48,7 +48,7 @@ public final class AssignmentToLambdaParameterInspection extends BaseAssignmentT
}
@Override
public boolean shouldInspect(@NotNull PsiFile file) {
return PsiUtil.isAvailable(JavaFeature.LAMBDA_EXPRESSIONS, file);
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.LAMBDA_EXPRESSIONS);
}
}
@@ -24,6 +24,7 @@ import com.intellij.codeInspection.dataFlow.types.DfType;
import com.intellij.codeInspection.options.OptPane;
import com.intellij.codeInspection.util.InspectionMessage;
import com.intellij.openapi.util.TextRange;
import com.intellij.pom.java.JavaFeature;
import com.intellij.profile.codeInspection.InspectionProjectProfileManager;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiTreeUtil;
@@ -67,6 +68,11 @@ public final class EnumSwitchStatementWhichMissesCasesInspection extends Abstrac
checkbox("ignoreSwitchStatementsWithDefault", InspectionGadgetsBundle.message("enum.switch.statement.which.misses.cases.option")));
}
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.ENUMS);
}
@NotNull
@Override
public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
@@ -1,10 +1,11 @@
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.siyeh.ig.exceptions;
import com.intellij.modcommand.ModPsiUpdater;
import com.intellij.codeInspection.LocalQuickFix;
import com.intellij.modcommand.ModPsiUpdater;
import com.intellij.modcommand.PsiUpdateModCommandQuickFix;
import com.intellij.openapi.project.Project;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
import com.siyeh.InspectionGadgetsBundle;
@@ -16,6 +17,7 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Objects;
import java.util.Set;
public final class MultiCatchCanBeSplitInspection extends BaseInspection {
@@ -25,6 +27,11 @@ public final class MultiCatchCanBeSplitInspection extends BaseInspection {
return getDisplayName();
}
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.MULTI_CATCH);
}
@Override
public BaseInspectionVisitor buildVisitor() {
return new SplitMultiCatchVisitor();
@@ -12,6 +12,7 @@ import com.intellij.openapi.module.ModuleManager;
import com.intellij.openapi.module.impl.scopes.ModulesScope;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.ProjectRootModificationTracker;
import com.intellij.pom.java.JavaFeature;
import com.intellij.pom.java.LanguageLevel;
import com.intellij.psi.*;
import com.intellij.psi.search.GlobalSearchScope;
@@ -83,8 +84,8 @@ public class MissingOverrideAnnotationInspection extends BaseInspection implemen
}
@Override
public boolean shouldInspect(@NotNull PsiFile file) {
return PsiUtil.isLanguageLevel5OrHigher(file);
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.ANNOTATIONS);
}
@Override
@@ -7,6 +7,7 @@ import com.intellij.codeInspection.options.OptPane;
import com.intellij.modcommand.ModPsiUpdater;
import com.intellij.modcommand.PsiUpdateModCommandQuickFix;
import com.intellij.openapi.project.Project;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.JavaCodeStyleSettings;
import com.intellij.psi.codeStyle.VariableKind;
@@ -28,6 +29,7 @@ import org.jetbrains.annotations.Nullable;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
import java.util.function.Function;
import java.util.function.Predicate;
@@ -549,8 +551,8 @@ public final class ForCanBeForeachInspection extends BaseInspection {
}
@Override
public boolean shouldInspect(@NotNull PsiFile file) {
return PsiUtil.isLanguageLevel5OrHigher(file);
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.FOR_EACH);
}
@Override
@@ -15,10 +15,11 @@
*/
package com.siyeh.ig.migration;
import com.intellij.modcommand.ModPsiUpdater;
import com.intellij.codeInspection.LocalQuickFix;
import com.intellij.modcommand.ModPsiUpdater;
import com.intellij.modcommand.PsiUpdateModCommandQuickFix;
import com.intellij.openapi.project.Project;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.JavaCodeStyleSettings;
import com.intellij.psi.search.searches.ReferencesSearch;
@@ -39,6 +40,8 @@ import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Set;
public final class WhileCanBeForeachInspection extends BaseInspection {
@Override
@@ -65,8 +68,8 @@ public final class WhileCanBeForeachInspection extends BaseInspection {
}
@Override
public boolean shouldInspect(@NotNull PsiFile file) {
return PsiUtil.isLanguageLevel5OrHigher(file);
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.FOR_EACH);
}
@Override
@@ -14,7 +14,6 @@ import com.intellij.psi.*;
import com.intellij.psi.impl.source.tree.java.PsiEmptyExpressionImpl;
import com.intellij.psi.util.JavaPsiStringTemplateUtil;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
import com.intellij.util.ArrayUtil;
import com.intellij.util.ObjectUtils;
import com.siyeh.InspectionGadgetsBundle;
@@ -22,10 +21,16 @@ import com.siyeh.ig.psiutils.CommentTracker;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Set;
public final class RedundantEmbeddedExpressionInspection extends AbstractBaseJavaLocalInspectionTool implements CleanupLocalInspectionTool {
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.STRING_TEMPLATES);
}
@Override
public @NotNull PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
if (!PsiUtil.isAvailable(JavaFeature.STRING_TEMPLATES, holder.getFile())) return PsiElementVisitor.EMPTY_VISITOR;
return new JavaElementVisitor() {
@Override
public void visitTemplateExpression(@NotNull PsiTemplateExpression expression) {
@@ -13,8 +13,12 @@ import com.intellij.modcommand.ModCommandQuickFix;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.InvalidDataException;
import com.intellij.openapi.util.WriteExternalException;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.util.*;
import com.intellij.psi.util.InheritanceUtil;
import com.intellij.psi.util.PsiFormatUtil;
import com.intellij.psi.util.PsiFormatUtilBase;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.util.ArrayUtil;
import com.intellij.util.containers.ContainerUtil;
import com.siyeh.InspectionGadgetsBundle;
@@ -32,6 +36,7 @@ import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
import static com.intellij.codeInspection.options.OptPane.*;
import static com.intellij.util.ObjectUtils.tryCast;
@@ -176,8 +181,8 @@ public final class AutoCloseableResourceInspection extends ResourceInspection {
}
@Override
public boolean shouldInspect(@NotNull PsiFile file) {
return PsiUtil.isLanguageLevel7OrHigher(file);
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.TRY_WITH_RESOURCES);
}
@Override
@@ -8,9 +8,7 @@ import com.intellij.openapi.project.Project;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiExpression;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiLambdaExpression;
import com.intellij.psi.util.PsiUtil;
import com.intellij.util.CommonJavaRefactoringUtil;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.BaseInspection;
@@ -19,6 +17,8 @@ import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Set;
public final class LambdaBodyCanBeCodeBlockInspection extends BaseInspection {
@NotNull
@@ -28,8 +28,8 @@ public final class LambdaBodyCanBeCodeBlockInspection extends BaseInspection {
}
@Override
public boolean shouldInspect(@NotNull PsiFile file) {
return PsiUtil.isAvailable(JavaFeature.LAMBDA_EXPRESSIONS, file);
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.LAMBDA_EXPRESSIONS);
}
@Override
@@ -39,6 +39,11 @@ public final class LambdaCanBeReplacedWithAnonymousInspection extends BaseInspec
return getDisplayName();
}
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.LAMBDA_EXPRESSIONS);
}
@Override
public BaseInspectionVisitor buildVisitor() {
return new LambdaToAnonymousVisitor();
@@ -1,10 +1,11 @@
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.siyeh.ig.style;
import com.intellij.modcommand.ModPsiUpdater;
import com.intellij.codeInspection.LocalQuickFix;
import com.intellij.modcommand.ModPsiUpdater;
import com.intellij.modcommand.PsiUpdateModCommandQuickFix;
import com.intellij.openapi.project.Project;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
@@ -15,6 +16,8 @@ import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Set;
public final class LambdaParameterTypeCanBeSpecifiedInspection extends BaseInspection {
@Override
@@ -22,6 +25,11 @@ public final class LambdaParameterTypeCanBeSpecifiedInspection extends BaseInspe
return InspectionGadgetsBundle.message("lambda.parameter.type.can.be.specified.descriptor", infos);
}
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.LAMBDA_EXPRESSIONS);
}
@Override
public BaseInspectionVisitor buildVisitor() {
return new InferLambdaParameterTypeVisitor();
@@ -14,6 +14,7 @@ import com.intellij.openapi.application.WriteAction;
import com.intellij.openapi.command.CommandProcessor;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.project.Project;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiLambdaExpression;
import com.intellij.psi.PsiMethodReferenceExpression;
@@ -27,6 +28,8 @@ import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Set;
public final class MethodRefCanBeReplacedWithLambdaInspection extends BaseInspection {
@NotNull
@@ -35,6 +38,11 @@ public final class MethodRefCanBeReplacedWithLambdaInspection extends BaseInspec
return getDisplayName();
}
@Override
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.LAMBDA_EXPRESSIONS);
}
@Override
public BaseInspectionVisitor buildVisitor() {
return new MethodRefToLambdaVisitor();
@@ -17,8 +17,10 @@ package com.siyeh.ig.visibility;
import com.intellij.codeInspection.options.OptPane;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiUtil;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiLambdaExpression;
import com.intellij.psi.PsiParameter;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.BaseInspection;
import com.siyeh.ig.BaseInspectionVisitor;
@@ -26,6 +28,8 @@ import com.siyeh.ig.InspectionGadgetsFix;
import com.siyeh.ig.fixes.RenameFix;
import org.jetbrains.annotations.NotNull;
import java.util.Set;
import static com.intellij.codeInspection.options.OptPane.checkbox;
import static com.intellij.codeInspection.options.OptPane.pane;
@@ -64,8 +68,8 @@ public final class LambdaParameterHidingMemberVariableInspection extends BaseIns
}
@Override
public boolean shouldInspect(@NotNull PsiFile file) {
return PsiUtil.isAvailable(JavaFeature.LAMBDA_EXPRESSIONS, file);
public @NotNull Set<@NotNull JavaFeature> requiredFeatures() {
return Set.of(JavaFeature.LAMBDA_EXPRESSIONS);
}
@Override
@@ -23,7 +23,5 @@ Reports anonymous classes which can be replaced with method references.
<!-- tooltip end -->
<p>Use the <b>Report when interface is not annotated with @FunctionalInterface</b> option to enable this inspection for
interfaces which are not annotated with <code>@FunctionalInterface</code>.</p>
<p>This inspection only reports if the language level of the project or module is 8 or higher.</p>
</body>
</html>
@@ -49,7 +49,6 @@ Automatic implicit implementation of data-driven methods, such as <code>equals()
</ul>
<p>Use the <b>Suppress conversion if class is annotated by</b> list to exclude classes from conversion when annotated by annotations matching the specified patterns.
</p>
<p>This inspection only reports if the language level of the project or module is 16 or higher.</p>
<p><small>New in 2020.3</small></p>
</body>
</html>

Some files were not shown because too many files have changed in this diff Show More