You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by su...@apache.org on 2017/09/27 06:43:53 UTC
groovy git commit: GROOVY-8330: Wrong 'Inconvertible types' error on
casting interface (closes #607)
Repository: groovy
Updated Branches:
refs/heads/master 15607b1ba -> 6ee3977fc
GROOVY-8330: Wrong 'Inconvertible types' error on casting interface
(closes #607)
Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/6ee3977f
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/6ee3977f
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/6ee3977f
Branch: refs/heads/master
Commit: 6ee3977fc88a68e0b5b04b8f775e014296a118c0
Parents: 15607b1
Author: alexey.afanasiev <Al...@jetbrains.com>
Authored: Tue Sep 26 17:43:15 2017 +0300
Committer: sunlan <su...@apache.org>
Committed: Wed Sep 27 14:43:06 2017 +0800
----------------------------------------------------------------------
.../stc/StaticTypeCheckingVisitor.java | 2 ++
.../transform/stc/STCAssignmentTest.groovy | 26 ++++++++++++++++++++
2 files changed, 28 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/groovy/blob/6ee3977f/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 cbb2798..4c55eea 100644
--- a/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
+++ b/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
@@ -3369,6 +3369,8 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport {
return false;
} else if ((expressionType.getModifiers()& Opcodes.ACC_FINAL)==0 && targetType.isInterface()) {
return true;
+ } else if ((targetType.getModifiers()& Opcodes.ACC_FINAL)==0 && expressionType.isInterface()) {
+ return true;
} else if (!isAssignableTo(targetType, expressionType) && !implementsInterfaceOrIsSubclassOf(expressionType, targetType)) {
return false;
}
http://git-wip-us.apache.org/repos/asf/groovy/blob/6ee3977f/src/test/groovy/transform/stc/STCAssignmentTest.groovy
----------------------------------------------------------------------
diff --git a/src/test/groovy/transform/stc/STCAssignmentTest.groovy b/src/test/groovy/transform/stc/STCAssignmentTest.groovy
index 3c00185..acb1c75 100644
--- a/src/test/groovy/transform/stc/STCAssignmentTest.groovy
+++ b/src/test/groovy/transform/stc/STCAssignmentTest.groovy
@@ -872,5 +872,31 @@ class STCAssignmentTest extends StaticTypeCheckingTestCase {
}
'''
}
+
+ void testNarrowingConversion() {
+ assertScript '''
+ interface A1{}
+ interface A2 extends A1{}
+
+ class C1 implements A1{}
+
+ def m(A2 a2) {
+ C1 c1 = (C1) a2
+ }
+ '''
+ }
+
+ void testFinalNarrowingConversion() {
+ shouldFailWithMessages '''
+ interface A1{}
+ interface A2 extends A1{}
+
+ final class C1 implements A1{}
+
+ def m(A2 a2) {
+ C1 c1 = (C1) a2
+ }
+ ''', "Inconvertible types: cannot cast A2 to C1"
+ }
}