mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-18 09:34:34 +07:00
introduce variable from lambda expression
This commit is contained in:
@@ -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()));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user