guava type migration: convert function variable that defined as method reference IDEA-152415

This commit is contained in:
Dmitry Batkovich
2016-07-15 14:56:02 +03:00
parent 6bab0be02c
commit 9732e343e7
4 changed files with 32 additions and 4 deletions
@@ -101,10 +101,18 @@ public abstract class BaseGuavaTypeConversionRule extends TypeConversionRule {
final PsiAnonymousClass anonymousClass = ((PsiNewExpression)context).getAnonymousClass();
return anonymousClass == null ? null : findConversionForAnonymous(anonymousClass, labeler.getSettings(GuavaConversionSettings.class));
}
else if (context instanceof PsiReferenceExpression) {
final PsiElement resolvedElement = ((PsiReferenceExpression)context).resolve();
if (resolvedElement instanceof PsiVariable) {
return findConversionForVariableReference((PsiReferenceExpression)context, (PsiVariable)resolvedElement, context);
else if (context instanceof PsiMethodReferenceExpression) {
final PsiType methodReferenceType = context.getType();
if (methodReferenceType != null && to != null && to.isAssignableFrom(methodReferenceType)) {
return new TypeConversionDescriptorBase();
}
}
else {
if (context instanceof PsiReferenceExpression) {
final PsiElement resolvedElement = ((PsiReferenceExpression)context).resolve();
if (resolvedElement instanceof PsiVariable) {
return findConversionForVariableReference((PsiReferenceExpression)context, (PsiVariable)resolvedElement, context);
}
}
}
return null;
@@ -286,6 +286,10 @@ public class GuavaInspectionTest extends JavaCodeInsightFixtureTestCase {
doTestAllFile();
}
public void testFunctionIsMethodReference() {
doTest();
}
private void doTestNoQuickFixes(Class<? extends PsiElement>... highlightedElements) {
myFixture.configureByFile(getTestName(true) + ".java");
@@ -0,0 +1,8 @@
import com.google.common.base.Function;
public class MethodReference {
public void context() {
Function<String, Integer> fun<caret>ction2 = String::length;
}
}
@@ -0,0 +1,8 @@
import java.util.function.Function;
public class MethodReference {
public void context() {
Function<String, Integer> function2 = String::length;
}
}