introduce variable from lambda expression

This commit is contained in:
anna
2012-07-24 17:51:51 +02:00
parent 1ee26f5d5c
commit e0cad5f568
8 changed files with 60 additions and 7 deletions
@@ -117,7 +117,8 @@ public class LambdaUtil {
final int parameterIndex = ((PsiParameterList)paramParent).getParameterIndex(param);
if (parameterIndex > -1) {
final PsiLambdaExpression lambdaExpression = PsiTreeUtil.getParentOfType(param, PsiLambdaExpression.class);
final PsiClassType.ClassResolveResult resolveResult = getFunctionInterfaceType(lambdaExpression);
final PsiType type = getFunctionInterfaceType(lambdaExpression);
final PsiClassType.ClassResolveResult resolveResult = type instanceof PsiClassType ? ((PsiClassType)type).resolveGenerics() : null;
if (resolveResult != null) {
final MethodSignature methodSignature = getFunction(resolveResult.getElement());
if (methodSignature != null) {
@@ -140,7 +141,7 @@ public class LambdaUtil {
}
@Nullable
public static PsiClassType.ClassResolveResult getFunctionInterfaceType(@Nullable PsiLambdaExpression lambdaExpression) {
public static PsiType getFunctionInterfaceType(@Nullable PsiLambdaExpression lambdaExpression) {
if (lambdaExpression != null) {
final PsiElement parent = lambdaExpression.getParent();
PsiType type = null;
@@ -177,10 +178,7 @@ public class LambdaUtil {
type = method.getReturnType();
}
}
if (type instanceof PsiClassType) {
return ((PsiClassType)type).resolveGenerics();
}
return type;
}
return null;
}
@@ -57,7 +57,7 @@ public class PsiLambdaExpressionType extends PsiType {
@Override
public <A> A accept(@NotNull final PsiTypeVisitor<A> visitor) {
return visitor.visitType(this);
return visitor.visitLambdaExpressionType(this);
}
@Override
@@ -67,4 +67,9 @@ public class PsiTypeVisitor<A> {
public A visitDiamondType(PsiDiamondType diamondType) {
return visitType(diamondType);
}
@Nullable
public A visitLambdaExpressionType(PsiLambdaExpressionType lambdaExpressionType) {
return visitType(LambdaUtil.getFunctionInterfaceType(lambdaExpressionType.getExpression()));
}
}