@@ -176,8 +176,8 @@ class TypeInferenceSTCTest extends StaticTypeCheckingTestCase {
176176 }
177177 A test(Object o) {
178178 if (o instanceof A) {
179- def v = o
180- return v
179+ def a = o
180+ return a
181181 } else {
182182 new A()
183183 }
@@ -269,6 +269,26 @@ class TypeInferenceSTCTest extends StaticTypeCheckingTestCase {
269269 def string = test('two')
270270 assert string == '"two"'
271271 '''
272+
273+ assertScript '''
274+ abstract class Foo {
275+ abstract boolean isBaz()
276+ }
277+ class Bar extends Foo {
278+ final boolean baz = false
279+ }
280+ class Baz extends Foo {
281+ final boolean baz = true
282+ }
283+ void test(Foo foo) {
284+ if (foo instanceof Bar || foo.isBaz()) {
285+ foo.toString()
286+ }
287+ }
288+ test(new Bar())
289+ test(new Baz())
290+ test(new Foo(){ boolean isBaz() { false } })
291+ '''
272292 }
273293
274294 // GROOVY-8337
@@ -401,6 +421,7 @@ class TypeInferenceSTCTest extends StaticTypeCheckingTestCase {
401421 }
402422 assert test(42) == 42
403423 '''
424+
404425 shouldFailWithMessages '''
405426 void test(Integer i) {
406427 if (i instanceof Long) {
@@ -476,7 +497,6 @@ class TypeInferenceSTCTest extends StaticTypeCheckingTestCase {
476497 def test(o) {
477498 o instanceof A ? o.foo() : (o instanceof B ? o.bar() : 3)
478499 }
479-
480500 assert test(new A()) == 1
481501 assert test(new B()) == 2
482502 assert test(new C()) == 3
@@ -1136,19 +1156,18 @@ class TypeInferenceSTCTest extends StaticTypeCheckingTestCase {
11361156 method. set(classNode. methods. find { it. name == ' method' })
11371157 }
11381158 })
1159+
11391160 assertScript '''
11401161 void method() {
11411162 def o
11421163 o = 1
11431164 o = 'String'
11441165 }
11451166 '''
1146-
1147- def inft = method. code. statements[0 ]. expression. leftExpression. getNodeMetaData(StaticTypesMarker . DECLARATION_INFERRED_TYPE )
1148- assert inft instanceof WideningCategories.LowestUpperBoundClassNode
1149- [Comparable , Serializable ]. each {
1150- assert ClassHelper . make(it) in inft. interfaces
1151- }
1167+ ClassNode type = method. code. statements[0 ]. expression. leftExpression. getNodeMetaData(StaticTypesMarker . DECLARATION_INFERRED_TYPE )
1168+ assert type instanceof WideningCategories.LowestUpperBoundClassNode
1169+ assert ClassHelper . make(Comparable ) in type. interfaces
1170+ assert ClassHelper . make(Serializable ) in type. interfaces
11521171
11531172 assertScript '''
11541173 void method() {
@@ -1157,7 +1176,8 @@ class TypeInferenceSTCTest extends StaticTypeCheckingTestCase {
11571176 o = 2
11581177 }
11591178 '''
1160- assert method. code. statements[0 ]. expression. leftExpression. getNodeMetaData(StaticTypesMarker . DECLARATION_INFERRED_TYPE ) == ClassHelper . int_TYPE
1179+ type = method. code. statements[0 ]. expression. leftExpression. getNodeMetaData(StaticTypesMarker . DECLARATION_INFERRED_TYPE )
1180+ assert type == ClassHelper . int_TYPE
11611181
11621182 assertScript '''
11631183 void method() {
@@ -1166,8 +1186,8 @@ class TypeInferenceSTCTest extends StaticTypeCheckingTestCase {
11661186 o = 2
11671187 }
11681188 '''
1169- inft = method. code. statements[0 ]. expression. leftExpression. getNodeMetaData(StaticTypesMarker . DECLARATION_INFERRED_TYPE )
1170- assert inft == ClassHelper . long_TYPE
1189+ type = method. code. statements[0 ]. expression. leftExpression. getNodeMetaData(StaticTypesMarker . DECLARATION_INFERRED_TYPE )
1190+ assert type == ClassHelper . long_TYPE
11711191
11721192 assertScript '''
11731193 void method() {
@@ -1176,7 +1196,8 @@ class TypeInferenceSTCTest extends StaticTypeCheckingTestCase {
11761196 o = new LinkedHashSet()
11771197 }
11781198 '''
1179- assert method. code. statements[0 ]. expression. leftExpression. getNodeMetaData(StaticTypesMarker . DECLARATION_INFERRED_TYPE ) == ClassHelper . make(HashSet )
1199+ type = method. code. statements[0 ]. expression. leftExpression. getNodeMetaData(StaticTypesMarker . DECLARATION_INFERRED_TYPE )
1200+ assert type == ClassHelper . make(HashSet )
11801201 }
11811202
11821203 @Test
0 commit comments