GROOVY-8176: tap - exception in phase 'instruction selection' (closes #535)
Project: http://git-wip-us.apache.org/repos/asf/groovy/repo Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/2c63110e Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/2c63110e Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/2c63110e Branch: refs/heads/parrot Commit: 2c63110e9920fa9127d405bca573b2a01f73dbf5 Parents: 55ee3c5 Author: paulk <pa...@asert.com.au> Authored: Fri May 5 13:36:41 2017 +1000 Committer: paulk <pa...@asert.com.au> Committed: Thu May 11 08:10:17 2017 +1000 ---------------------------------------------------------------------- .../groovy/ast/tools/WideningCategories.java | 6 +-- src/test/groovy/bugs/Groovy8176Bug.groovy | 40 ++++++++++++++++++++ 2 files changed, 43 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/groovy/blob/2c63110e/src/main/org/codehaus/groovy/ast/tools/WideningCategories.java ---------------------------------------------------------------------- diff --git a/src/main/org/codehaus/groovy/ast/tools/WideningCategories.java b/src/main/org/codehaus/groovy/ast/tools/WideningCategories.java index a8dcf22..6f89b60 100644 --- a/src/main/org/codehaus/groovy/ast/tools/WideningCategories.java +++ b/src/main/org/codehaus/groovy/ast/tools/WideningCategories.java @@ -232,9 +232,9 @@ public class WideningCategories { // it according to the types provided by the two class nodes ClassNode holderForA = findGenericsTypeHolderForClass(a, lub); ClassNode holderForB = findGenericsTypeHolderForClass(b, lub); - // lets compare their generics type - GenericsType[] agt = holderForA.getGenericsTypes(); - GenericsType[] bgt = holderForB.getGenericsTypes(); + // let's compare their generics type + GenericsType[] agt = holderForA == null ? null : holderForA.getGenericsTypes(); + GenericsType[] bgt = holderForB == null ? null : holderForB.getGenericsTypes(); if (agt==null || bgt==null || agt.length!=bgt.length) { return lub; } http://git-wip-us.apache.org/repos/asf/groovy/blob/2c63110e/src/test/groovy/bugs/Groovy8176Bug.groovy ---------------------------------------------------------------------- diff --git a/src/test/groovy/bugs/Groovy8176Bug.groovy b/src/test/groovy/bugs/Groovy8176Bug.groovy new file mode 100644 index 0000000..5c52122 --- /dev/null +++ b/src/test/groovy/bugs/Groovy8176Bug.groovy @@ -0,0 +1,40 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package groovy.bugs + +class Groovy8176Bug extends GroovyTestCase { + void testTernaryWithTap() { + assertScript ''' + import groovy.transform.CompileStatic + + @CompileStatic + static <M extends Map> M merge(M to, Map from) { + !from ? to : to.tap { + one = from['one'] + two = from['two'] + } + } + + def orig = [:] + def result = merge(orig, [one: 1, two: 2.0]) + assert result == [one: 1, two: 2.0] + assert result.is(orig) + ''' + } +}