[java-inspections] IDEA-326289 Raw type when converting generic constructor method ref to lambda

GitOrigin-RevId: cd8f8d36f5ded99b168e8db0a00a06a82df4044f
This commit is contained in:
Tagir Valeev
2023-07-26 11:38:28 +00:00
committed by intellij-monorepo-bot
parent cfa46d2993
commit fb1eeff810
9 changed files with 68 additions and 2 deletions
@@ -23,6 +23,7 @@ import com.intellij.refactoring.introduceField.ElementToWorkOn;
import com.intellij.refactoring.introduceVariable.JavaIntroduceVariableHandlerBase;
import com.intellij.util.Function;
import com.intellij.util.ObjectUtils;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.text.UniqueNameGenerator;
import com.siyeh.ig.psiutils.CommentTracker;
import com.siyeh.ig.psiutils.ExpressionUtils;
@@ -212,7 +213,8 @@ public final class LambdaRefactoringUtil {
final PsiSubstitutor substitutor = resolveResult.getSubstitutor();
LOG.assertTrue(containingClass != null);
if (containingClass.hasTypeParameters() && !PsiUtil.isRawSubstitutor(containingClass, substitutor)) {
if (containingClass.hasTypeParameters() &&
ContainerUtil.all(containingClass.getTypeParameters(), tp -> substitutor.substitute(tp) != null)) {
buf.append("<").append(StringUtil.join(containingClass.getTypeParameters(), parameter -> {
final PsiType psiType = substitutor.substitute(parameter);
LOG.assertTrue(psiType != null);
@@ -6,7 +6,7 @@ public class LocalClass {
MyObject<Integer, T> h = new MyObject<>(1, x);
MyObject<String, T> h2 = new MyObject<>("1", x);
MyObject raw = new MyObject("1", x);
IntFunction<MyObject<Character, T>> ic = a -> new MyObject(a, x);
IntFunction<MyObject<Character, T>> ic = a -> new MyObject<>(a, x);
System.out.println(new MyObject<Number, T>(1, x) {
void test() {}
});
@@ -0,0 +1,10 @@
import java.util.function.*;
public class MyTest {
class Inner<I> {
Inner() {}
}
<T> void test() {
Supplier<Inner<T>> supplier2 = <caret>() -> new Inner<T>();
}
}
@@ -0,0 +1,10 @@
import java.util.function.*;
public class MyTest {
class Inner<I> {
Inner() {}
}
<T> void test() {
Supplier<Inner<T>> supplier2 = <caret>Inner::new;
}
}
@@ -0,0 +1,10 @@
import java.util.function.*;
public class MyTest<T> {
class Inner<I> {
Inner() {}
}
void test() {
Supplier<Inner<T>> supplier2 = <caret>() -> new Inner<T>();
}
}
@@ -0,0 +1,10 @@
import java.util.function.*;
public class MyTest<T> {
class Inner<I> {
Inner() {}
}
void test() {
Supplier<Inner<T>> supplier2 = <caret>Inner::new;
}
}
@@ -0,0 +1,10 @@
import java.util.function.*;
public class MyTest {
<T> void test() {
class Local<L> {
Local() {}
}
Supplier<Local<T>> supplier = <caret>() -> new Local<T>();
}
}
@@ -0,0 +1,10 @@
import java.util.function.*;
public class MyTest {
<T> void test() {
class Local<L> {
Local() {}
}
Supplier<Local<T>> supplier = <caret>Local::new;
}
}
@@ -162,4 +162,8 @@ public class MethodRefCanBeReplacedWithLambdaFixTest extends IGQuickFixesTestCas
public void testBrokenPrimitiveArray() {
doTest();
}
public void testLocalGenericClass() { doTest(); }
public void testInnerGenericClass() { doTest(); }
public void testInnerGenericClass2() { doTest(); }
}