You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by em...@apache.org on 2022/09/06 14:17:22 UTC
[groovy] branch GROOVY_2_5_X updated: GROOVY-9963: resolve ctor call diamond for attribute/property expression
This is an automated email from the ASF dual-hosted git repository.
emilles pushed a commit to branch GROOVY_2_5_X
in repository https://gitbox.apache.org/repos/asf/groovy.git
The following commit(s) were added to refs/heads/GROOVY_2_5_X by this push:
new 9e037dbb6f GROOVY-9963: resolve ctor call diamond for attribute/property expression
9e037dbb6f is described below
commit 9e037dbb6f6ed7203af3bd5d25133464b2452ba6
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Mon May 16 14:13:34 2022 -0500
GROOVY-9963: resolve ctor call diamond for attribute/property expression
---
.../transform/stc/StaticTypeCheckingVisitor.java | 5 +++-
.../groovy/transform/stc/GenericsSTCTest.groovy | 34 ++++++++++++----------
2 files changed, 22 insertions(+), 17 deletions(-)
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 545e9ad736..b11de5b7eb 100644
--- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
+++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
@@ -1474,7 +1474,10 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport {
if (propertyName == null) return false;
Expression objectExpression = pexp.getObjectExpression();
- ClassNode objectExpressionType = getType(objectExpression);
+ ClassNode objectExpressionType = getType(objectExpression);
+ if (objectExpression instanceof ConstructorCallExpression) { // GROOVY-9963
+ inferDiamondType((ConstructorCallExpression) objectExpression, objectExpressionType);
+ }
List<ClassNode> enclosingTypes = typeCheckingContext.getEnclosingClassNodes();
boolean staticOnlyAccess = isClassClassNodeWrappingConcreteType(objectExpressionType);
if ("this".equals(propertyName) && staticOnlyAccess) {
diff --git a/src/test/groovy/transform/stc/GenericsSTCTest.groovy b/src/test/groovy/transform/stc/GenericsSTCTest.groovy
index 0f05adc431..a03dc9801c 100644
--- a/src/test/groovy/transform/stc/GenericsSTCTest.groovy
+++ b/src/test/groovy/transform/stc/GenericsSTCTest.groovy
@@ -18,6 +18,7 @@
*/
package groovy.transform.stc
+import groovy.test.GroovyAssert
import groovy.transform.NotYetImplemented
import org.codehaus.groovy.tools.javac.JavaAwareCompilationUnit
@@ -285,7 +286,7 @@ class GenericsSTCTest extends StaticTypeCheckingTestCase {
}
// GROOVY-10098
- void testReturnTypeInferenceWithMethodGenerics16() {
+ void testReturnTypeInferenceWithMethodGenerics17() {
assertScript '''
@groovy.transform.TupleConstructor(defaults=false)
class C<T extends Number> {
@@ -301,9 +302,10 @@ class GenericsSTCTest extends StaticTypeCheckingTestCase {
// GROOVY-10749
void testReturnTypeInferenceWithMethodGenerics29() {
- String named = 'class Named { String name }'
+ if (!GroovyAssert.isAtLeastJdk('1.8')) return
- assertScript named + '''
+ assertScript '''
+ class Named { String name }
@ASTTest(phase=INSTRUCTION_SELECTION, value={
def type = node.getNodeMetaData(INFERRED_TYPE)
assert type.toString(false) == 'java.util.stream.Collector <Named, ?, java.util.Map>'
@@ -588,7 +590,7 @@ class GenericsSTCTest extends StaticTypeCheckingTestCase {
'Incompatible generic argument types. Cannot assign C<? extends java.lang.Object> to: C<D>'
}
- @NotYetImplemented // GROOVY-9963
+ // GROOVY-9963
void testDiamondInferrenceFromConstructor10() {
assertScript '''
@groovy.transform.TupleConstructor(defaults=false)
@@ -1653,7 +1655,7 @@ class GenericsSTCTest extends StaticTypeCheckingTestCase {
}
// GROOVY-9945
- void testShouldUseMethodGenericType7() {
+ void testShouldUseMethodGenericType9() {
assertScript '''
interface I<T> {
}
@@ -1671,6 +1673,12 @@ class GenericsSTCTest extends StaticTypeCheckingTestCase {
// GROOVY-8409, GROOVY-9915, GROOVY-10745
void testShouldUseMethodGenericType10() {
+ if (GroovyAssert.isAtLeastJdk('1.8')) {
+ assertScript '''
+ Map map() { [:] }
+ Optional.of(map()).orElse(Collections.emptyMap())
+ '''
+ }
assertScript '''
interface OngoingStubbing<T> /*extends IOngoingStubbing*/ {
// type parameter from enclosing type in signature:
@@ -1688,21 +1696,14 @@ class GenericsSTCTest extends StaticTypeCheckingTestCase {
when(foo()).thenReturn(Optional.empty())
'''
-
- if (!groovy.test.GroovyAssert.isAtLeastJdk('1.8')) return
-
- assertScript '''
- Map map() { [:] }
- Optional.of(map()).orElse(Collections.emptyMap());
- '''
}
- @NotYetImplemented // GROOVY-8409, GROOVY-9902
+ // GROOVY-8409, GROOVY-9902
void testShouldUseMethodGenericType11() {
- File parentDir = File.createTempDir()
+ File parentDir = createTempDir()
config.with {
- targetDirectory = File.createTempDir()
- jointCompilationOptions = [memStub: true]
+ targetDirectory = createTempDir()
+ jointCompilationOptions = [stubDir: createTempDir()]
}
try {
def a = new File(parentDir, 'Main.groovy')
@@ -1738,6 +1739,7 @@ class GenericsSTCTest extends StaticTypeCheckingTestCase {
} finally {
parentDir.deleteDir()
config.targetDirectory.deleteDir()
+ config.jointCompilationOptions.stubDir.deleteDir()
}
}