Return-Path: X-Original-To: apmail-groovy-commits-archive@minotaur.apache.org Delivered-To: apmail-groovy-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 1D95D18B06 for ; Wed, 7 Oct 2015 19:17:03 +0000 (UTC) Received: (qmail 76697 invoked by uid 500); 7 Oct 2015 19:17:03 -0000 Delivered-To: apmail-groovy-commits-archive@groovy.apache.org Received: (qmail 76664 invoked by uid 500); 7 Oct 2015 19:17:03 -0000 Mailing-List: contact commits-help@groovy.incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@groovy.incubator.apache.org Delivered-To: mailing list commits@groovy.incubator.apache.org Received: (qmail 76655 invoked by uid 99); 7 Oct 2015 19:17:02 -0000 Received: from Unknown (HELO spamd2-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 07 Oct 2015 19:17:02 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd2-us-west.apache.org (ASF Mail Server at spamd2-us-west.apache.org) with ESMTP id 8DB4A1A081A for ; Wed, 7 Oct 2015 19:17:02 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd2-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: 1.771 X-Spam-Level: * X-Spam-Status: No, score=1.771 tagged_above=-999 required=6.31 tests=[KAM_ASCII_DIVIDERS=0.8, KAM_LAZY_DOMAIN_SECURITY=1, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, T_RP_MATCHES_RCVD=-0.01, URIBL_BLOCKED=0.001] autolearn=disabled Received: from mx1-us-west.apache.org ([10.40.0.8]) by localhost (spamd2-us-west.apache.org [10.40.0.9]) (amavisd-new, port 10024) with ESMTP id TYl3NCnBEqcu for ; Wed, 7 Oct 2015 19:16:54 +0000 (UTC) Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by mx1-us-west.apache.org (ASF Mail Server at mx1-us-west.apache.org) with SMTP id 8734220645 for ; Wed, 7 Oct 2015 19:16:54 +0000 (UTC) Received: (qmail 76307 invoked by uid 99); 7 Oct 2015 19:16:54 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 07 Oct 2015 19:16:54 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 46C7FE0566; Wed, 7 Oct 2015 19:16:54 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: cchampeau@apache.org To: commits@groovy.incubator.apache.org Date: Wed, 07 Oct 2015 19:16:54 -0000 Message-Id: X-Mailer: ASF-Git Admin Mailer Subject: [1/5] incubator-groovy git commit: GROOVY-7610 Null safe is calls throw VerifyError when used as condition with CompileStatic * Null safe .is method call expressions were being transformed to CompareIdentityExpressions Repository: incubator-groovy Updated Branches: refs/heads/master d3bc07e5c -> baba6dfdf GROOVY-7610 Null safe is calls throw VerifyError when used as condition with CompileStatic * Null safe .is method call expressions were being transformed to CompareIdentityExpressions Closes #123 Project: http://git-wip-us.apache.org/repos/asf/incubator-groovy/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-groovy/commit/0a54e553 Tree: http://git-wip-us.apache.org/repos/asf/incubator-groovy/tree/0a54e553 Diff: http://git-wip-us.apache.org/repos/asf/incubator-groovy/diff/0a54e553 Branch: refs/heads/master Commit: 0a54e553b12cff530d6910d918e7c17f0c6f3173 Parents: d3bc07e Author: Shil S Authored: Tue Sep 29 00:53:21 2015 -0400 Committer: Cedric Champeau Committed: Wed Oct 7 21:06:58 2015 +0200 ---------------------------------------------------------------------- .../MethodCallExpressionTransformer.java | 3 ++- .../classgen/asm/sc/BugsStaticCompileTest.groovy | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-groovy/blob/0a54e553/src/main/org/codehaus/groovy/transform/sc/transformers/MethodCallExpressionTransformer.java ---------------------------------------------------------------------- diff --git a/src/main/org/codehaus/groovy/transform/sc/transformers/MethodCallExpressionTransformer.java b/src/main/org/codehaus/groovy/transform/sc/transformers/MethodCallExpressionTransformer.java index e6cae53..982865f 100644 --- a/src/main/org/codehaus/groovy/transform/sc/transformers/MethodCallExpressionTransformer.java +++ b/src/main/org/codehaus/groovy/transform/sc/transformers/MethodCallExpressionTransformer.java @@ -170,9 +170,10 @@ public class MethodCallExpressionTransformer { * @return null if the method call is not DGM#is, or {@link CompareIdentityExpression} */ private static Expression tryTransformIsToCompareIdentity(MethodCallExpression call) { + if (call.isSafe()) return null; MethodNode methodTarget = call.getMethodTarget(); if (methodTarget instanceof ExtensionMethodNode && "is".equals(methodTarget.getName()) && methodTarget.getParameters().length==1) { - methodTarget = ((ExtensionMethodNode) methodTarget).getExtensionMethodNode(); + methodTarget = ((ExtensionMethodNode) methodTarget).getExtensionMethodNode(); ClassNode owner = methodTarget.getDeclaringClass(); if (DGM_CLASSNODE.equals(owner)) { Expression args = call.getArguments(); http://git-wip-us.apache.org/repos/asf/incubator-groovy/blob/0a54e553/src/test/org/codehaus/groovy/classgen/asm/sc/BugsStaticCompileTest.groovy ---------------------------------------------------------------------- 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 b83ecab..922448e 100644 --- a/src/test/org/codehaus/groovy/classgen/asm/sc/BugsStaticCompileTest.groovy +++ b/src/test/org/codehaus/groovy/classgen/asm/sc/BugsStaticCompileTest.groovy @@ -1393,5 +1393,22 @@ println someInt assert foo.name == 'fluent' ''' } + + // GROOVY-7610 + void testNullSafeIsCallConditionShouldNotThrowVerifyError() { + assertScript ''' + class A { + void ifCondition(Object x, Object y) { + if (x?.is(y)) + return + } + + void ternaryCondition(Object x, Object y) { + x?.is(y) ? 'foo' : 'bar' + } + } + new A() + ''' + } }