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