mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-20 13:31:28 +07:00
unused symbol inspection: mark method parameter used if method is used as method reference IDEA-210306
GitOrigin-RevId: 086a276669ee3dba969f8ea2334af157890594dc
This commit is contained in:
committed by
intellij-monorepo-bot
parent
6cc0a96a98
commit
db60b80cc4
@@ -1346,6 +1346,11 @@ public class HighlightVisitorImpl extends JavaElementVisitor implements Highligh
|
||||
myRefCountHolder.registerReference(expression, result);
|
||||
}
|
||||
final PsiElement method = result.getElement();
|
||||
if (method instanceof PsiMethod && myRefCountHolder != null) {
|
||||
for (PsiParameter parameter : ((PsiMethod)method).getParameterList().getParameters()) {
|
||||
myRefCountHolder.registerLocallyReferenced(parameter);
|
||||
}
|
||||
}
|
||||
if (method != null && !result.isAccessible()) {
|
||||
String accessProblem = HighlightUtil.accessProblemDescription(expression, method, result);
|
||||
HighlightInfo info = HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR).range(expression).descriptionAndTooltip(accessProblem).create();
|
||||
|
||||
@@ -156,9 +156,21 @@ public class RefJavaUtilImpl extends RefJavaUtil {
|
||||
public boolean visitCallableReferenceExpression(@NotNull UCallableReferenceExpression node) {
|
||||
visitReferenceExpression(node);
|
||||
processFunctionalExpression(node, getFunctionalInterfaceType(node));
|
||||
markParametersReferenced(node);
|
||||
return false;
|
||||
}
|
||||
|
||||
private void markParametersReferenced(@NotNull UCallableReferenceExpression node) {
|
||||
PsiElement resolved = node.resolve();
|
||||
if (resolved == null) return;
|
||||
RefElement refElement = refFrom.getRefManager().getReference(resolved);
|
||||
if (refElement instanceof RefMethod) {
|
||||
for (RefParameter parameter : ((RefMethod)refElement).getParameters()) {
|
||||
refFrom.addReference(parameter, parameter.getPsiElement(), decl, false, true, node);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean visitObjectLiteralExpression(@NotNull UObjectLiteralExpression node) {
|
||||
visitReferenceExpression(node);
|
||||
|
||||
@@ -14,7 +14,7 @@ class Test {
|
||||
|
||||
class Test2 {
|
||||
|
||||
static void m(Integer <warning descr="Parameter 'i' is never used">i</warning>) { }
|
||||
static void m(Integer i) { }
|
||||
|
||||
interface I1 {
|
||||
void m(int x);
|
||||
|
||||
@@ -77,7 +77,7 @@ abstract class AbstractCollection<E> implements Collection<E> {
|
||||
public boolean add(E e) {
|
||||
return true;
|
||||
}
|
||||
public boolean addAll(Collection<? extends E> <warning descr="Parameter 'c' is never used">c</warning>) {
|
||||
public boolean addAll(Collection<? extends E> c) {
|
||||
boolean modified = false;
|
||||
return modified;
|
||||
}
|
||||
|
||||
@@ -6,11 +6,11 @@ class Test {
|
||||
Test m(List<Integer> l1, List<Integer> l2);
|
||||
}
|
||||
|
||||
static Test meth(List<Integer>... <warning descr="Parameter 'lli' is never used">lli</warning>) {
|
||||
static Test meth(List<Integer>... lli) {
|
||||
return null;
|
||||
}
|
||||
|
||||
Test(List<Integer>... <warning descr="Parameter 'lli' is never used">lli</warning>) {}
|
||||
Test(List<Integer>... lli) {}
|
||||
|
||||
{
|
||||
I <warning descr="Variable 'i1' is never used">i1</warning> = <warning descr="Unchecked generics array creation for varargs parameter">Test::meth</warning>;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import java.util.stream.Stream;
|
||||
|
||||
class A {
|
||||
private void test5(Integer <warning descr="Parameter 'i' is never used">i</warning>, String... <warning descr="Parameter 'strings' is never used">strings</warning>) {}
|
||||
private void test5(Integer i, String... strings) {}
|
||||
private void <warning descr="Private method 'test5(java.lang.Integer, java.lang.Integer, java.lang.String...)' is never used">test5</warning>(Integer i, Integer b, String... strings) {
|
||||
System.out.println(i);
|
||||
System.out.println(b);
|
||||
|
||||
@@ -12,7 +12,7 @@ class MyTest<T> {
|
||||
|
||||
public static class Builder<E> {
|
||||
|
||||
public Builder<E> add(E <warning descr="Parameter 'element' is never used">element</warning>) {
|
||||
public Builder<E> add(E element) {
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
@@ -8,6 +8,6 @@ class Main {
|
||||
}
|
||||
|
||||
public static boolean checkForJdk(String <warning descr="Parameter 'homePath' is never used">homePath</warning>) {return false;}
|
||||
public static boolean checkForJdk(File <warning descr="Parameter 'homePath' is never used">homePath</warning>) {return false;}
|
||||
public static boolean checkForJdk(File homePath) {return false;}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<problems/>
|
||||
@@ -0,0 +1,15 @@
|
||||
import javax.swing.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
|
||||
class A {
|
||||
{
|
||||
new JComboBox().addActionListener(this::handleActionEvent);
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
new A();
|
||||
}
|
||||
private void handleActionEvent(ActionEvent ignore) {
|
||||
System.out.println(123);
|
||||
}
|
||||
}
|
||||
@@ -254,6 +254,10 @@ public class UnusedDeclarationTest extends AbstractUnusedDeclarationTest {
|
||||
doTest();
|
||||
}
|
||||
|
||||
public void testMethodParametersIfMethodReferenceUsed() {
|
||||
doTest();
|
||||
}
|
||||
|
||||
private void doTest5() {
|
||||
IdeaTestUtil.withLevel(getModule(), LanguageLevel.JDK_1_5, () -> doTest());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user