Skip to content

Commit 3ac5083

Browse files
committed
GROOVY-10807
1 parent b020533 commit 3ac5083

File tree

2 files changed

+25
-5
lines changed

2 files changed

+25
-5
lines changed

base-test/org.eclipse.jdt.groovy.core.tests.compiler/src/org/eclipse/jdt/groovy/core/tests/xform/StaticCompilationTests.java

+20
Original file line numberDiff line numberDiff line change
@@ -8033,6 +8033,26 @@ public void testCompileStatic10807() {
80338033
//@formatter:on
80348034

80358035
runConformTest(sources, "[bar, baz, foo]");
8036+
8037+
assumeTrue(isAtLeastGroovy(50));
8038+
8039+
//@formatter:off
8040+
sources = new String[] {
8041+
"Main.groovy",
8042+
"@groovy.transform.CompileStatic\n" +
8043+
"class C {\n" +
8044+
" public static final Comparator<String> BY_DISPLAY_NAME = Comparator.<String,String>comparing(C::getDisplayName)\n" +
8045+
" static String getDisplayName(String component) {\n" +
8046+
" return component\n" +
8047+
" }\n" +
8048+
"}\n" +
8049+
"def list = ['foo','bar','baz']\n" +
8050+
"list.sort(C.BY_DISPLAY_NAME)\n" +
8051+
"print list\n",
8052+
};
8053+
//@formatter:on
8054+
8055+
runConformTest(sources, "[bar, baz, foo]");
80368056
}
80378057

80388058
@Test

base/org.codehaus.groovy50/src/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -238,8 +238,8 @@
238238
import static org.codehaus.groovy.ast.tools.WideningCategories.isLongCategory;
239239
import static org.codehaus.groovy.ast.tools.WideningCategories.isNumberCategory;
240240
import static org.codehaus.groovy.ast.tools.WideningCategories.lowestUpperBound;
241-
import static org.codehaus.groovy.runtime.DefaultGroovyMethods.asBoolean;
242-
import static org.codehaus.groovy.runtime.DefaultGroovyMethods.init;
241+
import static org.codehaus.groovy.runtime.ArrayGroovyMethods.asBoolean;
242+
import static org.codehaus.groovy.runtime.ArrayGroovyMethods.init;
243243
import static org.codehaus.groovy.runtime.DefaultGroovyMethods.last;
244244
import static org.codehaus.groovy.syntax.Types.ASSIGN;
245245
import static org.codehaus.groovy.syntax.Types.COMPARE_EQUAL;
@@ -2947,6 +2947,7 @@ protected void visitMethodCallArguments(final ClassNode receiver, final Argument
29472947
LambdaExpression lambda = constructLambdaExpressionForMethodReference(
29482948
targetType, (MethodReferenceExpression) expression);
29492949
inferClosureParameterTypes(receiver, arguments, lambda, target, selectedMethod);
2950+
expression.putNodeMetaData(PARAMETER_TYPE, lambda.getNodeMetaData(PARAMETER_TYPE));
29502951
expression.putNodeMetaData(CLOSURE_ARGUMENTS, lambda.getNodeMetaData(CLOSURE_ARGUMENTS));
29512952
} else {
29522953
addError("The argument is a method reference, but the parameter type is not a functional interface", expression);
@@ -3099,8 +3100,7 @@ protected void inferClosureParameterTypes(final ClassNode receiver, final Expres
30993100
Expression emc = typeCheckingContext.getEnclosingMethodCall();
31003101
if (emc instanceof MethodCallExpression) {
31013102
MethodCallExpression mce = (MethodCallExpression) emc;
3102-
if (mce.getArguments() == arguments // GROOVY-10807 ::
3103-
|| expression.getCode() == GENERATED_EMPTY_STATEMENT){
3103+
if (mce.getArguments() == arguments) {
31043104
GenericsType[] typeArguments = mce.getGenericsTypes();
31053105
if (typeArguments != null) {
31063106
int n = typeParameters.length;
@@ -4416,7 +4416,7 @@ protected void storeType(final Expression exp, ClassNode cn) {
44164416
assignedTypes.add(cn);
44174417
}
44184418
List<ClassNode> temporaryTypesForExpression = getTemporaryTypesForExpression(var);
4419-
if (asBoolean(temporaryTypesForExpression)) {
4419+
if (temporaryTypesForExpression != null) {
44204420
// a type inference has been made on a variable whose type was defined in an instanceof block
44214421
// erase available information with the new type
44224422
temporaryTypesForExpression.clear();

0 commit comments

Comments
 (0)