[ https://issues.apache.org/jira/browse/GROOVY-10075?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17341005#comment-17341005 ]
Eric Milles commented on GROOVY-10075: -------------------------------------- The code that satisfies property expressions with extension methods does not check the compatibility of the receiver type: {code:java} // GROOVY-5568: the property may be defined by DGM List<ClassNode> dgmReceivers = new ArrayList<>(2); dgmReceivers.add(receiverType); if (isPrimitiveType(receiverType)) dgmReceivers.add(getWrapper(receiverType)); for (ClassNode dgmReceiver : dgmReceivers) { List<MethodNode> methods = findDGMMethodsByNameAndArguments(getSourceUnit().getClassLoader(), dgmReceiver, "get" + capName, ClassNode.EMPTY_ARRAY); for (MethodNode method : findDGMMethodsByNameAndArguments(getSourceUnit().getClassLoader(), dgmReceiver, "is" + capName, ClassNode.EMPTY_ARRAY)) { if (Boolean_TYPE.equals(getWrapper(method.getReturnType()))) methods.add(method); } if (!methods.isEmpty()) { List<MethodNode> bestMethods = chooseBestMethod(dgmReceiver, methods, ClassNode.EMPTY_ARRAY); if (bestMethods.size() == 1) { MethodNode getter = bestMethods.get(0); if (visitor != null) { visitor.visitMethod(getter); } ClassNode returnType = inferReturnTypeGenerics(dgmReceiver, getter, ArgumentListExpression.EMPTY_ARGUMENTS); storeInferredTypeForPropertyExpression(pexp, returnType); if (readMode) storeTargetMethod(pexp, getter); return true; } } } {code} > Static compiler incorrectly typechecks extension modules > -------------------------------------------------------- > > Key: GROOVY-10075 > URL: https://issues.apache.org/jira/browse/GROOVY-10075 > Project: Groovy > Issue Type: Bug > Components: Static compilation > Affects Versions: 2.4.15, 3.0.8 > Environment: macOS 10.15.7 > OpenJDK Zulu 11.0.3 > Groovy 3.0.8 > Gradle 6.8 > Reporter: Felix Scheinost > Assignee: Eric Milles > Priority: Major > Attachments: screenshot-1.png > > > I think I found a bug in static typechecking of extension modules. > I tested two variants: > # Fixed generic: _static void getTestString(List<String> self)_ > ## In this case the bug affects both method calls and property access e.g. > _integerList.getTestString()_ and _integerList__.testString_ both compile > # With generic constraint: _static <S extends String> void > getTestStringOrSubclass(List<S> self)_ > ## In this case the bug only affects property access e.g. > _integerList.__getTestStringOrSubclass__()_ doesn't compile but > _integerList.testStringOrSubclass_ compiles > I prepared an example project here: > [https://github.com/felixscheinost/test-groovy-static-extensions] > Please have a look at > [https://github.com/felixscheinost/test-groovy-static-extensions/blob/master/src/main/groovy/org/example/App.groovy] > > Thanks! -- This message was sent by Atlassian Jira (v8.3.4#803005)