fix expected thrown types for lambda expressions

This commit is contained in:
Bas Leijdekkers
2014-12-03 15:30:48 +01:00
parent d12fceb113
commit f972926905
3 changed files with 34 additions and 1 deletions
@@ -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());
@@ -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 {}
}
@@ -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 {}
}