mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
fix expected thrown types for lambda expressions
This commit is contained in:
@@ -880,11 +880,17 @@ public class ExpectedTypesProvider {
|
||||
if (statement.getException() == myExpr) {
|
||||
PsiManager manager = statement.getManager();
|
||||
PsiType throwableType = JavaPsiFacade.getInstance(manager.getProject()).getElementFactory().createTypeByFQClassName("java.lang.Throwable", myExpr.getResolveScope());
|
||||
PsiMember container = PsiTreeUtil.getParentOfType(statement, PsiMethod.class, PsiClass.class);
|
||||
PsiElement container = PsiTreeUtil.getParentOfType(statement, PsiMethod.class, PsiLambdaExpression.class, PsiClass.class);
|
||||
PsiType[] throwsTypes = PsiType.EMPTY_ARRAY;
|
||||
if (container instanceof PsiMethod) {
|
||||
throwsTypes = ((PsiMethod)container).getThrowsList().getReferencedTypes();
|
||||
}
|
||||
else if (container instanceof PsiLambdaExpression) {
|
||||
final PsiMethod method = LambdaUtil.getFunctionalInterfaceMethod(container);
|
||||
if (method != null) {
|
||||
throwsTypes = method.getThrowsList().getReferencedTypes();
|
||||
}
|
||||
}
|
||||
|
||||
if (throwsTypes.length == 0) {
|
||||
final PsiClassType exceptionType = JavaPsiFacade.getInstance(manager.getProject()).getElementFactory().createTypeByFQClassName("java.lang.Exception", myExpr.getResolveScope());
|
||||
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
// "Create Local Variable 'v'" "true"
|
||||
public class A {
|
||||
void foo() {
|
||||
L l = () -> {
|
||||
MyException v;
|
||||
throw v
|
||||
}
|
||||
}
|
||||
|
||||
interface L {
|
||||
void g() throws MyException;
|
||||
}
|
||||
class MyException extends Exception {}
|
||||
}
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
// "Create Local Variable 'v'" "true"
|
||||
public class A {
|
||||
void foo() {
|
||||
L l = () -> {
|
||||
throw v<caret>
|
||||
}
|
||||
}
|
||||
|
||||
interface L {
|
||||
void g() throws MyException;
|
||||
}
|
||||
class MyException extends Exception {}
|
||||
}
|
||||
Reference in New Issue
Block a user