From a35bbc7c9ce43c75bd8bd1028a84d43cdbcb6091 Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Mon, 9 Dec 2024 14:41:59 +0100 Subject: [PATCH] [java-inspections] Preview feature warning: limit highlighting to method name Fixes IDEA-362013 Stream.of should not be highlighted because it's not a preview feature (cherry picked from commit 0818188d2e5ae25916c0433dfe976c808eebf869) IJ-CR-151174 GitOrigin-RevId: c81154ec031a4da1ef432831628fe93537ce599b --- .../preview/PreviewFeatureInspection.java | 11 +++++++---- .../java.base/jdk.internal/PreviewFeatureMethod.java | 6 ++++++ .../AccessInnerClassInsidePreviewFeatureClass.java | 10 +++++----- .../AccessStaticMethodInPreviewFeatureClass.java | 4 ++-- .../previewfeature/warnings/CallPreviewMethod.java | 8 ++++++++ .../previewfeature/PreviewFeatureWarningsTest.java | 4 +++- 6 files changed, 31 insertions(+), 12 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/previewfeature/java.base/jdk.internal/PreviewFeatureMethod.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/previewfeature/warnings/CallPreviewMethod.java diff --git a/java/java-impl-inspections/src/com/intellij/codeInspection/preview/PreviewFeatureInspection.java b/java/java-impl-inspections/src/com/intellij/codeInspection/preview/PreviewFeatureInspection.java index 6499651e05e8..e41a498f4eba 100644 --- a/java/java-impl-inspections/src/com/intellij/codeInspection/preview/PreviewFeatureInspection.java +++ b/java/java-impl-inspections/src/com/intellij/codeInspection/preview/PreviewFeatureInspection.java @@ -5,10 +5,7 @@ import com.intellij.codeInsight.daemon.impl.analysis.PreviewFeatureVisitorBase; import com.intellij.codeInspection.LocalInspectionTool; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.pom.java.JavaFeature; -import com.intellij.psi.PsiAnnotation; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiElementVisitor; -import com.intellij.psi.PsiImportStatementBase; +import com.intellij.psi.*; import com.intellij.psi.util.PsiUtil; import org.jetbrains.annotations.NotNull; @@ -42,6 +39,12 @@ public final class PreviewFeatureInspection extends LocalInspectionTool { protected void registerProblem(PsiElement element, String description, JavaFeature feature, PsiAnnotation annotation) { // Do not report warnings in imports, because they cannot be suppressed and javac doesn't report them if (element.getParent() instanceof PsiImportStatementBase) return; + if (element instanceof PsiReferenceExpression ref) { + PsiElement nameElement = ref.getReferenceNameElement(); + if (nameElement != null) { + element = nameElement; + } + } myHolder.registerProblem(element, description); } } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/previewfeature/java.base/jdk.internal/PreviewFeatureMethod.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/previewfeature/java.base/jdk.internal/PreviewFeatureMethod.java new file mode 100644 index 000000000000..31ac1bd2c919 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/previewfeature/java.base/jdk.internal/PreviewFeatureMethod.java @@ -0,0 +1,6 @@ +package com.mycom; + +public interface PreviewFeatureMethod { + @jdk.internal.PreviewFeature(feature = jdk.internal.PreviewFeature.Feature.SEALED_CLASSES) + void f(); +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/previewfeature/warnings/AccessInnerClassInsidePreviewFeatureClass.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/previewfeature/warnings/AccessInnerClassInsidePreviewFeatureClass.java index 17b80bc23f14..e3ddde53f84a 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/previewfeature/warnings/AccessInnerClassInsidePreviewFeatureClass.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/previewfeature/warnings/AccessInnerClassInsidePreviewFeatureClass.java @@ -5,10 +5,10 @@ class Main { public Main(String s) { } { var a = new FirstPreviewFeature.Outer.Inner(); - a.z(); - Runnable r = a::z; - new Main(FirstPreviewFeature.KEY); - new Main(FirstPreviewFeature.KEY + ""); - new Main("" + FirstPreviewFeature.KEY); + a.z(); + Runnable r = a::z; + new Main(FirstPreviewFeature.KEY); + new Main(FirstPreviewFeature.KEY + ""); + new Main("" + FirstPreviewFeature.KEY); } } \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/previewfeature/warnings/AccessStaticMethodInPreviewFeatureClass.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/previewfeature/warnings/AccessStaticMethodInPreviewFeatureClass.java index dbd145d36a1f..03d99e67c649 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/previewfeature/warnings/AccessStaticMethodInPreviewFeatureClass.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/previewfeature/warnings/AccessStaticMethodInPreviewFeatureClass.java @@ -3,7 +3,7 @@ import com.mycom.FirstPreviewFeature; class Main { { - FirstPreviewFeature.g(); - Runnable r = FirstPreviewFeature::g; + FirstPreviewFeature.g(); + Runnable r = FirstPreviewFeature::g; } } \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/previewfeature/warnings/CallPreviewMethod.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/previewfeature/warnings/CallPreviewMethod.java new file mode 100644 index 000000000000..ab42a9bc8fb9 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/previewfeature/warnings/CallPreviewMethod.java @@ -0,0 +1,8 @@ + +import com.mycom.PreviewFeatureMethod; + +class Main { + void test(PreviewFeatureMethod m){ + m.f(); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/previewfeature/PreviewFeatureWarningsTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/previewfeature/PreviewFeatureWarningsTest.java index bfb52d061ff9..4722e70b33ff 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/previewfeature/PreviewFeatureWarningsTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/previewfeature/PreviewFeatureWarningsTest.java @@ -18,13 +18,15 @@ public final class PreviewFeatureWarningsTest extends LightJavaCodeInsightFixtur myFixture.enableInspections(PreviewFeatureInspection.class); myFixture.configureByFiles( BASE_PATH + "/../java.base/jdk.internal/PreviewFeature.java", - BASE_PATH + "/../java.base/jdk.internal/FirstPreviewFeature.java" + BASE_PATH + "/../java.base/jdk.internal/FirstPreviewFeature.java", + BASE_PATH + "/../java.base/jdk.internal/PreviewFeatureMethod.java" ); } public void testImplementsPreviewFeature() { doTest(); } public void testAccessInnerClassInsidePreviewFeatureClass() { doTest(); } public void testAccessStaticMethodInPreviewFeatureClass() { doTest(); } + public void testCallPreviewMethod() { doTest(); } public void testSuppressPreviewFeatureWarning() { doTest(); } @Override