Skip to content

Commit 0d6dbc6

Browse files
authored
Merge pull request github#167 from github/kotlin-cleanup-anon-class-decl-stmt
Remove and replace @anonymousclassdeclstmt with @localtypedeclstmt
2 parents f7fd430 + d559031 commit 0d6dbc6

File tree

6 files changed

+17
-41
lines changed

6 files changed

+17
-41
lines changed

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

+8-9
Original file line numberDiff line numberDiff line change
@@ -131,17 +131,16 @@ open class KotlinFileExtractor(
131131
return id
132132
}
133133

134-
private fun extractAnonymousClassStmt(c: IrClass, callable: Label<out DbCallable>, parent: Label<out DbStmtparent>, idx: Int) {
134+
private fun extracLocalTypeDeclStmt(c: IrClass, callable: Label<out DbCallable>, parent: Label<out DbStmtparent>, idx: Int) {
135135
@Suppress("UNCHECKED_CAST")
136136
val id = extractClassSource(c) as Label<out DbClass>
137-
extractAnonymousClassStmt(id, c, callable, parent, idx)
137+
extracLocalTypeDeclStmt(id, c, callable, parent, idx)
138138
}
139139

140-
private fun extractAnonymousClassStmt(id: Label<out DbClass>, locElement: IrElement, callable: Label<out DbCallable>, parent: Label<out DbStmtparent>, idx: Int) {
141-
// TODO: is this the same as @localtypedeclstmt
142-
val stmtId = tw.getFreshIdLabel<DbAnonymousclassdeclstmt>()
143-
tw.writeStmts_anonymousclassdeclstmt(stmtId, parent, idx, callable)
144-
tw.writeKtAnonymousClassDeclarationStmts(stmtId, id)
140+
private fun extracLocalTypeDeclStmt(id: Label<out DbClass>, locElement: IrElement, callable: Label<out DbCallable>, parent: Label<out DbStmtparent>, idx: Int) {
141+
val stmtId = tw.getFreshIdLabel<DbLocaltypedeclstmt>()
142+
tw.writeStmts_localtypedeclstmt(stmtId, parent, idx, callable)
143+
tw.writeIsLocalClassOrInterface(id, stmtId)
145144
val locId = tw.getLocation(locElement)
146145
tw.writeHasLocation(stmtId, locId)
147146
}
@@ -533,15 +532,15 @@ open class KotlinFileExtractor(
533532
}
534533
is IrClass -> {
535534
if (s.isAnonymousObject) {
536-
extractAnonymousClassStmt(s, callable, parent, idx)
535+
extracLocalTypeDeclStmt(s, callable, parent, idx)
537536
} else {
538537
logger.warnElement(Severity.ErrorSevere, "Found non anonymous IrClass as IrStatement: " + s.javaClass, s)
539538
}
540539
}
541540
is IrFunction -> {
542541
if (s.isLocalFunction()) {
543542
val classId = extractGeneratedClass(s, listOf(pluginContext.irBuiltIns.anyType))
544-
extractAnonymousClassStmt(classId, s, callable, parent, idx)
543+
extracLocalTypeDeclStmt(classId, s, callable, parent, idx)
545544
} else {
546545
logger.warnElement(Severity.ErrorSevere, "Expected to find local function", s)
547546
}

java/ql/lib/config/semmlecode.dbscheme

-6
Original file line numberDiff line numberDiff line change
@@ -588,7 +588,6 @@ case @stmt.kind of
588588
| 21 = @case
589589
| 22 = @catchclause
590590
| 23 = @yieldstmt
591-
| 24 = @anonymousclassdeclstmt
592591
;
593592

594593
#keyset[parent,idx]
@@ -1135,11 +1134,6 @@ ktPropertyBackingFields(
11351134
int backingField: @field ref
11361135
)
11371136

1138-
ktAnonymousClassDeclarationStmts(
1139-
unique int id: @anonymousclassdeclstmt ref,
1140-
int classId: @class ref
1141-
)
1142-
11431137
ktSyntheticBody(
11441138
unique int id: @callable ref,
11451139
int kind: int ref

java/ql/lib/semmle/code/java/ControlFlowGraph.qll

-4
Original file line numberDiff line numberDiff line change
@@ -987,10 +987,6 @@ private module ControlFlowGraphImpl {
987987
completion = YieldCompletion(branchCompletion)
988988
)
989989
)
990-
or
991-
n instanceof KtAnonymousClassDeclarationStmt and
992-
last = n and
993-
completion = NormalCompletion()
994990
}
995991

996992
/**

java/ql/lib/semmle/code/java/Statement.qll

-13
Original file line numberDiff line numberDiff line change
@@ -922,16 +922,3 @@ class KtBreakStmt extends BreakStmt, KtBreakContinueStmt { }
922922

923923
/** A Kotlin `continue` statement. */
924924
class KtContinueStmt extends ContinueStmt, KtBreakContinueStmt { }
925-
926-
class KtAnonymousClassDeclarationStmt extends Stmt, @anonymousclassdeclstmt {
927-
Class c;
928-
929-
KtAnonymousClassDeclarationStmt() { ktAnonymousClassDeclarationStmts(this, c) }
930-
931-
/** Gets the class declaration belonging to this declaration statement. */
932-
AnonymousClass getDeclaration() { result = c }
933-
934-
override string getAPrimaryQlClass() { result = "KtAnonymousClassDeclarationStmt" }
935-
936-
override string toString() { result = "{ ... }" }
937-
}
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
| classes.kt:66:20:66:54 | new Object(...) { ... } | classes.kt:66:20:66:54 | new (...) | | file://:0:0:0:0 | Object | classes.kt:66:20:66:54 | { ... } |
2-
| classes.kt:68:20:68:74 | new Object(...) { ... } | classes.kt:68:20:68:74 | new (...) | | file://:0:0:0:0 | Object | classes.kt:68:20:68:74 | { ... } |
3-
| classes.kt:72:16:77:10 | new Object(...) { ... } | classes.kt:72:16:77:10 | new (...) | | file://:0:0:0:0 | Object | classes.kt:72:16:77:10 | { ... } |
4-
| classes.kt:75:24:75:33 | new Object(...) { ... } | classes.kt:75:24:75:33 | new (...) | | file://:0:0:0:0 | Object | classes.kt:75:24:75:33 | { ... } |
5-
| classes.kt:81:16:81:38 | new Interface1(...) { ... } | classes.kt:81:16:81:38 | new (...) | | file://:0:0:0:0 | Interface1 | classes.kt:81:16:81:38 | { ... } |
6-
| classes.kt:85:16:85:25 | new Object(...) { ... } | classes.kt:85:16:85:25 | new (...) | | file://:0:0:0:0 | Object | classes.kt:85:16:85:25 | { ... } |
7-
| classes.kt:89:16:89:44 | new Interface3<Integer>(...) { ... } | classes.kt:89:16:89:44 | new (...) | | file://:0:0:0:0 | Interface3<Integer> | classes.kt:89:16:89:44 | { ... } |
1+
| classes.kt:66:20:66:54 | new Object(...) { ... } | classes.kt:66:20:66:54 | new (...) | | file://:0:0:0:0 | Object | classes.kt:66:20:66:54 | class ... |
2+
| classes.kt:68:20:68:74 | new Object(...) { ... } | classes.kt:68:20:68:74 | new (...) | | file://:0:0:0:0 | Object | classes.kt:68:20:68:74 | class ... |
3+
| classes.kt:72:16:77:10 | new Object(...) { ... } | classes.kt:72:16:77:10 | new (...) | | file://:0:0:0:0 | Object | classes.kt:72:16:77:10 | class ... |
4+
| classes.kt:75:24:75:33 | new Object(...) { ... } | classes.kt:75:24:75:33 | new (...) | | file://:0:0:0:0 | Object | classes.kt:75:24:75:33 | class ... |
5+
| classes.kt:81:16:81:38 | new Interface1(...) { ... } | classes.kt:81:16:81:38 | new (...) | | file://:0:0:0:0 | Interface1 | classes.kt:81:16:81:38 | class ... |
6+
| classes.kt:85:16:85:25 | new Object(...) { ... } | classes.kt:85:16:85:25 | new (...) | | file://:0:0:0:0 | Object | classes.kt:85:16:85:25 | class ... |
7+
| classes.kt:89:16:89:44 | new Interface3<Integer>(...) { ... } | classes.kt:89:16:89:44 | new (...) | | file://:0:0:0:0 | Interface3<Integer> | classes.kt:89:16:89:44 | class ... |
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import java
22

3-
from AnonymousClass c, KtAnonymousClassDeclarationStmt stmt
4-
where c.fromSource() and stmt.getDeclaration() = c
3+
from AnonymousClass c, LocalTypeDeclStmt stmt
4+
where c.fromSource() and stmt.getLocalType() = c
55
select c, c.getClassInstanceExpr(),
66
c.getClassInstanceExpr().getConstructor().getDeclaringType().getName(),
77
c.getClassInstanceExpr().getTypeName(), stmt

0 commit comments

Comments
 (0)