This is an automated email from the ASF dual-hosted git repository. emilles pushed a commit to branch GROOVY_4_0_X in repository https://gitbox.apache.org/repos/asf/groovy.git
commit 0a1dc1e3dea2750725ac86bdab4baf184cce640f Author: Eric Milles <[email protected]> AuthorDate: Wed Nov 23 09:17:46 2022 -0600 GROOVY-10820: STC: static properties for `Type.name` except from `Class` --- .../codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java | 4 ++++ .../codehaus/groovy/classgen/asm/sc/BugsStaticCompileTest.groovy | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java index 7e53d497e3..d35f9967d3 100644 --- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java +++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java @@ -1627,6 +1627,10 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport { for (MethodNode method : findDGMMethodsForClassNode(getSourceUnit().getClassLoader(), dgmReceiver, "is" + capName)) { if (isPrimitiveBoolean(method.getReturnType())) methods.add(method); } + if (staticOnlyAccess && receiver.getData() == null && !isClassType(receiver.getType())) { + // GROOVY-10820: ensure static extension when property accessed in static manner + methods.removeIf(method -> !((ExtensionMethodNode) method).isStaticExtension()); + } if (isUsingGenericsOrIsArrayUsingGenerics(dgmReceiver)) { methods.removeIf(method -> // GROOVY-10075: "List<Integer>" vs "List<String>" !typeCheckMethodsWithGenerics(dgmReceiver, ClassNode.EMPTY_ARRAY, method) diff --git a/src/test/org/codehaus/groovy/classgen/asm/sc/BugsStaticCompileTest.groovy b/src/test/org/codehaus/groovy/classgen/asm/sc/BugsStaticCompileTest.groovy index 1c26771c7f..e8ca9036f5 100644 --- a/src/test/org/codehaus/groovy/classgen/asm/sc/BugsStaticCompileTest.groovy +++ b/src/test/org/codehaus/groovy/classgen/asm/sc/BugsStaticCompileTest.groovy @@ -1519,6 +1519,14 @@ final class BugsStaticCompileTest extends BugsSTCTest implements StaticCompilati assert String.metaClass != Class.getMetaClass() assert String.getMetaClass() != Class.getMetaClass() ''' + assertScript ''' + @ASTTest(phase=INSTRUCTION_SELECTION, value={ + def source = node.rightExpression // "String.metaClass" + def target = source.getNodeMetaData(DIRECT_METHOD_CALL_TARGET) + assert target.declaringClass == CLASS_Type // not OBJECT_TYPE! + }) + def smc = String.metaClass + ''' assertScript ''' @ASTTest(phase=INSTRUCTION_SELECTION, value={ def source = node.rightExpression // "String.getMetaClass()"
