From 87c2a93f10d7386e84d321fc00c048597e0c2b5c Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Wed, 7 Feb 2024 13:38:46 +0100 Subject: [PATCH] [java] IDEA-345355 Refactor HighlightingFeature (in progress) Remove JavaFeature.isFeatureSupported() in favor of isAvailable() Rename getLevel() into getMinimumLevel() Avoid use of getMinimumLevel() where possible Javadocs GitOrigin-RevId: 4354821d8cfcf88cc1c3830b0e3cb3f221a5c122 --- .../daemon/impl/analysis/HighlightUtil.java | 9 ++++---- .../impl/analysis/HighlightVisitorImpl.java | 12 +++++----- .../impl/analysis/HighlightingFeature.java | 2 +- ...onymousHasLambdaAlternativeInspection.java | 3 ++- .../java18api/Java8ListSortInspection.java | 4 ++-- .../TryWithIdenticalCatchesInspection.java | 2 +- .../ExplicitArrayFillingInspection.java | 2 +- .../Java8CollectionRemoveIfInspection.java | 4 ++-- .../Java8ListReplaceAllInspection.java | 4 ++-- .../java18api/Java8MapApiInspection.java | 2 +- .../java18api/Java8MapForEachInspection.java | 7 ++++-- .../StreamApiMigrationInspection.java | 2 +- .../ConvertRecordToClassFix.java | 2 +- ...PseudoFunctionalStyleMethodInspection.java | 2 +- .../com/intellij/pom/java/JavaFeature.java | 22 +++++++++++-------- .../inspections/GuavaInspection.java | 2 +- .../testFramework/JavaApiUsageGenerator.kt | 2 +- 17 files changed, 46 insertions(+), 37 deletions(-) diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java index 340636459060..f33530635568 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java @@ -3789,19 +3789,20 @@ public final class HighlightUtil { @NotNull private static LanguageLevel getApplicableLevel(@NotNull PsiFile file, @NotNull JavaFeature feature) { LanguageLevel standardLevel = feature.getStandardLevel(); - if (feature.getLevel().isPreview()) { + LanguageLevel featureLevel = feature.getMinimumLevel(); + if (featureLevel.isPreview()) { JavaSdkVersion sdkVersion = JavaSdkVersionUtil.getJavaSdkVersion(file); if (sdkVersion != null) { if (standardLevel != null && sdkVersion.isAtLeast(JavaSdkVersion.fromLanguageLevel(standardLevel))) { return standardLevel; } LanguageLevel previewLevel = sdkVersion.getMaxLanguageLevel().getPreviewLevel(); - if (previewLevel != null && previewLevel.isAtLeast(feature.getLevel())) { + if (previewLevel != null && previewLevel.isAtLeast(featureLevel)) { return previewLevel; } } } - return feature.getLevel(); + return featureLevel; } @Nullable @@ -3872,7 +3873,7 @@ public final class HighlightUtil { Module module = ModuleUtilCore.findModuleForPsiElement(file); if (module != null) { LanguageLevel moduleLanguageLevel = LanguageLevelUtil.getEffectiveLanguageLevel(module); - if (moduleLanguageLevel.isAtLeast(feature.getLevel()) && !feature.isLimited()) { + if (moduleLanguageLevel.isAtLeast(feature.getMinimumLevel()) && !feature.isLimited()) { for (FilePropertyPusher pusher : FilePropertyPusher.EP_NAME.getExtensionList()) { if (pusher instanceof JavaLanguageLevelPusher) { String newMessage = ((JavaLanguageLevelPusher)pusher).getInconsistencyLanguageLevelMessage(message, level, file); diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java index 71196953db5e..ea536fa2b4c0 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java @@ -249,7 +249,7 @@ public class HighlightVisitorImpl extends JavaElementVisitor implements Highligh myLanguageLevel = PsiUtil.getLanguageLevel(file); myJavaSdkVersion = ObjectUtils .notNull(JavaVersionService.getInstance().getJavaSdkVersion(file), JavaSdkVersion.fromLanguageLevel(myLanguageLevel)); - myJavaModule = myLanguageLevel.isAtLeast(JavaFeature.MODULES.getLevel()) ? JavaModuleGraphUtil.findDescriptorByElement(file) : null; + myJavaModule = JavaFeature.MODULES.isSufficient(myLanguageLevel) ? JavaModuleGraphUtil.findDescriptorByElement(file) : null; myPreviewFeatureVisitor = myLanguageLevel.isPreview() ? null : new PreviewFeatureUtil.PreviewFeatureVisitor(myLanguageLevel, myErrorSink); } @@ -1134,7 +1134,7 @@ public class HighlightVisitorImpl extends JavaElementVisitor implements Highligh public void visitPackageStatement(@NotNull PsiPackageStatement statement) { super.visitPackageStatement(statement); add(AnnotationsHighlightUtil.checkPackageAnnotationContainingFile(statement, myFile)); - if (myLanguageLevel.isAtLeast(JavaFeature.MODULES.getLevel())) { + if (JavaFeature.MODULES.isSufficient(myLanguageLevel)) { if (!hasErrorResults()) add(ModuleHighlightUtil.checkPackageStatement(statement, myFile, myJavaModule)); } if (!hasErrorResults()) add(HighlightImplicitClassUtil.checkPackageNotAllowedInImplicitClass(statement, myFile)); @@ -1958,7 +1958,7 @@ public class HighlightVisitorImpl extends JavaElementVisitor implements Highligh @Override public void visitRequiresStatement(@NotNull PsiRequiresStatement statement) { super.visitRequiresStatement(statement); - if (myLanguageLevel.isAtLeast(JavaFeature.MODULES.getLevel())) { + if (JavaFeature.MODULES.isSufficient(myLanguageLevel)) { if (!hasErrorResults()) add(ModuleHighlightUtil.checkModuleReference(statement)); if (!hasErrorResults() && myLanguageLevel.isAtLeast(LanguageLevel.JDK_10)) { ModuleHighlightUtil.checkModifiers(statement, myErrorSink); @@ -1969,7 +1969,7 @@ public class HighlightVisitorImpl extends JavaElementVisitor implements Highligh @Override public void visitPackageAccessibilityStatement(@NotNull PsiPackageAccessibilityStatement statement) { super.visitPackageAccessibilityStatement(statement); - if (myLanguageLevel.isAtLeast(JavaFeature.MODULES.getLevel())) { + if (JavaFeature.MODULES.isSufficient(myLanguageLevel)) { if (!hasErrorResults()) add(ModuleHighlightUtil.checkHostModuleStrength(statement)); if (!hasErrorResults()) add(ModuleHighlightUtil.checkPackageReference(statement, myFile)); if (!hasErrorResults()) ModuleHighlightUtil.checkPackageAccessTargets(statement, myErrorSink); @@ -1979,7 +1979,7 @@ public class HighlightVisitorImpl extends JavaElementVisitor implements Highligh @Override public void visitUsesStatement(@NotNull PsiUsesStatement statement) { super.visitUsesStatement(statement); - if (myLanguageLevel.isAtLeast(JavaFeature.MODULES.getLevel())) { + if (JavaFeature.MODULES.isSufficient(myLanguageLevel)) { if (!hasErrorResults()) add(ModuleHighlightUtil.checkServiceReference(statement.getClassReference())); } } @@ -1987,7 +1987,7 @@ public class HighlightVisitorImpl extends JavaElementVisitor implements Highligh @Override public void visitProvidesStatement(@NotNull PsiProvidesStatement statement) { super.visitProvidesStatement(statement); - if (myLanguageLevel.isAtLeast(JavaFeature.MODULES.getLevel())) { + if (JavaFeature.MODULES.isSufficient(myLanguageLevel)) { if (!hasErrorResults()) ModuleHighlightUtil.checkServiceImplementations(statement, myFile, myErrorSink); } } diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightingFeature.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightingFeature.java index 1393a6a7b33f..8cac11c4cda3 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightingFeature.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightingFeature.java @@ -61,7 +61,7 @@ public enum HighlightingFeature { } public LanguageLevel getLevel() { - return myFeature.getLevel(); + return myFeature.getMinimumLevel(); } /** diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/AnonymousHasLambdaAlternativeInspection.java b/java/java-analysis-impl/src/com/intellij/codeInspection/AnonymousHasLambdaAlternativeInspection.java index 72715fb8b6f1..3ec4779f099b 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/AnonymousHasLambdaAlternativeInspection.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/AnonymousHasLambdaAlternativeInspection.java @@ -48,7 +48,8 @@ public final class AnonymousHasLambdaAlternativeInspection extends AbstractBaseJ @NotNull @Override public PsiElementVisitor buildVisitor(@NotNull final ProblemsHolder holder, boolean isOnTheFly) { - if (!JavaFeature.THREAD_LOCAL_WITH_INITIAL.isFeatureSupported(holder.getFile())) { + @NotNull PsiFile context = holder.getFile(); + if (!JavaFeature.THREAD_LOCAL_WITH_INITIAL.isAvailable(context)) { return PsiElementVisitor.EMPTY_VISITOR; } return new JavaElementVisitor() { diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/java18api/Java8ListSortInspection.java b/java/java-analysis-impl/src/com/intellij/codeInspection/java18api/Java8ListSortInspection.java index 0d016e5a8948..ed455bc20edd 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/java18api/Java8ListSortInspection.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/java18api/Java8ListSortInspection.java @@ -4,8 +4,8 @@ package com.intellij.codeInspection.java18api; import com.intellij.codeInsight.daemon.QuickFixBundle; import com.intellij.codeInspection.AbstractBaseJavaLocalInspectionTool; import com.intellij.codeInspection.ProblemsHolder; -import com.intellij.modcommand.PsiUpdateModCommandQuickFix; 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.*; @@ -19,7 +19,7 @@ public class Java8ListSortInspection extends AbstractBaseJavaLocalInspectionTool @NotNull @Override public PsiElementVisitor buildVisitor(@NotNull final ProblemsHolder holder, boolean isOnTheFly) { - if (!JavaFeature.ADVANCED_COLLECTIONS_API.isFeatureSupported(holder.getFile())) { + if (!JavaFeature.ADVANCED_COLLECTIONS_API.isAvailable(holder.getFile())) { return PsiElementVisitor.EMPTY_VISITOR; } return new JavaElementVisitor() { diff --git a/java/java-analysis-impl/src/com/siyeh/ig/migration/TryWithIdenticalCatchesInspection.java b/java/java-analysis-impl/src/com/siyeh/ig/migration/TryWithIdenticalCatchesInspection.java index b4d2384fa6ad..33ad7c894dcd 100644 --- a/java/java-analysis-impl/src/com/siyeh/ig/migration/TryWithIdenticalCatchesInspection.java +++ b/java/java-analysis-impl/src/com/siyeh/ig/migration/TryWithIdenticalCatchesInspection.java @@ -62,7 +62,7 @@ public final class TryWithIdenticalCatchesInspection extends BaseInspection { @Override public boolean shouldInspect(@NotNull PsiFile file) { - return JavaFeature.MULTI_CATCH.isFeatureSupported(file); + return JavaFeature.MULTI_CATCH.isAvailable(file); } @Override diff --git a/java/java-impl-inspections/src/com/intellij/codeInspection/ExplicitArrayFillingInspection.java b/java/java-impl-inspections/src/com/intellij/codeInspection/ExplicitArrayFillingInspection.java index d115050629a2..fbb6e921d69c 100644 --- a/java/java-impl-inspections/src/com/intellij/codeInspection/ExplicitArrayFillingInspection.java +++ b/java/java-impl-inspections/src/com/intellij/codeInspection/ExplicitArrayFillingInspection.java @@ -76,7 +76,7 @@ public final class ExplicitArrayFillingInspection extends AbstractBaseJavaLocalI registerProblem(statement, false); return; } - if (!JavaFeature.ADVANCED_COLLECTIONS_API.isFeatureSupported(holder.getFile())) return; + if (!JavaFeature.ADVANCED_COLLECTIONS_API.isAvailable(holder.getFile())) return; if (!StreamApiUtil.isSupportedStreamElement(container.getElementType())) return; if (!LambdaGenerationUtil.canBeUncheckedLambda(rValue, Predicate.isEqual(loop.getCounter()))) return; registerProblem(statement, true); diff --git a/java/java-impl-inspections/src/com/intellij/codeInspection/java18api/Java8CollectionRemoveIfInspection.java b/java/java-impl-inspections/src/com/intellij/codeInspection/java18api/Java8CollectionRemoveIfInspection.java index 9df448d04f13..95173a1d802f 100644 --- a/java/java-impl-inspections/src/com/intellij/codeInspection/java18api/Java8CollectionRemoveIfInspection.java +++ b/java/java-impl-inspections/src/com/intellij/codeInspection/java18api/Java8CollectionRemoveIfInspection.java @@ -5,12 +5,12 @@ import com.intellij.codeInsight.daemon.QuickFixBundle; import com.intellij.codeInspection.AbstractBaseJavaLocalInspectionTool; import com.intellij.codeInspection.LambdaCanBeMethodReferenceInspection; import com.intellij.codeInspection.ProblemsHolder; -import com.intellij.modcommand.PsiUpdateModCommandQuickFix; import com.intellij.codeInspection.util.ForEachCollectionTraversal; import com.intellij.codeInspection.util.IterableTraversal; import com.intellij.codeInspection.util.IteratorDeclaration; import com.intellij.codeInspection.util.LambdaGenerationUtil; 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.*; @@ -34,7 +34,7 @@ public class Java8CollectionRemoveIfInspection extends AbstractBaseJavaLocalInsp @NotNull @Override public PsiElementVisitor buildVisitor(@NotNull final ProblemsHolder holder, boolean isOnTheFly) { - if (!JavaFeature.ADVANCED_COLLECTIONS_API.isFeatureSupported(holder.getFile())) { + if (!JavaFeature.ADVANCED_COLLECTIONS_API.isAvailable(holder.getFile())) { return PsiElementVisitor.EMPTY_VISITOR; } return new JavaElementVisitor() { diff --git a/java/java-impl-inspections/src/com/intellij/codeInspection/java18api/Java8ListReplaceAllInspection.java b/java/java-impl-inspections/src/com/intellij/codeInspection/java18api/Java8ListReplaceAllInspection.java index e01cd1cd87bf..6836701b7410 100644 --- a/java/java-impl-inspections/src/com/intellij/codeInspection/java18api/Java8ListReplaceAllInspection.java +++ b/java/java-impl-inspections/src/com/intellij/codeInspection/java18api/Java8ListReplaceAllInspection.java @@ -7,12 +7,12 @@ import com.intellij.codeInsight.daemon.impl.analysis.HighlightControlFlowUtil; import com.intellij.codeInspection.AbstractBaseJavaLocalInspectionTool; import com.intellij.codeInspection.LambdaCanBeMethodReferenceInspection; import com.intellij.codeInspection.ProblemsHolder; -import com.intellij.modcommand.PsiUpdateModCommandQuickFix; import com.intellij.codeInspection.options.OptPane; import com.intellij.codeInspection.util.IteratorDeclaration; import com.intellij.codeInspection.util.LambdaGenerationUtil; 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.*; @@ -52,7 +52,7 @@ public final class Java8ListReplaceAllInspection extends AbstractBaseJavaLocalIn @NotNull @Override public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) { - if (!JavaFeature.ADVANCED_COLLECTIONS_API.isFeatureSupported(holder.getFile())) { + if (!JavaFeature.ADVANCED_COLLECTIONS_API.isAvailable(holder.getFile())) { return PsiElementVisitor.EMPTY_VISITOR; } return new JavaElementVisitor() { diff --git a/java/java-impl-inspections/src/com/intellij/codeInspection/java18api/Java8MapApiInspection.java b/java/java-impl-inspections/src/com/intellij/codeInspection/java18api/Java8MapApiInspection.java index c0efc5edf9d8..1e24f10b1087 100644 --- a/java/java-impl-inspections/src/com/intellij/codeInspection/java18api/Java8MapApiInspection.java +++ b/java/java-impl-inspections/src/com/intellij/codeInspection/java18api/Java8MapApiInspection.java @@ -79,7 +79,7 @@ public final class Java8MapApiInspection extends AbstractBaseJavaLocalInspection @NotNull @Override public PsiElementVisitor buildVisitor(@NotNull final ProblemsHolder holder, boolean isOnTheFly) { - if (!JavaFeature.ADVANCED_COLLECTIONS_API.isFeatureSupported(holder.getFile())) { + if (!JavaFeature.ADVANCED_COLLECTIONS_API.isAvailable(holder.getFile())) { return PsiElementVisitor.EMPTY_VISITOR; } return new JavaElementVisitor() { diff --git a/java/java-impl-inspections/src/com/intellij/codeInspection/java18api/Java8MapForEachInspection.java b/java/java-impl-inspections/src/com/intellij/codeInspection/java18api/Java8MapForEachInspection.java index 04324e06eda6..b3e890056d0c 100644 --- a/java/java-impl-inspections/src/com/intellij/codeInspection/java18api/Java8MapForEachInspection.java +++ b/java/java-impl-inspections/src/com/intellij/codeInspection/java18api/Java8MapForEachInspection.java @@ -1,7 +1,10 @@ // 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.java18api; -import com.intellij.codeInspection.*; +import com.intellij.codeInspection.AbstractBaseJavaLocalInspectionTool; +import com.intellij.codeInspection.CommonQuickFixBundle; +import com.intellij.codeInspection.ProblemHighlightType; +import com.intellij.codeInspection.ProblemsHolder; import com.intellij.codeInspection.options.OptPane; import com.intellij.codeInspection.util.LambdaGenerationUtil; import com.intellij.java.JavaBundle; @@ -51,7 +54,7 @@ public final class Java8MapForEachInspection extends AbstractBaseJavaLocalInspec @NotNull @Override public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) { - if (!JavaFeature.ADVANCED_COLLECTIONS_API.isFeatureSupported(holder.getFile())) { + if (!JavaFeature.ADVANCED_COLLECTIONS_API.isAvailable(holder.getFile())) { return PsiElementVisitor.EMPTY_VISITOR; } return new JavaElementVisitor() { diff --git a/java/java-impl-inspections/src/com/intellij/codeInspection/streamMigration/StreamApiMigrationInspection.java b/java/java-impl-inspections/src/com/intellij/codeInspection/streamMigration/StreamApiMigrationInspection.java index 4c826af95309..b8f926d6afbd 100644 --- a/java/java-impl-inspections/src/com/intellij/codeInspection/streamMigration/StreamApiMigrationInspection.java +++ b/java/java-impl-inspections/src/com/intellij/codeInspection/streamMigration/StreamApiMigrationInspection.java @@ -84,7 +84,7 @@ public final class StreamApiMigrationInspection extends AbstractBaseJavaLocalIns public PsiElementVisitor buildVisitor(@NotNull final ProblemsHolder holder, boolean isOnTheFly) { PsiFile file = holder.getFile(); VirtualFile virtualFile = file.getVirtualFile(); - if (!JavaFeature.STREAMS.isFeatureSupported(file) || virtualFile == null || + if (!JavaFeature.STREAMS.isAvailable(file) || virtualFile == null || !FileIndexFacade.getInstance(holder.getProject()).isInSourceContent(virtualFile)) { return PsiElementVisitor.EMPTY_VISITOR; } diff --git a/java/java-impl/src/com/intellij/codeInspection/ConvertRecordToClassFix.java b/java/java-impl/src/com/intellij/codeInspection/ConvertRecordToClassFix.java index 9d0352db0b1e..ecd9a3b1dabb 100644 --- a/java/java-impl/src/com/intellij/codeInspection/ConvertRecordToClassFix.java +++ b/java/java-impl/src/com/intellij/codeInspection/ConvertRecordToClassFix.java @@ -326,7 +326,7 @@ public class ConvertRecordToClassFix extends PsiUpdateModCommandAction