From commits-return-8370-archive-asf-public=cust-asf.ponee.io@groovy.apache.org Tue Apr 23 04:55:03 2019 Return-Path: X-Original-To: archive-asf-public@cust-asf.ponee.io Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [207.244.88.153]) by mx-eu-01.ponee.io (Postfix) with SMTP id 6944218077A for ; Tue, 23 Apr 2019 06:55:02 +0200 (CEST) Received: (qmail 6261 invoked by uid 500); 23 Apr 2019 04:55:01 -0000 Mailing-List: contact commits-help@groovy.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@groovy.apache.org Delivered-To: mailing list commits@groovy.apache.org Received: (qmail 6176 invoked by uid 99); 23 Apr 2019 04:55:01 -0000 Received: from ec2-52-202-80-70.compute-1.amazonaws.com (HELO gitbox.apache.org) (52.202.80.70) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 23 Apr 2019 04:55:01 +0000 Received: by gitbox.apache.org (ASF Mail Server at gitbox.apache.org, from userid 33) id 7D1AA87A45; Tue, 23 Apr 2019 04:55:01 +0000 (UTC) Date: Tue, 23 Apr 2019 04:55:02 +0000 To: "commits@groovy.apache.org" Subject: [groovy] 01/02: GROOVY-9077: STC: inferred type of property that resolves to method not always stored MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit From: paulk@apache.org In-Reply-To: <155599530131.15114.9114201265962524129@gitbox.apache.org> References: <155599530131.15114.9114201265962524129@gitbox.apache.org> X-Git-Host: gitbox.apache.org X-Git-Repo: groovy X-Git-Refname: refs/heads/GROOVY_2_5_X X-Git-Reftype: branch X-Git-Rev: 336ec2d88b301c27d1dc8adaf71010ab7b2d2b9a X-Git-NotificationType: diff X-Git-Multimail-Version: 1.5.dev Auto-Submitted: auto-generated Message-Id: <20190423045501.7D1AA87A45@gitbox.apache.org> This is an automated email from the ASF dual-hosted git repository. paulk pushed a commit to branch GROOVY_2_5_X in repository https://gitbox.apache.org/repos/asf/groovy.git commit 336ec2d88b301c27d1dc8adaf71010ab7b2d2b9a Author: Paul King AuthorDate: Mon Apr 22 23:31:24 2019 +1000 GROOVY-9077: STC: inferred type of property that resolves to method not always stored --- .../transform/stc/StaticTypeCheckingVisitor.java | 3 +- .../transform/stc/TypeInferenceSTCTest.groovy | 48 ++++++++++++++++++---- 2 files changed, 42 insertions(+), 9 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 bc67c5e..749cbef 100644 --- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java +++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java @@ -1524,6 +1524,7 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport { if (getter != null) { ClassNode cn = inferReturnTypeGenerics(current, getter, ArgumentListExpression.EMPTY_ARGUMENTS); storeInferredTypeForPropertyExpression(pexp, cn); + storeTargetMethod(pexp, getter); pexp.removeNodeMetaData(StaticTypesMarker.READONLY_PROPERTY); String delegationData = receiver.getData(); if (delegationData != null) @@ -1588,7 +1589,7 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport { } ClassNode cn = inferReturnTypeGenerics(dgmReceiver, getter, ArgumentListExpression.EMPTY_ARGUMENTS); storeInferredTypeForPropertyExpression(pexp, cn); - + storeTargetMethod(pexp, getter); return true; } } diff --git a/src/test/groovy/transform/stc/TypeInferenceSTCTest.groovy b/src/test/groovy/transform/stc/TypeInferenceSTCTest.groovy index e9acc12..f570378 100644 --- a/src/test/groovy/transform/stc/TypeInferenceSTCTest.groovy +++ b/src/test/groovy/transform/stc/TypeInferenceSTCTest.groovy @@ -769,14 +769,46 @@ Thing.run() // GROOVY-6574 void testShouldInferPrimitiveBoolean() { assertScript ''' -def foo(Boolean o) { - @ASTTest(phase=INSTRUCTION_SELECTION,value={ - assert node.getNodeMetaData(INFERRED_TYPE) == boolean_TYPE - }) - boolean b = o - println b -} + def foo(Boolean o) { + @ASTTest(phase=INSTRUCTION_SELECTION,value={ + assert node.getNodeMetaData(INFERRED_TYPE) == boolean_TYPE + }) + boolean b = o + println b + } + ''' + } + + // GROOVY-9077 + void testInferredTypeForPropertyThatResolvesToMethod() { + assertScript ''' + import groovy.transform.* + import static org.codehaus.groovy.transform.stc.StaticTypesMarker.DIRECT_METHOD_CALL_TARGET + + @CompileStatic + void meth() { + def items = [1, 2] as LinkedList + + @ASTTest(phase=INSTRUCTION_SELECTION, value={ + node = node.rightExpression + assert node.class.name.contains('PropertyExpression') + def target = node.getNodeMetaData(DIRECT_METHOD_CALL_TARGET) + assert target != null + assert target.declaringClass.name == 'java.util.LinkedList' + }) + def one = items.first + + @ASTTest(phase=CLASS_GENERATION, value={ + node = node.rightExpression + assert node.class.name.contains('MethodCallExpression') + def target = node.getNodeMetaData(DIRECT_METHOD_CALL_TARGET) + assert target != null + assert target.declaringClass.name == 'java.util.LinkedList' + }) + def alsoOne = items.peek() + } + + meth() ''' } } -