groovy git commit: GROOVY-8439: @CompileStatic cannot compile generic class's static method
Repository: groovy Updated Branches: refs/heads/GROOVY_2_4_X c6f1a8151 -> 2f7d9ddcb GROOVY-8439: @CompileStatic cannot compile generic class's static method Project: http://git-wip-us.apache.org/repos/asf/groovy/repo Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/2f7d9ddc Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/2f7d9ddc Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/2f7d9ddc Branch: refs/heads/GROOVY_2_4_X Commit: 2f7d9ddcb87554ed8c158b1cd568483835367bf0 Parents: c6f1a81 Author: danielsun1106Authored: Sat Mar 10 22:45:53 2018 +0800 Committer: danielsun1106 Committed: Sat Mar 10 22:45:53 2018 +0800 -- .../codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -- http://git-wip-us.apache.org/repos/asf/groovy/blob/2f7d9ddc/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java -- diff --git a/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java b/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java index 734e618..26cec8d 100644 --- a/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java +++ b/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java @@ -2014,7 +2014,7 @@ public abstract class StaticTypeCheckingSupport { Map map; if (mn.isStatic()) { -map = new HashMap<>(); +map = new HashMap (); } else { map = getGenericsParameterMapOfThis(mn.getDeclaringClass()); }
groovy git commit: GROOVY-8439: @CompileStatic cannot compile generic class's static method
Repository: groovy Updated Branches: refs/heads/GROOVY_2_4_X 96748cca8 -> c6f1a8151 GROOVY-8439: @CompileStatic cannot compile generic class's static method (cherry picked from commit 7b73c6a) Project: http://git-wip-us.apache.org/repos/asf/groovy/repo Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/c6f1a815 Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/c6f1a815 Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/c6f1a815 Branch: refs/heads/GROOVY_2_4_X Commit: c6f1a815133ceef9234fa2da5ccf51b4d5f82367 Parents: 96748cc Author: danielsun1106Authored: Sat Mar 10 22:41:11 2018 +0800 Committer: danielsun1106 Committed: Sat Mar 10 22:41:11 2018 +0800 -- .../transform/stc/StaticTypeCheckingSupport.java | 14 ++ .../transform/stc/StaticTypeCheckingVisitor.java | 2 ++ 2 files changed, 12 insertions(+), 4 deletions(-) -- http://git-wip-us.apache.org/repos/asf/groovy/blob/c6f1a815/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java -- diff --git a/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java b/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java index 0e08127..734e618 100644 --- a/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java +++ b/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java @@ -2010,10 +2010,16 @@ public abstract class StaticTypeCheckingSupport { } static Map extractGenericsParameterMapOfThis(MethodNode mn) { -if (mn==null) return null; -Map map = getGenericsParameterMapOfThis(mn.getDeclaringClass()); -map = mergeGenerics(map, mn.getGenericsTypes()); -return map; +if (mn == null) return null; + +Map map; +if (mn.isStatic()) { +map = new HashMap<>(); +} else { +map = getGenericsParameterMapOfThis(mn.getDeclaringClass()); +} + +return mergeGenerics(map, mn.getGenericsTypes()); } private static Map mergeGenerics(Map current, GenericsType[] newGenerics) { http://git-wip-us.apache.org/repos/asf/groovy/blob/c6f1a815/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java -- diff --git a/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java b/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java index 93ea99c..dbc5dc6 100644 --- a/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java +++ b/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java @@ -2709,6 +2709,7 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport { } } boolean lastArg = i == length - 1; + if (lastArg && inferredType.isArray()) { if (inferredType.getComponentType().equals(originType)) { inferredType = originType; @@ -2716,6 +2717,7 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport { } else if (!typeCheckMethodArgumentWithGenerics(originType, inferredType, lastArg)) { addError("Expected parameter of type "+ inferredType.toString(false)+" but got "+originType.toString(false), closureParam.getType()); } + typeCheckingContext.controlStructureVariables.put(closureParam, inferredType); } }
groovy git commit: GROOVY-8439: @CompileStatic cannot compile generic class's static method
Repository: groovy Updated Branches: refs/heads/GROOVY_2_5_X 92c3e4492 -> dae251c5d GROOVY-8439: @CompileStatic cannot compile generic class's static method (cherry picked from commit 7b73c6a) Project: http://git-wip-us.apache.org/repos/asf/groovy/repo Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/dae251c5 Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/dae251c5 Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/dae251c5 Branch: refs/heads/GROOVY_2_5_X Commit: dae251c5d43a0b819392d6c3ce11182c5f064ecb Parents: 92c3e44 Author: danielsun1106Authored: Sat Mar 10 22:16:06 2018 +0800 Committer: danielsun1106 Committed: Sat Mar 10 22:38:43 2018 +0800 -- .../stc/StaticTypeCheckingSupport.java | 14 +++-- .../stc/StaticTypeCheckingVisitor.java | 2 + src/test/groovy/bugs/Groovy8439Bug.groovy | 63 3 files changed, 75 insertions(+), 4 deletions(-) -- http://git-wip-us.apache.org/repos/asf/groovy/blob/dae251c5/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java -- diff --git a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java index 5b9622d..c982daa 100644 --- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java +++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java @@ -2015,10 +2015,16 @@ public abstract class StaticTypeCheckingSupport { } static Map extractGenericsParameterMapOfThis(MethodNode mn) { -if (mn==null) return null; -Map map = getGenericsParameterMapOfThis(mn.getDeclaringClass()); -map = mergeGenerics(map, mn.getGenericsTypes()); -return map; +if (mn == null) return null; + +Map map; +if (mn.isStatic()) { +map = new HashMap<>(); +} else { +map = getGenericsParameterMapOfThis(mn.getDeclaringClass()); +} + +return mergeGenerics(map, mn.getGenericsTypes()); } private static Map mergeGenerics(Map current, GenericsType[] newGenerics) { http://git-wip-us.apache.org/repos/asf/groovy/blob/dae251c5/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java -- 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 8b71bda..d200fc5 100644 --- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java +++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java @@ -2737,6 +2737,7 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport { } } boolean lastArg = i == length - 1; + if (lastArg && inferredType.isArray()) { if (inferredType.getComponentType().equals(originType)) { inferredType = originType; @@ -2744,6 +2745,7 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport { } else if (!typeCheckMethodArgumentWithGenerics(originType, inferredType, lastArg)) { addError("Expected parameter of type "+ inferredType.toString(false)+" but got "+originType.toString(false), closureParam.getType()); } + typeCheckingContext.controlStructureVariables.put(closureParam, inferredType); } } http://git-wip-us.apache.org/repos/asf/groovy/blob/dae251c5/src/test/groovy/bugs/Groovy8439Bug.groovy -- diff --git a/src/test/groovy/bugs/Groovy8439Bug.groovy b/src/test/groovy/bugs/Groovy8439Bug.groovy new file mode 100644 index 000..13af477 --- /dev/null +++ b/src/test/groovy/bugs/Groovy8439Bug.groovy @@ -0,0 +1,63 @@ +/* + * 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
groovy git commit: GROOVY-8439: @CompileStatic cannot compile generic class's static method
Repository: groovy Updated Branches: refs/heads/GROOVY_2_6_X 17fb0de31 -> 7b73c6aeb GROOVY-8439: @CompileStatic cannot compile generic class's static method Project: http://git-wip-us.apache.org/repos/asf/groovy/repo Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/7b73c6ae Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/7b73c6ae Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/7b73c6ae Branch: refs/heads/GROOVY_2_6_X Commit: 7b73c6aeb2d399512b6cdfbb6ff4fbef59c33f9a Parents: 17fb0de Author: danielsun1106Authored: Sat Mar 10 22:16:06 2018 +0800 Committer: danielsun1106 Committed: Sat Mar 10 22:36:38 2018 +0800 -- .../stc/StaticTypeCheckingSupport.java | 14 +++-- .../stc/StaticTypeCheckingVisitor.java | 2 + src/test/groovy/bugs/Groovy8439Bug.groovy | 63 3 files changed, 75 insertions(+), 4 deletions(-) -- http://git-wip-us.apache.org/repos/asf/groovy/blob/7b73c6ae/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java -- diff --git a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java index 5f0e983..57cec53 100644 --- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java +++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java @@ -2021,10 +2021,16 @@ public abstract class StaticTypeCheckingSupport { } static Map extractGenericsParameterMapOfThis(MethodNode mn) { -if (mn==null) return null; -Map map = getGenericsParameterMapOfThis(mn.getDeclaringClass()); -map = mergeGenerics(map, mn.getGenericsTypes()); -return map; +if (mn == null) return null; + +Map map; +if (mn.isStatic()) { +map = new HashMap<>(); +} else { +map = getGenericsParameterMapOfThis(mn.getDeclaringClass()); +} + +return mergeGenerics(map, mn.getGenericsTypes()); } private static Map mergeGenerics(Map current, GenericsType[] newGenerics) { http://git-wip-us.apache.org/repos/asf/groovy/blob/7b73c6ae/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java -- 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 28a7ca4..6ff0dd7 100644 --- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java +++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java @@ -2738,6 +2738,7 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport { } } boolean lastArg = i == length - 1; + if (lastArg && inferredType.isArray()) { if (inferredType.getComponentType().equals(originType)) { inferredType = originType; @@ -2745,6 +2746,7 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport { } else if (!typeCheckMethodArgumentWithGenerics(originType, inferredType, lastArg)) { addError("Expected parameter of type "+ inferredType.toString(false)+" but got "+originType.toString(false), closureParam.getType()); } + typeCheckingContext.controlStructureVariables.put(closureParam, inferredType); } } http://git-wip-us.apache.org/repos/asf/groovy/blob/7b73c6ae/src/test/groovy/bugs/Groovy8439Bug.groovy -- diff --git a/src/test/groovy/bugs/Groovy8439Bug.groovy b/src/test/groovy/bugs/Groovy8439Bug.groovy new file mode 100644 index 000..13af477 --- /dev/null +++ b/src/test/groovy/bugs/Groovy8439Bug.groovy @@ -0,0 +1,63 @@ +/* + * 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, + *
groovy git commit: GROOVY-8439: @CompileStatic cannot compile generic class's static method
Repository: groovy Updated Branches: refs/heads/master e154c3e56 -> 3eb491cde GROOVY-8439: @CompileStatic cannot compile generic class's static method Project: http://git-wip-us.apache.org/repos/asf/groovy/repo Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/3eb491cd Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/3eb491cd Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/3eb491cd Branch: refs/heads/master Commit: 3eb491cded846c352952cdb3a6fffed817e14741 Parents: e154c3e Author: danielsun1106Authored: Sat Mar 10 22:16:06 2018 +0800 Committer: danielsun1106 Committed: Sat Mar 10 22:16:06 2018 +0800 -- .../transform/stc/StaticTypeCheckingSupport.java | 14 ++ .../transform/stc/StaticTypeCheckingVisitor.java | 6 +- src/test/groovy/bugs/Groovy8439Bug.groovy | 14 ++ 3 files changed, 25 insertions(+), 9 deletions(-) -- http://git-wip-us.apache.org/repos/asf/groovy/blob/3eb491cd/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java -- diff --git a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java index cd5d977..c13a163 100644 --- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java +++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java @@ -2021,10 +2021,16 @@ public abstract class StaticTypeCheckingSupport { } static Map extractGenericsParameterMapOfThis(MethodNode mn) { -if (mn==null) return null; -Map map = getGenericsParameterMapOfThis(mn.getDeclaringClass()); -map = mergeGenerics(map, mn.getGenericsTypes()); -return map; +if (mn == null) return null; + +Map map; +if (mn.isStatic()) { +map = new HashMap<>(); +} else { +map = getGenericsParameterMapOfThis(mn.getDeclaringClass()); +} + +return mergeGenerics(map, mn.getGenericsTypes()); } private static Map mergeGenerics(Map current, GenericsType[] newGenerics) { http://git-wip-us.apache.org/repos/asf/groovy/blob/3eb491cd/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java -- 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 7881176..800453f 100644 --- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java +++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java @@ -2744,11 +2744,7 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport { inferredType = originType; } } else if (!typeCheckMethodArgumentWithGenerics(originType, inferredType, lastArg)) { -if (!isGenericsPlaceHolderOrArrayOf(originType)) { // the original type is not generics placeholder, use original type directly. See GROOVY-8439 -inferredType = originType; -} else { -addError("Expected parameter of type "+ inferredType.toString(false)+" but got "+originType.toString(false), closureParam.getType()); -} +addError("Expected parameter of type "+ inferredType.toString(false)+" but got "+originType.toString(false), closureParam.getType()); } typeCheckingContext.controlStructureVariables.put(closureParam, inferredType); http://git-wip-us.apache.org/repos/asf/groovy/blob/3eb491cd/src/test/groovy/bugs/Groovy8439Bug.groovy -- diff --git a/src/test/groovy/bugs/Groovy8439Bug.groovy b/src/test/groovy/bugs/Groovy8439Bug.groovy index ccca137..13af477 100644 --- a/src/test/groovy/bugs/Groovy8439Bug.groovy +++ b/src/test/groovy/bugs/Groovy8439Bug.groovy @@ -46,4 +46,18 @@ class Groovy8439Bug extends GroovyTestCase { Test.something(null, []) ''' } + +void testSTCGenerics2() { +assertScript ''' +import groovy.transform.CompileStatic +@CompileStatic +class Test { +static def something(List strList) { +strList.collect { "hello,$it" } +} +} + +assert ["hello,Jochen", "hello,Paul",
groovy git commit: GROOVY-8439: @CompileStatic cannot compile generic class's static method
Repository: groovy Updated Branches: refs/heads/master a8b9be9e6 -> e154c3e56 GROOVY-8439: @CompileStatic cannot compile generic class's static method Project: http://git-wip-us.apache.org/repos/asf/groovy/repo Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/e154c3e5 Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/e154c3e5 Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/e154c3e5 Branch: refs/heads/master Commit: e154c3e560e998e158985316566c7e321579b193 Parents: a8b9be9 Author: danielsun1106Authored: Sat Mar 10 21:43:49 2018 +0800 Committer: danielsun1106 Committed: Sat Mar 10 21:43:49 2018 +0800 -- .../stc/StaticTypeCheckingVisitor.java | 8 +++- src/test/groovy/bugs/Groovy8439Bug.groovy | 49 2 files changed, 56 insertions(+), 1 deletion(-) -- http://git-wip-us.apache.org/repos/asf/groovy/blob/e154c3e5/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java -- 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 c3f0148..7881176 100644 --- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java +++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java @@ -2738,13 +2738,19 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport { } } boolean lastArg = i == length - 1; + if (lastArg && inferredType.isArray()) { if (inferredType.getComponentType().equals(originType)) { inferredType = originType; } } else if (!typeCheckMethodArgumentWithGenerics(originType, inferredType, lastArg)) { -addError("Expected parameter of type "+ inferredType.toString(false)+" but got "+originType.toString(false), closureParam.getType()); +if (!isGenericsPlaceHolderOrArrayOf(originType)) { // the original type is not generics placeholder, use original type directly. See GROOVY-8439 +inferredType = originType; +} else { +addError("Expected parameter of type "+ inferredType.toString(false)+" but got "+originType.toString(false), closureParam.getType()); +} } + typeCheckingContext.controlStructureVariables.put(closureParam, inferredType); } } http://git-wip-us.apache.org/repos/asf/groovy/blob/e154c3e5/src/test/groovy/bugs/Groovy8439Bug.groovy -- diff --git a/src/test/groovy/bugs/Groovy8439Bug.groovy b/src/test/groovy/bugs/Groovy8439Bug.groovy new file mode 100644 index 000..ccca137 --- /dev/null +++ b/src/test/groovy/bugs/Groovy8439Bug.groovy @@ -0,0 +1,49 @@ +/* + * 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 Groovy8439Bug extends GroovyTestCase { +void testSTCGenerics() { +assertScript ''' +import groovy.transform.CompileStatic +@CompileStatic +class Test { +static def something(Task task, Collection variants) { +variants.collectMany { it.sourceFolders }.collect { ConfigurableFileTree tree -> + task.getBuildDir().toPath().relativize(tree.dir.toPath()).toString() + File.separator +} +} +} + +interface BaseVariant { +List getSourceFolders() +} + +interface ConfigurableFileTree { +File getDir() +} + +interface Task { +File getBuildDir() +} + +