Change constructor and type name of anonymous classes to empty string

This commit is contained in:
Tamas Vajk
2021-11-19 14:23:58 +01:00
committed by Ian Lynagh
parent b7faa33c60
commit 2dfe50cbaa
4 changed files with 18 additions and 14 deletions

View File

@@ -1104,7 +1104,7 @@ open class KotlinFileExtractor(
useClassSource(c)
}
val pkg = c.packageFqName?.asString() ?: ""
val cls = c.name.asString()
val cls = if (c.isAnonymousObject) "" else c.name.asString()
val pkgId = extractPackage(pkg)
if(c.kind == ClassKind.INTERFACE) {
@Suppress("UNCHECKED_CAST")
@@ -1300,7 +1300,7 @@ open class KotlinFileExtractor(
if (f.symbol is IrConstructorSymbol) {
val returnType = useType(erase(f.returnType))
val shortName = f.returnType.classFqName?.shortName()?.asString() ?: f.name.asString()
val shortName = if (f.returnType.isAnonymous) "" else f.returnType.classFqName?.shortName()?.asString() ?: f.name.asString()
@Suppress("UNCHECKED_CAST")
tw.writeConstrs(id as Label<DbConstructor>, shortName, "$shortName$paramsSignature", returnType.javaResult.id, returnType.kotlinResult.id, parentId, id)
} else {
@@ -1775,7 +1775,7 @@ open class KotlinFileExtractor(
) {
val id = tw.getFreshIdLabel<DbNewexpr>()
val type: TypeResults
val isAnonymous = ((e.type as? IrSimpleType)?.classifier?.owner as? IrClass)?.isAnonymousObject ?: false
val isAnonymous = e.type.isAnonymous
if (isAnonymous) {
if (e.typeArgumentsCount > 0) {
logger.warn("Unexpected type arguments for anonymous class constructor call")
@@ -2405,4 +2405,7 @@ open class KotlinFileExtractor(
tw.writeKtBreakContinueTargets(id, loopId)
}
private val IrType.isAnonymous: Boolean
get() = ((this as? IrSimpleType)?.classifier?.owner as? IrClass)?.isAnonymousObject ?: false
}

View File

@@ -1,7 +1,7 @@
| classes.kt:66:20:66:54 | new Object(...) { ... } | classes.kt:66:20:66:54 | new <no name provided>(...) | file://:0:0:0:0 | Object |
| classes.kt:68:20:68:74 | new Object(...) { ... } | classes.kt:68:20:68:74 | new <no name provided>(...) | file://:0:0:0:0 | Object |
| classes.kt:72:16:77:10 | new Object(...) { ... } | classes.kt:72:16:77:10 | new <no name provided>(...) | file://:0:0:0:0 | Object |
| classes.kt:75:24:75:33 | new Object(...) { ... } | classes.kt:75:24:75:33 | new <no name provided>(...) | file://:0:0:0:0 | Object |
| classes.kt:81:16:81:38 | new Interface1(...) { ... } | classes.kt:81:16:81:38 | new <no name provided>(...) | file://:0:0:0:0 | Interface1 |
| classes.kt:85:16:85:25 | new Object(...) { ... } | classes.kt:85:16:85:25 | new <no name provided>(...) | file://:0:0:0:0 | Object |
| classes.kt:89:16:89:44 | new Interface3<Integer>(...) { ... } | classes.kt:89:16:89:44 | new <no name provided>(...) | file://:0:0:0:0 | Interface3<Integer> |
| classes.kt:66:20:66:54 | new Object(...) { ... } | classes.kt:66:20:66:54 | new (...) | | file://:0:0:0:0 | Object |
| classes.kt:68:20:68:74 | new Object(...) { ... } | classes.kt:68:20:68:74 | new (...) | | file://:0:0:0:0 | Object |
| classes.kt:72:16:77:10 | new Object(...) { ... } | classes.kt:72:16:77:10 | new (...) | | file://:0:0:0:0 | Object |
| classes.kt:75:24:75:33 | new Object(...) { ... } | classes.kt:75:24:75:33 | new (...) | | file://:0:0:0:0 | Object |
| classes.kt:81:16:81:38 | new Interface1(...) { ... } | classes.kt:81:16:81:38 | new (...) | | file://:0:0:0:0 | Interface1 |
| classes.kt:85:16:85:25 | new Object(...) { ... } | classes.kt:85:16:85:25 | new (...) | | file://:0:0:0:0 | Object |
| classes.kt:89:16:89:44 | new Interface3<Integer>(...) { ... } | classes.kt:89:16:89:44 | new (...) | | file://:0:0:0:0 | Interface3<Integer> |

View File

@@ -2,5 +2,6 @@ import java
from AnonymousClass c
where c.fromSource()
select c, c.getClassInstanceExpr(), c.getClassInstanceExpr().getTypeName()
select c, c.getClassInstanceExpr(),
c.getClassInstanceExpr().getConstructor().getDeclaringType().getName(),
c.getClassInstanceExpr().getTypeName()

View File

@@ -231,8 +231,8 @@
| exprs.kt:111:9:111:18 | a2 | exprs.kt:110:13:115:5 | getObject | LocalVariableDeclExpr |
| exprs.kt:111:18:111:18 | 2 | exprs.kt:110:13:115:5 | getObject | IntegerLiteral |
| exprs.kt:112:16:114:9 | <Stmt> | exprs.kt:110:13:115:5 | getObject | StmtExpr |
| exprs.kt:112:16:114:9 | <obinit>(...) | exprs.kt:112:16:114:9 | <no name provided> | MethodAccess |
| exprs.kt:112:16:114:9 | new <no name provided>(...) | exprs.kt:110:13:115:5 | getObject | ClassInstanceExpr |
| exprs.kt:112:16:114:9 | <obinit>(...) | exprs.kt:112:16:114:9 | | MethodAccess |
| exprs.kt:112:16:114:9 | new (...) | exprs.kt:110:13:115:5 | getObject | ClassInstanceExpr |
| exprs.kt:113:13:113:49 | ...=... | exprs.kt:112:16:114:9 | <obinit> | AssignExpr |
| exprs.kt:113:13:113:49 | a3 | exprs.kt:112:16:114:9 | <obinit> | VarAccess |
| exprs.kt:113:13:113:49 | a3 | exprs.kt:113:13:113:49 | <get-a3> | VarAccess |