mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-03-22 06:50:54 +07:00
[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
This commit is contained in:
committed by
intellij-monorepo-bot
parent
f630f8ccd8
commit
a35bbc7c9c
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
package com.mycom;
|
||||
|
||||
public interface PreviewFeatureMethod {
|
||||
@jdk.internal.PreviewFeature(feature = jdk.internal.PreviewFeature.Feature.SEALED_CLASSES)
|
||||
void f();
|
||||
}
|
||||
@@ -5,10 +5,10 @@ class Main {
|
||||
public Main(String s) { }
|
||||
{
|
||||
var a = new <warning descr="com.mycom.FirstPreviewFeature.Outer.Inner is a preview API and may be removed in a future release"><warning descr="com.mycom.FirstPreviewFeature.Outer is a preview API and may be removed in a future release"><warning descr="com.mycom.FirstPreviewFeature is a preview API and may be removed in a future release">FirstPreviewFeature</warning>.Outer</warning>.Inner</warning>();
|
||||
<warning descr="com.mycom.FirstPreviewFeature.Outer.Inner#z is a preview API and may be removed in a future release">a.z</warning>();
|
||||
Runnable r = <warning descr="com.mycom.FirstPreviewFeature.Outer.Inner#z is a preview API and may be removed in a future release">a::z</warning>;
|
||||
new Main(<warning descr="com.mycom.FirstPreviewFeature#KEY is a preview API and may be removed in a future release"><warning descr="com.mycom.FirstPreviewFeature is a preview API and may be removed in a future release">FirstPreviewFeature</warning>.KEY</warning>);
|
||||
new Main(<warning descr="com.mycom.FirstPreviewFeature#KEY is a preview API and may be removed in a future release"><warning descr="com.mycom.FirstPreviewFeature is a preview API and may be removed in a future release">FirstPreviewFeature</warning>.KEY</warning> + "");
|
||||
new Main("" + <warning descr="com.mycom.FirstPreviewFeature#KEY is a preview API and may be removed in a future release"><warning descr="com.mycom.FirstPreviewFeature is a preview API and may be removed in a future release">FirstPreviewFeature</warning>.KEY</warning>);
|
||||
a.<warning descr="com.mycom.FirstPreviewFeature.Outer.Inner#z is a preview API and may be removed in a future release">z</warning>();
|
||||
Runnable r = a::<warning descr="com.mycom.FirstPreviewFeature.Outer.Inner#z is a preview API and may be removed in a future release">z</warning>;
|
||||
new Main(<warning descr="com.mycom.FirstPreviewFeature is a preview API and may be removed in a future release">FirstPreviewFeature</warning>.<warning descr="com.mycom.FirstPreviewFeature#KEY is a preview API and may be removed in a future release">KEY</warning>);
|
||||
new Main(<warning descr="com.mycom.FirstPreviewFeature is a preview API and may be removed in a future release">FirstPreviewFeature</warning>.<warning descr="com.mycom.FirstPreviewFeature#KEY is a preview API and may be removed in a future release">KEY</warning> + "");
|
||||
new Main("" + <warning descr="com.mycom.FirstPreviewFeature is a preview API and may be removed in a future release">FirstPreviewFeature</warning>.<warning descr="com.mycom.FirstPreviewFeature#KEY is a preview API and may be removed in a future release">KEY</warning>);
|
||||
}
|
||||
}
|
||||
@@ -3,7 +3,7 @@ import com.mycom.FirstPreviewFeature;
|
||||
|
||||
class Main {
|
||||
{
|
||||
<warning descr="com.mycom.FirstPreviewFeature#g is a preview API and may be removed in a future release"><warning descr="com.mycom.FirstPreviewFeature is a preview API and may be removed in a future release">FirstPreviewFeature</warning>.g</warning>();
|
||||
Runnable r = <warning descr="com.mycom.FirstPreviewFeature#g is a preview API and may be removed in a future release"><warning descr="com.mycom.FirstPreviewFeature is a preview API and may be removed in a future release">FirstPreviewFeature</warning>::g</warning>;
|
||||
<warning descr="com.mycom.FirstPreviewFeature is a preview API and may be removed in a future release">FirstPreviewFeature</warning>.<warning descr="com.mycom.FirstPreviewFeature#g is a preview API and may be removed in a future release">g</warning>();
|
||||
Runnable r = <warning descr="com.mycom.FirstPreviewFeature is a preview API and may be removed in a future release">FirstPreviewFeature</warning>::<warning descr="com.mycom.FirstPreviewFeature#g is a preview API and may be removed in a future release">g</warning>;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
|
||||
import com.mycom.PreviewFeatureMethod;
|
||||
|
||||
class Main {
|
||||
void test(PreviewFeatureMethod m){
|
||||
m.<warning descr="com.mycom.PreviewFeatureMethod#f is a preview API and may be removed in a future release">f</warning>();
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user