lambda -> meth ref: reject replacements with invalid qualifiers (IDEA-142695)

This commit is contained in:
Anna Kozlova
2015-07-17 13:03:10 +03:00
parent d7dd6ae799
commit 75e3086fb2
2 changed files with 42 additions and 2 deletions

View File

@@ -320,6 +320,7 @@ public class LambdaCanBeMethodReferenceInspection extends BaseJavaBatchLocalInsp
return classOrPrimitiveName;
}
@Nullable
private static String getQualifierTextByMethodCall(final PsiMethodCallExpression methodCall,
final PsiType functionalInterfaceType,
final PsiParameter[] parameters,
@@ -363,6 +364,7 @@ public class LambdaCanBeMethodReferenceInspection extends BaseJavaBatchLocalInsp
}
}
@Nullable
private static String composeReceiverQualifierText(PsiParameter[] parameters,
PsiMethod psiMethod,
PsiClass containingClass,
@@ -400,8 +402,7 @@ public class LambdaCanBeMethodReferenceInspection extends BaseJavaBatchLocalInsp
return qualifiedName;
}
else {
final String containingClassName = containingClass.getName();
return containingClassName != null ? containingClassName : "";
return containingClass.getName();
}
}

View File

@@ -0,0 +1,39 @@
// "Replace lambda with method reference" "false"
import java.util.Arrays;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;
class Test {
public static void main(String[] args) {
List<String> l = Arrays.asList("America", "Britain", "Australia", "Brazil", "Canada");
System.out.println(l);
System.out.println(uniquifyListByProperty(l, Function.identity()));
System.out.println(uniquifyListByProperty(l, s -> s.charAt(0)));
}
static <T, P> List<T> uniquifyListByProperty(List<T> list, Function<T, P> propertyExtractor) {
return list.stream()
.map(item -> new Object() {
@Override
public boolean equals(Object o) {
return propertyExtractor.apply(item).equals(
propertyExtractor.apply(this.getClass().cast(o).item()));
}
@Override
public int hashCode() {
return propertyExtractor.apply(item).hashCode();
}
T item() {
return item;
}
})
.distinct()
.map(o -> o.<caret>item())
.collect(Collectors.toList());
}
}