diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/types/GrClosureParameterImpl.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/types/GrClosureParameterImpl.java index 97324a2b5b9f..a99e29c1a7c1 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/types/GrClosureParameterImpl.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/types/GrClosureParameterImpl.java @@ -49,7 +49,7 @@ public class GrClosureParameterImpl implements GrClosureParameter { } public static boolean isParameterOptional(PsiParameter parameter) { - return parameter instanceof GrParameter ? ((GrParameter)parameter).isOptional() : false; + return parameter instanceof GrParameter && ((GrParameter)parameter).isOptional(); } public static boolean isVararg(GrClosureParameter[] closureParams) { diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/types/GrClosureSignatureUtil.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/types/GrClosureSignatureUtil.java index c97be457a42e..3487c140f556 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/types/GrClosureSignatureUtil.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/types/GrClosureSignatureUtil.java @@ -87,7 +87,7 @@ public class GrClosureSignatureUtil { return new GrClosureSignatureImpl(method.getParameterList().getParameters(), null, substitutor) { @Override public PsiType getReturnType() { - return PsiUtil.getSmartReturnType(method); + return getSubstitutor().substitute(PsiUtil.getSmartReturnType(method)); } @Override diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/resolve/TypeInferenceTest.java b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/resolve/TypeInferenceTest.java index c7fbb0dbb7ce..f70944f1948a 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/resolve/TypeInferenceTest.java +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/resolve/TypeInferenceTest.java @@ -204,4 +204,8 @@ public class TypeInferenceTest extends GroovyResolveTestCase { public void testPreferMethodOverloader() { assertTypeEquals("java.lang.String", "A.groovy"); } + + public void testReturnTypeFromMethodClosure() { + assertTypeEquals("java.lang.String","A.groovy"); + } } diff --git a/plugins/groovy/testdata/resolve/inference/returnTypeFromMethodClosure/A.groovy b/plugins/groovy/testdata/resolve/inference/returnTypeFromMethodClosure/A.groovy new file mode 100644 index 000000000000..90f0d7888889 --- /dev/null +++ b/plugins/groovy/testdata/resolve/inference/returnTypeFromMethodClosure/A.groovy @@ -0,0 +1,8 @@ +class Test { + T foo(T t) {t} +} + +def test=new Test() +def a = test.&foo +def res = a("a") +print res \ No newline at end of file