Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit f8ad93a

Browse files
atorralbaigfoo
authored andcommitted
Add test case for local variable in anonymous init
Also fix another instance of the same issue in extractLocalTypeDeclStmt
1 parent 1926bef commit f8ad93a

9 files changed

Lines changed: 59 additions & 1 deletion

File tree

java/kotlin-extractor/src/main/kotlin/KotlinFileExtractor.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -328,8 +328,9 @@ open class KotlinFileExtractor(
328328
}
329329

330330
private fun extractLocalTypeDeclStmt(c: IrClass, callable: Label<out DbCallable>, parent: Label<out DbStmtparent>, idx: Int) {
331+
val extractStaticInit = c.declarations.none { it is IrAnonymousInitializer }
331332
@Suppress("UNCHECKED_CAST")
332-
val id = extractClassSource(c, true, true) as Label<out DbClass>
333+
val id = extractClassSource(c, true, extractStaticInit) as Label<out DbClass>
333334
extractLocalTypeDeclStmt(id, c, callable, parent, idx)
334335
}
335336

java/ql/test/kotlin/library-tests/classes/PrintAst.expected

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -662,6 +662,45 @@ local_anonymous.kt:
662662
# 29| 1: [ExprStmt] <Expr>;
663663
# 29| 0: [ClassInstanceExpr] new (...)
664664
# 29| -3: [TypeAccess] Object
665+
# 38| 2: [Interface] Interface2
666+
# 39| 3: [Class] Class2
667+
# 39| 1: [Constructor] Class2
668+
# 39| 5: [BlockStmt] { ... }
669+
# 39| 0: [SuperConstructorInvocationStmt] super(...)
670+
# 39| 1: [BlockStmt] { ... }
671+
# 40| 0: [ExprStmt] <Expr>;
672+
# 40| 0: [KtInitializerAssignExpr] ...=...
673+
# 40| 0: [VarAccess] i
674+
# 40| 2: [Method] getI
675+
# 40| 5: [BlockStmt] { ... }
676+
# 40| 0: [ReturnStmt] return ...
677+
# 40| 0: [VarAccess] this.i
678+
# 40| -1: [ThisAccess] this
679+
# 40| 2: [Method] setI
680+
#-----| 4: (Parameters)
681+
# 40| 0: [Parameter] <set-?>
682+
# 40| 5: [BlockStmt] { ... }
683+
# 40| 0: [ExprStmt] <Expr>;
684+
# 40| 0: [AssignExpr] ...=...
685+
# 40| 0: [VarAccess] this.i
686+
# 40| -1: [ThisAccess] this
687+
# 40| 1: [VarAccess] <set-?>
688+
# 40| 2: [FieldDeclaration] Interface2 i;
689+
# 40| -1: [TypeAccess] Interface2
690+
# 40| 0: [StmtExpr] <Stmt>
691+
# 40| 0: [BlockStmt] { ... }
692+
# 40| 0: [LocalTypeDeclStmt] class ...
693+
# 40| 0: [AnonymousClass,LocalClass] new Interface2(...) { ... }
694+
# 40| 1: [Constructor]
695+
# 40| 5: [BlockStmt] { ... }
696+
# 40| 0: [SuperConstructorInvocationStmt] super(...)
697+
# 40| 1: [BlockStmt] { ... }
698+
# 42| 0: [LocalVariableDeclStmt] var ...;
699+
# 42| 1: [LocalVariableDeclExpr] answer
700+
# 42| 0: [StringLiteral] 42
701+
# 40| 1: [ExprStmt] <Expr>;
702+
# 40| 0: [ClassInstanceExpr] new (...)
703+
# 40| -3: [TypeAccess] Interface2
665704
superChain.kt:
666705
# 0| [CompilationUnit] superChain
667706
# 1| 1: [Class,GenericType,ParameterizedType] SuperChain1

java/ql/test/kotlin/library-tests/classes/anonymousClasses.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,4 @@
99
| generic_anonymous.kt:3:19:5:3 | new Object(...) { ... } | generic_anonymous.kt:3:19:5:3 | new (...) | | generic_anonymous.kt:3:19:5:3 | Object | generic_anonymous.kt:3:19:5:3 | class ... |
1010
| local_anonymous.kt:5:16:7:9 | new Object(...) { ... } | local_anonymous.kt:5:16:7:9 | new (...) | | local_anonymous.kt:5:16:7:9 | Object | local_anonymous.kt:5:16:7:9 | class ... |
1111
| local_anonymous.kt:29:31:35:5 | new Object(...) { ... } | local_anonymous.kt:29:31:35:5 | new (...) | | local_anonymous.kt:29:31:35:5 | Object | local_anonymous.kt:29:31:35:5 | class ... |
12+
| local_anonymous.kt:40:14:44:5 | new Interface2(...) { ... } | local_anonymous.kt:40:14:44:5 | new (...) | | local_anonymous.kt:40:14:44:5 | Interface2 | local_anonymous.kt:40:14:44:5 | class ... |

java/ql/test/kotlin/library-tests/classes/classes.expected

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@
4545
| local_anonymous.kt:21:21:21:31 | new Function1<Class1,Unit>(...) { ... } | <anonymous class> | final, private |
4646
| local_anonymous.kt:25:9:25:27 | LocalClass | LocalAnonymous.Class1$LocalClass | final, private |
4747
| local_anonymous.kt:29:31:35:5 | new Object(...) { ... } | <anonymous class> | final, private |
48+
| local_anonymous.kt:39:1:45:1 | Class2 | LocalAnonymous.Class2 | final, public |
49+
| local_anonymous.kt:40:14:44:5 | new Interface2(...) { ... } | <anonymous class> | final, private |
4850
| superChain.kt:1:1:1:33 | SuperChain1 | SuperChain1 | public |
4951
| superChain.kt:2:1:2:60 | SuperChain2 | SuperChain2 | public |
5052
| superChain.kt:3:1:3:60 | SuperChain3 | SuperChain3 | public |

java/ql/test/kotlin/library-tests/classes/ctorCalls.expected

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ superCall
4444
| local_anonymous.kt:21:21:21:31 | super(...) |
4545
| local_anonymous.kt:25:9:25:27 | super(...) |
4646
| local_anonymous.kt:29:31:35:5 | super(...) |
47+
| local_anonymous.kt:39:1:45:1 | super(...) |
48+
| local_anonymous.kt:40:14:44:5 | super(...) |
4749
| superChain.kt:1:1:1:33 | super(...) |
4850
| superChain.kt:2:33:2:57 | super(...) |
4951
| superChain.kt:3:33:3:57 | super(...) |

java/ql/test/kotlin/library-tests/classes/interfaces.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@
33
| classes.kt:59:1:59:23 | Interface1 |
44
| classes.kt:60:1:60:23 | Interface2 |
55
| classes.kt:61:1:61:26 | Interface3 |
6+
| local_anonymous.kt:38:1:38:23 | Interface2 |

java/ql/test/kotlin/library-tests/classes/local_anonymous.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
anonymousObjects
22
| local_anonymous.kt:5:16:7:9 | new (...) | local_anonymous.kt:5:16:7:9 | new Object(...) { ... } | anonymous | local |
33
| local_anonymous.kt:29:31:35:5 | new (...) | local_anonymous.kt:29:31:35:5 | new Object(...) { ... } | anonymous | local |
4+
| local_anonymous.kt:40:14:44:5 | new (...) | local_anonymous.kt:40:14:44:5 | new Interface2(...) { ... } | anonymous | local |
45
localFunctions
56
| local_anonymous.kt:11:9:11:24 | fnLocal | local_anonymous.kt:11:9:11:24 | | not anonymous | local |
67
lambdas

java/ql/test/kotlin/library-tests/classes/local_anonymous.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,3 +34,12 @@ class Class1 {
3434
}
3535
}
3636
}
37+
38+
interface Interface2 {}
39+
class Class2 {
40+
var i = object: Interface2 {
41+
init {
42+
var answer: String = "42" // Local variable in anonymous class initializer
43+
}
44+
}
45+
}

java/ql/test/kotlin/library-tests/classes/superTypes.expected

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@
5858
| local_anonymous.kt:21:21:21:31 | new Function1<Class1,Unit>(...) { ... } | file://<external>/FunctionReference.class:0:0:0:0 | FunctionReference |
5959
| local_anonymous.kt:25:9:25:27 | LocalClass | file://<external>/Object.class:0:0:0:0 | Object |
6060
| local_anonymous.kt:29:31:35:5 | new Object(...) { ... } | file://<external>/Object.class:0:0:0:0 | Object |
61+
| local_anonymous.kt:39:1:45:1 | Class2 | file://<external>/Object.class:0:0:0:0 | Object |
62+
| local_anonymous.kt:40:14:44:5 | new Interface2(...) { ... } | local_anonymous.kt:38:1:38:23 | Interface2 |
6163
| superChain.kt:1:1:1:33 | SuperChain1 | file://<external>/Object.class:0:0:0:0 | Object |
6264
| superChain.kt:1:1:1:33 | SuperChain1<T3,String> | file://<external>/Object.class:0:0:0:0 | Object |
6365
| superChain.kt:1:1:1:33 | SuperChain1<T5,String> | file://<external>/Object.class:0:0:0:0 | Object |

0 commit comments

Comments
 (0)