Kotlin: Make more methods private

This commit is contained in:
Ian Lynagh
2022-06-27 18:08:06 +01:00
parent c72377cf2c
commit 4e4b34290b
3 changed files with 58 additions and 58 deletions

View File

@@ -181,7 +181,7 @@ open class KotlinFileExtractor(
} }
} }
fun extractTypeParameter(tp: IrTypeParameter, apparentIndex: Int, javaTypeParameter: JavaTypeParameter?): Label<out DbTypevariable>? { private fun extractTypeParameter(tp: IrTypeParameter, apparentIndex: Int, javaTypeParameter: JavaTypeParameter?): Label<out DbTypevariable>? {
with("type parameter", tp) { with("type parameter", tp) {
val parentId = getTypeParameterParentLabel(tp) ?: return null val parentId = getTypeParameterParentLabel(tp) ?: return null
val id = tw.getLabelFor<DbTypevariable>(getTypeParameterLabel(tp)) val id = tw.getLabelFor<DbTypevariable>(getTypeParameterLabel(tp))
@@ -216,7 +216,7 @@ open class KotlinFileExtractor(
} }
} }
fun extractVisibility(elementForLocation: IrElement, id: Label<out DbModifiable>, v: DescriptorVisibility) { private fun extractVisibility(elementForLocation: IrElement, id: Label<out DbModifiable>, v: DescriptorVisibility) {
with("visibility", elementForLocation) { with("visibility", elementForLocation) {
when (v) { when (v) {
DescriptorVisibilities.PRIVATE -> addModifiers(id, "private") DescriptorVisibilities.PRIVATE -> addModifiers(id, "private")
@@ -250,7 +250,7 @@ open class KotlinFileExtractor(
} }
} }
fun extractClassModifiers(c: IrClass, id: Label<out DbClassorinterface>) { private fun extractClassModifiers(c: IrClass, id: Label<out DbClassorinterface>) {
with("class modifiers", c) { with("class modifiers", c) {
when (c.modality) { when (c.modality) {
Modality.FINAL -> addModifiers(id, "final") Modality.FINAL -> addModifiers(id, "final")
@@ -371,7 +371,7 @@ open class KotlinFileExtractor(
tw.writeHasLocation(stmtId, locId) tw.writeHasLocation(stmtId, locId)
} }
fun extractObinitFunction(c: IrClass, parentId: Label<out DbClassorinterface>) { private fun extractObinitFunction(c: IrClass, parentId: Label<out DbClassorinterface>) {
// add method: // add method:
val obinitLabel = getObinitLabel(c) val obinitLabel = getObinitLabel(c)
val obinitId = tw.getLabelFor<DbMethod>(obinitLabel) val obinitId = tw.getLabelFor<DbMethod>(obinitLabel)
@@ -506,7 +506,7 @@ open class KotlinFileExtractor(
data class FieldResult(val id: Label<DbField>, val name: String) data class FieldResult(val id: Label<DbField>, val name: String)
fun useCompanionObjectClassInstance(c: IrClass): FieldResult? { private fun useCompanionObjectClassInstance(c: IrClass): FieldResult? {
val parent = c.parent val parent = c.parent
if(!c.isCompanion) { if(!c.isCompanion) {
logger.error("Using companion instance for non-companion class") logger.error("Using companion instance for non-companion class")
@@ -524,7 +524,7 @@ open class KotlinFileExtractor(
} }
} }
fun useObjectClassInstance(c: IrClass): FieldResult { private fun useObjectClassInstance(c: IrClass): FieldResult {
if(!c.isNonCompanionObject) { if(!c.isNonCompanionObject) {
logger.error("Using instance for non-object class") logger.error("Using instance for non-object class")
} }
@@ -719,13 +719,13 @@ open class KotlinFileExtractor(
} }
} }
fun extractFunction(f: IrFunction, parentId: Label<out DbReftype>, extractBody: Boolean, extractMethodAndParameterTypeAccesses: Boolean, typeSubstitution: TypeSubstitution?, classTypeArgsIncludingOuterClasses: List<IrTypeArgument>?) = private fun extractFunction(f: IrFunction, parentId: Label<out DbReftype>, extractBody: Boolean, extractMethodAndParameterTypeAccesses: Boolean, typeSubstitution: TypeSubstitution?, classTypeArgsIncludingOuterClasses: List<IrTypeArgument>?) =
if (isFake(f)) if (isFake(f))
null null
else else
forceExtractFunction(f, parentId, extractBody, extractMethodAndParameterTypeAccesses, typeSubstitution, classTypeArgsIncludingOuterClasses, null, null) forceExtractFunction(f, parentId, extractBody, extractMethodAndParameterTypeAccesses, typeSubstitution, classTypeArgsIncludingOuterClasses, null, null)
fun forceExtractFunction(f: IrFunction, parentId: Label<out DbReftype>, extractBody: Boolean, extractMethodAndParameterTypeAccesses: Boolean, typeSubstitution: TypeSubstitution?, classTypeArgsIncludingOuterClasses: List<IrTypeArgument>?, idOverride: Label<DbMethod>?, locOverride: Label<DbLocation>?): Label<out DbCallable> { private fun forceExtractFunction(f: IrFunction, parentId: Label<out DbReftype>, extractBody: Boolean, extractMethodAndParameterTypeAccesses: Boolean, typeSubstitution: TypeSubstitution?, classTypeArgsIncludingOuterClasses: List<IrTypeArgument>?, idOverride: Label<DbMethod>?, locOverride: Label<DbLocation>?): Label<out DbCallable> {
with("function", f) { with("function", f) {
DeclarationStackAdjuster(f).use { DeclarationStackAdjuster(f).use {
@@ -828,7 +828,7 @@ open class KotlinFileExtractor(
&& f.symbol !is IrConstructorSymbol // not a constructor && f.symbol !is IrConstructorSymbol // not a constructor
} }
fun extractField(f: IrField, parentId: Label<out DbReftype>): Label<out DbField> { private fun extractField(f: IrField, parentId: Label<out DbReftype>): Label<out DbField> {
with("field", f) { with("field", f) {
DeclarationStackAdjuster(f).use { DeclarationStackAdjuster(f).use {
declarationStack.push(f) declarationStack.push(f)
@@ -862,7 +862,7 @@ open class KotlinFileExtractor(
return id return id
} }
fun extractProperty(p: IrProperty, parentId: Label<out DbReftype>, extractBackingField: Boolean, extractFunctionBodies: Boolean, typeSubstitution: TypeSubstitution?, classTypeArgsIncludingOuterClasses: List<IrTypeArgument>?) { private fun extractProperty(p: IrProperty, parentId: Label<out DbReftype>, extractBackingField: Boolean, extractFunctionBodies: Boolean, typeSubstitution: TypeSubstitution?, classTypeArgsIncludingOuterClasses: List<IrTypeArgument>?) {
with("property", p) { with("property", p) {
if (isFake(p)) return if (isFake(p)) return
@@ -931,7 +931,7 @@ open class KotlinFileExtractor(
} }
} }
fun extractEnumEntry(ee: IrEnumEntry, parentId: Label<out DbReftype>, extractTypeAccess: Boolean) { private fun extractEnumEntry(ee: IrEnumEntry, parentId: Label<out DbReftype>, extractTypeAccess: Boolean) {
with("enum entry", ee) { with("enum entry", ee) {
DeclarationStackAdjuster(ee).use { DeclarationStackAdjuster(ee).use {
val id = useEnumEntry(ee) val id = useEnumEntry(ee)
@@ -953,7 +953,7 @@ open class KotlinFileExtractor(
} }
} }
fun extractTypeAlias(ta: IrTypeAlias) { private fun extractTypeAlias(ta: IrTypeAlias) {
with("type alias", ta) { with("type alias", ta) {
if (ta.typeParameters.isNotEmpty()) { if (ta.typeParameters.isNotEmpty()) {
// TODO: Extract this information // TODO: Extract this information
@@ -968,7 +968,7 @@ open class KotlinFileExtractor(
} }
} }
fun extractBody(b: IrBody, callable: Label<out DbCallable>) { private fun extractBody(b: IrBody, callable: Label<out DbCallable>) {
with("body", b) { with("body", b) {
when (b) { when (b) {
is IrBlockBody -> extractBlockBody(b, callable) is IrBlockBody -> extractBlockBody(b, callable)
@@ -981,7 +981,7 @@ open class KotlinFileExtractor(
} }
} }
fun extractBlockBody(b: IrBlockBody, callable: Label<out DbCallable>) { private fun extractBlockBody(b: IrBlockBody, callable: Label<out DbCallable>) {
with("block body", b) { with("block body", b) {
val id = tw.getFreshIdLabel<DbBlock>() val id = tw.getFreshIdLabel<DbBlock>()
val locId = tw.getLocation(b) val locId = tw.getLocation(b)
@@ -993,7 +993,7 @@ open class KotlinFileExtractor(
} }
} }
fun extractSyntheticBody(b: IrSyntheticBody, callable: Label<out DbCallable>) { private fun extractSyntheticBody(b: IrSyntheticBody, callable: Label<out DbCallable>) {
with("synthetic body", b) { with("synthetic body", b) {
when (b.kind) { when (b.kind) {
IrSyntheticBodyKind.ENUM_VALUES -> tw.writeKtSyntheticBody(callable, 1) IrSyntheticBodyKind.ENUM_VALUES -> tw.writeKtSyntheticBody(callable, 1)
@@ -1002,7 +1002,7 @@ open class KotlinFileExtractor(
} }
} }
fun extractExpressionBody(b: IrExpressionBody, callable: Label<out DbCallable>) { private fun extractExpressionBody(b: IrExpressionBody, callable: Label<out DbCallable>) {
with("expression body", b) { with("expression body", b) {
val blockId = tw.getFreshIdLabel<DbBlock>() val blockId = tw.getFreshIdLabel<DbBlock>()
val locId = tw.getLocation(b) val locId = tw.getLocation(b)
@@ -1026,7 +1026,7 @@ open class KotlinFileExtractor(
return v return v
} }
fun extractVariable(v: IrVariable, callable: Label<out DbCallable>, parent: Label<out DbStmtparent>, idx: Int) { private fun extractVariable(v: IrVariable, callable: Label<out DbCallable>, parent: Label<out DbStmtparent>, idx: Int) {
with("variable", v) { with("variable", v) {
val stmtId = tw.getFreshIdLabel<DbLocalvariabledeclstmt>() val stmtId = tw.getFreshIdLabel<DbLocalvariabledeclstmt>()
val locId = tw.getLocation(getVariableLocationProvider(v)) val locId = tw.getLocation(getVariableLocationProvider(v))
@@ -1036,7 +1036,7 @@ open class KotlinFileExtractor(
} }
} }
fun extractVariableExpr(v: IrVariable, callable: Label<out DbCallable>, parent: Label<out DbExprparent>, idx: Int, enclosingStmt: Label<out DbStmt>) { private fun extractVariableExpr(v: IrVariable, callable: Label<out DbCallable>, parent: Label<out DbExprparent>, idx: Int, enclosingStmt: Label<out DbStmt>) {
with("variable expr", v) { with("variable expr", v) {
val varId = useVariable(v) val varId = useVariable(v)
val exprId = tw.getFreshIdLabel<DbLocalvariabledeclexpr>() val exprId = tw.getFreshIdLabel<DbLocalvariabledeclexpr>()
@@ -1060,7 +1060,7 @@ open class KotlinFileExtractor(
} }
} }
fun extractStatement(s: IrStatement, callable: Label<out DbCallable>, parent: Label<out DbStmtparent>, idx: Int) { private fun extractStatement(s: IrStatement, callable: Label<out DbCallable>, parent: Label<out DbStmtparent>, idx: Int) {
with("statement", s) { with("statement", s) {
when(s) { when(s) {
is IrExpression -> { is IrExpression -> {
@@ -1399,7 +1399,7 @@ open class KotlinFileExtractor(
} }
} }
fun findFunction(cls: IrClass, name: String): IrFunction? = cls.declarations.find { it is IrFunction && it.name.asString() == name } as IrFunction? private fun findFunction(cls: IrClass, name: String): IrFunction? = cls.declarations.find { it is IrFunction && it.name.asString() == name } as IrFunction?
val jvmIntrinsicsClass by lazy { val jvmIntrinsicsClass by lazy {
val result = pluginContext.referenceClass(FqName("kotlin.jvm.internal.Intrinsics"))?.owner val result = pluginContext.referenceClass(FqName("kotlin.jvm.internal.Intrinsics"))?.owner
@@ -1407,7 +1407,7 @@ open class KotlinFileExtractor(
result result
} }
fun findJdkIntrinsicOrWarn(name: String, warnAgainstElement: IrElement): IrFunction? { private fun findJdkIntrinsicOrWarn(name: String, warnAgainstElement: IrElement): IrFunction? {
val result = jvmIntrinsicsClass?.let { findFunction(it, name) } val result = jvmIntrinsicsClass?.let { findFunction(it, name) }
if(result == null) { if(result == null) {
logger.errorElement("Couldn't find JVM intrinsic function $name", warnAgainstElement) logger.errorElement("Couldn't find JVM intrinsic function $name", warnAgainstElement)
@@ -1501,7 +1501,7 @@ open class KotlinFileExtractor(
result result
} }
fun isFunction(target: IrFunction, pkgName: String, classNameLogged: String, classNamePredicate: (String) -> Boolean, fName: String, hasQuestionMark: Boolean? = false): Boolean { private fun isFunction(target: IrFunction, pkgName: String, classNameLogged: String, classNamePredicate: (String) -> Boolean, fName: String, hasQuestionMark: Boolean? = false): Boolean {
val verbose = false val verbose = false
fun verboseln(s: String) { if(verbose) println(s) } fun verboseln(s: String) { if(verbose) println(s) }
verboseln("Attempting match for $pkgName $classNameLogged $fName") verboseln("Attempting match for $pkgName $classNameLogged $fName")
@@ -1545,10 +1545,10 @@ open class KotlinFileExtractor(
return true return true
} }
fun isFunction(target: IrFunction, pkgName: String, className: String, fName: String, hasQuestionMark: Boolean? = false) = private fun isFunction(target: IrFunction, pkgName: String, className: String, fName: String, hasQuestionMark: Boolean? = false) =
isFunction(target, pkgName, className, { it == className }, fName, hasQuestionMark) isFunction(target, pkgName, className, { it == className }, fName, hasQuestionMark)
fun isNumericFunction(target: IrFunction, fName: String): Boolean { private fun isNumericFunction(target: IrFunction, fName: String): Boolean {
return isFunction(target, "kotlin", "Int", fName) || return isFunction(target, "kotlin", "Int", fName) ||
isFunction(target, "kotlin", "Byte", fName) || isFunction(target, "kotlin", "Byte", fName) ||
isFunction(target, "kotlin", "Short", fName) || isFunction(target, "kotlin", "Short", fName) ||
@@ -1557,7 +1557,7 @@ open class KotlinFileExtractor(
isFunction(target, "kotlin", "Double", fName) isFunction(target, "kotlin", "Double", fName)
} }
fun isArrayType(typeName: String) = private fun isArrayType(typeName: String) =
when(typeName) { when(typeName) {
"Array" -> true "Array" -> true
"IntArray" -> true "IntArray" -> true
@@ -1571,7 +1571,7 @@ open class KotlinFileExtractor(
else -> false else -> false
} }
fun extractCall(c: IrCall, callable: Label<out DbCallable>, stmtExprParent: StmtExprParent) { private fun extractCall(c: IrCall, callable: Label<out DbCallable>, stmtExprParent: StmtExprParent) {
with("call", c) { with("call", c) {
val target = tryReplaceSyntheticFunction(c.symbol.owner) val target = tryReplaceSyntheticFunction(c.symbol.owner)
@@ -2250,7 +2250,7 @@ open class KotlinFileExtractor(
else -> null else -> null
} }
fun getUpdateInPlaceRHS(origin: IrStatementOrigin?, isExpectedLhs: (IrExpression?) -> Boolean, updateRhs: IrExpression): IrExpression? { private fun getUpdateInPlaceRHS(origin: IrStatementOrigin?, isExpectedLhs: (IrExpression?) -> Boolean, updateRhs: IrExpression): IrExpression? {
// Check for a desugared in-place update operator, such as "v += e": // Check for a desugared in-place update operator, such as "v += e":
return getStatementOriginOperator(origin)?.let { return getStatementOriginOperator(origin)?.let {
if (updateRhs is IrCall && if (updateRhs is IrCall &&
@@ -2265,7 +2265,7 @@ open class KotlinFileExtractor(
} }
} }
fun writeUpdateInPlaceExpr(origin: IrStatementOrigin, tw: TrapWriter, id: Label<DbAssignexpr>, type: TypeResults, exprParent: ExprParent): Boolean { private fun writeUpdateInPlaceExpr(origin: IrStatementOrigin, tw: TrapWriter, id: Label<DbAssignexpr>, type: TypeResults, exprParent: ExprParent): Boolean {
when(origin) { when(origin) {
IrStatementOrigin.PLUSEQ -> tw.writeExprs_assignaddexpr(id.cast<DbAssignaddexpr>(), type.javaResult.id, exprParent.parent, exprParent.idx) IrStatementOrigin.PLUSEQ -> tw.writeExprs_assignaddexpr(id.cast<DbAssignaddexpr>(), type.javaResult.id, exprParent.parent, exprParent.idx)
IrStatementOrigin.MINUSEQ -> tw.writeExprs_assignsubexpr(id.cast<DbAssignsubexpr>(), type.javaResult.id, exprParent.parent, exprParent.idx) IrStatementOrigin.MINUSEQ -> tw.writeExprs_assignsubexpr(id.cast<DbAssignsubexpr>(), type.javaResult.id, exprParent.parent, exprParent.idx)
@@ -2277,7 +2277,7 @@ open class KotlinFileExtractor(
return true return true
} }
fun tryExtractArrayUpdate(e: IrContainerExpression, callable: Label<out DbCallable>, parent: StmtExprParent): Boolean { private fun tryExtractArrayUpdate(e: IrContainerExpression, callable: Label<out DbCallable>, parent: StmtExprParent): Boolean {
/* /*
* We're expecting the pattern * We're expecting the pattern
* { * {
@@ -2348,7 +2348,7 @@ open class KotlinFileExtractor(
return false return false
} }
fun extractExpressionStmt(e: IrExpression, callable: Label<out DbCallable>, parent: Label<out DbStmtparent>, idx: Int) { private fun extractExpressionStmt(e: IrExpression, callable: Label<out DbCallable>, parent: Label<out DbStmtparent>, idx: Int) {
extractExpression(e, callable, StmtParent(parent, idx)) extractExpression(e, callable, StmtParent(parent, idx))
} }
@@ -2356,7 +2356,7 @@ open class KotlinFileExtractor(
extractExpression(e, callable, ExprParent(parent, idx, enclosingStmt)) extractExpression(e, callable, ExprParent(parent, idx, enclosingStmt))
} }
fun extractExpression(e: IrExpression, callable: Label<out DbCallable>, parent: StmtExprParent) { private fun extractExpression(e: IrExpression, callable: Label<out DbCallable>, parent: StmtExprParent) {
with("expression", e) { with("expression", e) {
when(e) { when(e) {
is IrDelegatingConstructorCall -> { is IrDelegatingConstructorCall -> {
@@ -3819,7 +3819,7 @@ open class KotlinFileExtractor(
} }
} }
fun extractVarargElement(e: IrVarargElement, callable: Label<out DbCallable>, parent: Label<out DbExprparent>, idx: Int, enclosingStmt: Label<out DbStmt>) { private fun extractVarargElement(e: IrVarargElement, callable: Label<out DbCallable>, parent: Label<out DbExprparent>, idx: Int, enclosingStmt: Label<out DbStmt>) {
with("vararg element", e) { with("vararg element", e) {
val argExpr = when(e) { val argExpr = when(e) {
is IrExpression -> e is IrExpression -> e
@@ -4011,7 +4011,7 @@ open class KotlinFileExtractor(
return initId return initId
} }
fun extractTypeOperatorCall(e: IrTypeOperatorCall, callable: Label<out DbCallable>, parent: Label<out DbExprparent>, idx: Int, enclosingStmt: Label<out DbStmt>) { private fun extractTypeOperatorCall(e: IrTypeOperatorCall, callable: Label<out DbCallable>, parent: Label<out DbExprparent>, idx: Int, enclosingStmt: Label<out DbStmt>) {
with("type operator call", e) { with("type operator call", e) {
when(e.operator) { when(e.operator) {
IrTypeOperator.CAST -> { IrTypeOperator.CAST -> {

View File

@@ -49,7 +49,7 @@ open class KotlinUsesExtractor(
javaLangObject?.typeWith() javaLangObject?.typeWith()
} }
fun usePackage(pkg: String): Label<out DbPackage> { private fun usePackage(pkg: String): Label<out DbPackage> {
return extractPackage(pkg) return extractPackage(pkg)
} }
@@ -154,12 +154,12 @@ open class KotlinUsesExtractor(
} ?: argsIncludingOuterClasses } ?: argsIncludingOuterClasses
} }
fun isStaticClass(c: IrClass) = c.visibility != DescriptorVisibilities.LOCAL && !c.isInner private fun isStaticClass(c: IrClass) = c.visibility != DescriptorVisibilities.LOCAL && !c.isInner
// Gets nested inner classes starting at `c` and proceeding outwards to the innermost enclosing static class. // Gets nested inner classes starting at `c` and proceeding outwards to the innermost enclosing static class.
// For example, for (java syntax) `class A { static class B { class C { class D { } } } }`, // For example, for (java syntax) `class A { static class B { class C { class D { } } } }`,
// `nonStaticParentsWithSelf(D)` = `[D, C, B]`. // `nonStaticParentsWithSelf(D)` = `[D, C, B]`.
fun parentsWithTypeParametersInScope(c: IrClass): List<IrDeclarationParent> { private fun parentsWithTypeParametersInScope(c: IrClass): List<IrDeclarationParent> {
val parentsList = c.parentsWithSelf.toList() val parentsList = c.parentsWithSelf.toList()
val firstOuterClassIdx = parentsList.indexOfFirst { it is IrClass && isStaticClass(it) } val firstOuterClassIdx = parentsList.indexOfFirst { it is IrClass && isStaticClass(it) }
return if (firstOuterClassIdx == -1) parentsList else parentsList.subList(0, firstOuterClassIdx + 1) return if (firstOuterClassIdx == -1) parentsList else parentsList.subList(0, firstOuterClassIdx + 1)
@@ -168,14 +168,14 @@ open class KotlinUsesExtractor(
// Gets the type parameter symbols that are in scope for class `c` in Kotlin order (i.e. for // Gets the type parameter symbols that are in scope for class `c` in Kotlin order (i.e. for
// `class NotInScope<T> { static class OutermostInScope<A, B> { class QueryClass<C, D> { } } }`, // `class NotInScope<T> { static class OutermostInScope<A, B> { class QueryClass<C, D> { } } }`,
// `getTypeParametersInScope(QueryClass)` = `[C, D, A, B]`. // `getTypeParametersInScope(QueryClass)` = `[C, D, A, B]`.
fun getTypeParametersInScope(c: IrClass) = private fun getTypeParametersInScope(c: IrClass) =
parentsWithTypeParametersInScope(c).mapNotNull({ getTypeParameters(it) }).flatten() parentsWithTypeParametersInScope(c).mapNotNull({ getTypeParameters(it) }).flatten()
// Returns a map from `c`'s type variables in scope to type arguments `argsIncludingOuterClasses`. // Returns a map from `c`'s type variables in scope to type arguments `argsIncludingOuterClasses`.
// Hack for the time being: the substituted types are always nullable, to prevent downstream code // Hack for the time being: the substituted types are always nullable, to prevent downstream code
// from replacing a generic parameter by a primitive. As and when we extract Kotlin types we will // from replacing a generic parameter by a primitive. As and when we extract Kotlin types we will
// need to track this information in more detail. // need to track this information in more detail.
fun makeTypeGenericSubstitutionMap(c: IrClass, argsIncludingOuterClasses: List<IrTypeArgument>) = private fun makeTypeGenericSubstitutionMap(c: IrClass, argsIncludingOuterClasses: List<IrTypeArgument>) =
getTypeParametersInScope(c).map({ it.symbol }).zip(argsIncludingOuterClasses.map { it.withQuestionMark(true) }).toMap() getTypeParametersInScope(c).map({ it.symbol }).zip(argsIncludingOuterClasses.map { it.withQuestionMark(true) }).toMap()
fun makeGenericSubstitutionFunction(c: IrClass, argsIncludingOuterClasses: List<IrTypeArgument>) = fun makeGenericSubstitutionFunction(c: IrClass, argsIncludingOuterClasses: List<IrTypeArgument>) =
@@ -239,13 +239,13 @@ open class KotlinUsesExtractor(
private fun isArray(t: IrSimpleType) = t.isBoxedArray || t.isPrimitiveArray() private fun isArray(t: IrSimpleType) = t.isBoxedArray || t.isPrimitiveArray()
fun extractClassLaterIfExternal(c: IrClass) { private fun extractClassLaterIfExternal(c: IrClass) {
if (isExternalDeclaration(c)) { if (isExternalDeclaration(c)) {
extractExternalClassLater(c) extractExternalClassLater(c)
} }
} }
fun extractExternalEnclosingClassLater(d: IrDeclaration) { private fun extractExternalEnclosingClassLater(d: IrDeclaration) {
when (val parent = d.parent) { when (val parent = d.parent) {
is IrClass -> extractExternalClassLater(parent) is IrClass -> extractExternalClassLater(parent)
is IrFunction -> extractExternalEnclosingClassLater(parent) is IrFunction -> extractExternalEnclosingClassLater(parent)
@@ -254,7 +254,7 @@ open class KotlinUsesExtractor(
} }
} }
fun extractPropertyLaterIfExternalFileMember(p: IrProperty) { private fun extractPropertyLaterIfExternalFileMember(p: IrProperty) {
if (isExternalFileClassMember(p)) { if (isExternalFileClassMember(p)) {
extractExternalClassLater(p.parentAsClass) extractExternalClassLater(p.parentAsClass)
dependencyCollector?.addDependency(p, externalClassExtractor.propertySignature) dependencyCollector?.addDependency(p, externalClassExtractor.propertySignature)
@@ -262,7 +262,7 @@ open class KotlinUsesExtractor(
} }
} }
fun extractFieldLaterIfExternalFileMember(f: IrField) { private fun extractFieldLaterIfExternalFileMember(f: IrField) {
if (isExternalFileClassMember(f)) { if (isExternalFileClassMember(f)) {
extractExternalClassLater(f.parentAsClass) extractExternalClassLater(f.parentAsClass)
dependencyCollector?.addDependency(f, externalClassExtractor.fieldSignature) dependencyCollector?.addDependency(f, externalClassExtractor.fieldSignature)
@@ -270,7 +270,7 @@ open class KotlinUsesExtractor(
} }
} }
fun extractFunctionLaterIfExternalFileMember(f: IrFunction) { private fun extractFunctionLaterIfExternalFileMember(f: IrFunction) {
if (isExternalFileClassMember(f)) { if (isExternalFileClassMember(f)) {
extractExternalClassLater(f.parentAsClass) extractExternalClassLater(f.parentAsClass)
(f as? IrSimpleFunction)?.correspondingPropertySymbol?.let { (f as? IrSimpleFunction)?.correspondingPropertySymbol?.let {
@@ -301,7 +301,7 @@ open class KotlinUsesExtractor(
externalClassExtractor.extractLater(c) externalClassExtractor.extractLater(c)
} }
fun tryReplaceAndroidSyntheticClass(c: IrClass): IrClass { private fun tryReplaceAndroidSyntheticClass(c: IrClass): IrClass {
// The Android Kotlin Extensions Gradle plugin introduces synthetic functions, fields and classes. The most // The Android Kotlin Extensions Gradle plugin introduces synthetic functions, fields and classes. The most
// obvious signature is that they lack any supertype information even though they are not root classes. // obvious signature is that they lack any supertype information even though they are not root classes.
// If possible, replace them by a real version of the same class. // If possible, replace them by a real version of the same class.
@@ -503,7 +503,7 @@ open class KotlinUsesExtractor(
// but returns boxed arrays with a nullable, invariant component type, with any nested arrays // but returns boxed arrays with a nullable, invariant component type, with any nested arrays
// similarly transformed. For example, Array<out Array<in E>> would become Array<Array<E?>?> // similarly transformed. For example, Array<out Array<in E>> would become Array<Array<E?>?>
// Array<*> will become Array<Any?>. // Array<*> will become Array<Any?>.
fun getInvariantNullableArrayType(arrayType: IrSimpleType): IrSimpleType = private fun getInvariantNullableArrayType(arrayType: IrSimpleType): IrSimpleType =
if (arrayType.isPrimitiveArray()) if (arrayType.isPrimitiveArray())
arrayType arrayType
else { else {
@@ -528,7 +528,7 @@ open class KotlinUsesExtractor(
) )
} }
fun useArrayType(arrayType: IrSimpleType, componentType: IrType, elementType: IrType, dimensions: Int, isPrimitiveArray: Boolean): TypeResults { private fun useArrayType(arrayType: IrSimpleType, componentType: IrType, elementType: IrType, dimensions: Int, isPrimitiveArray: Boolean): TypeResults {
// Ensure we extract Array<Int> as Integer[], not int[], for example: // Ensure we extract Array<Int> as Integer[], not int[], for example:
fun nullableIfNotPrimitive(type: IrType) = if (type.isPrimitiveType() && !isPrimitiveArray) type.makeNullable() else type fun nullableIfNotPrimitive(type: IrType) = if (type.isPrimitiveType() && !isPrimitiveArray) type.makeNullable() else type
@@ -579,7 +579,7 @@ open class KotlinUsesExtractor(
RETURN, GENERIC_ARGUMENT, OTHER RETURN, GENERIC_ARGUMENT, OTHER
} }
fun useSimpleType(s: IrSimpleType, context: TypeContext): TypeResults { private fun useSimpleType(s: IrSimpleType, context: TypeContext): TypeResults {
if (s.abbreviation != null) { if (s.abbreviation != null) {
// TODO: Extract this information // TODO: Extract this information
} }
@@ -810,14 +810,14 @@ open class KotlinUsesExtractor(
return if (f is IrConstructor) f.typeParameters else f.typeParameters.filter { it.parent == f } return if (f is IrConstructor) f.typeParameters else f.typeParameters.filter { it.parent == f }
} }
fun getTypeParameters(dp: IrDeclarationParent): List<IrTypeParameter> = private fun getTypeParameters(dp: IrDeclarationParent): List<IrTypeParameter> =
when(dp) { when(dp) {
is IrClass -> dp.typeParameters is IrClass -> dp.typeParameters
is IrFunction -> getFunctionTypeParameters(dp) is IrFunction -> getFunctionTypeParameters(dp)
else -> listOf() else -> listOf()
} }
fun getEnclosingClass(it: IrDeclarationParent): IrClass? = private fun getEnclosingClass(it: IrDeclarationParent): IrClass? =
when(it) { when(it) {
is IrClass -> it is IrClass -> it
is IrFunction -> getEnclosingClass(it.parent) is IrFunction -> getEnclosingClass(it.parent)
@@ -924,7 +924,7 @@ open class KotlinUsesExtractor(
null null
} ?: t } ?: t
fun getJavaTypeArgument(jt: JavaType, idx: Int) = private fun getJavaTypeArgument(jt: JavaType, idx: Int) =
when(jt) { when(jt) {
is JavaClassifierType -> jt.typeArguments.getOrNull(idx) is JavaClassifierType -> jt.typeArguments.getOrNull(idx)
is JavaArrayType -> if (idx == 0) jt.componentType else null is JavaArrayType -> if (idx == 0) jt.componentType else null
@@ -970,7 +970,7 @@ open class KotlinUsesExtractor(
* allow it to be passed in. * allow it to be passed in.
*/ */
@OptIn(ObsoleteDescriptorBasedAPI::class) @OptIn(ObsoleteDescriptorBasedAPI::class)
fun getFunctionLabel(f: IrFunction, maybeParentId: Label<out DbElement>?, classTypeArgsIncludingOuterClasses: List<IrTypeArgument>?) = private fun getFunctionLabel(f: IrFunction, maybeParentId: Label<out DbElement>?, classTypeArgsIncludingOuterClasses: List<IrTypeArgument>?) =
getFunctionLabel( getFunctionLabel(
f.parent, f.parent,
maybeParentId, maybeParentId,
@@ -1153,7 +1153,7 @@ open class KotlinUsesExtractor(
"kotlin.Boolean", "kotlin.Byte", "kotlin.Char", "kotlin.Double", "kotlin.Float", "kotlin.Int", "kotlin.Long", "kotlin.Number", "kotlin.Short" "kotlin.Boolean", "kotlin.Byte", "kotlin.Char", "kotlin.Double", "kotlin.Float", "kotlin.Int", "kotlin.Long", "kotlin.Number", "kotlin.Short"
) )
fun kotlinFunctionToJavaEquivalent(f: IrFunction, noReplace: Boolean) = private fun kotlinFunctionToJavaEquivalent(f: IrFunction, noReplace: Boolean) =
if (noReplace) if (noReplace)
f f
else else
@@ -1346,14 +1346,14 @@ open class KotlinUsesExtractor(
return "@\"typevar;{$parentLabel};${param.name}\"" return "@\"typevar;{$parentLabel};${param.name}\""
} }
fun useTypeParameter(param: IrTypeParameter) = private fun useTypeParameter(param: IrTypeParameter) =
TypeResult( TypeResult(
tw.getLabelFor<DbTypevariable>(getTypeParameterLabel(param)), tw.getLabelFor<DbTypevariable>(getTypeParameterLabel(param)),
useType(eraseTypeParameter(param)).javaResult.signature, useType(eraseTypeParameter(param)).javaResult.signature,
param.name.asString() param.name.asString()
) )
fun extractModifier(m: String): Label<DbModifier> { private fun extractModifier(m: String): Label<DbModifier> {
val modifierLabel = "@\"modifier;$m\"" val modifierLabel = "@\"modifier;$m\""
val id: Label<DbModifier> = tw.getLabelFor(modifierLabel, { val id: Label<DbModifier> = tw.getLabelFor(modifierLabel, {
tw.writeModifiers(it, m) tw.writeModifiers(it, m)
@@ -1435,7 +1435,7 @@ open class KotlinUsesExtractor(
* Note that `Array<T>` is retained (with `T` itself erased) because these are expected to be lowered to Java * Note that `Array<T>` is retained (with `T` itself erased) because these are expected to be lowered to Java
* arrays, which are not generic. * arrays, which are not generic.
*/ */
fun erase (t: IrType): IrType { private fun erase (t: IrType): IrType {
if (t is IrSimpleType) { if (t is IrSimpleType) {
val classifier = t.classifier val classifier = t.classifier
val owner = classifier.owner val owner = classifier.owner
@@ -1488,7 +1488,7 @@ open class KotlinUsesExtractor(
fun useValueParameter(vp: IrValueParameter, parent: Label<out DbCallable>?): Label<out DbParam> = fun useValueParameter(vp: IrValueParameter, parent: Label<out DbCallable>?): Label<out DbParam> =
tw.getLabelFor(getValueParameterLabel(vp, parent)) tw.getLabelFor(getValueParameterLabel(vp, parent))
fun isDirectlyExposedCompanionObjectField(f: IrField) = private fun isDirectlyExposedCompanionObjectField(f: IrField) =
f.hasAnnotation(FqName("kotlin.jvm.JvmField")) || f.hasAnnotation(FqName("kotlin.jvm.JvmField")) ||
f.correspondingPropertySymbol?.owner?.let { f.correspondingPropertySymbol?.owner?.let {
it.isConst || it.isLateinit it.isConst || it.isLateinit

View File

@@ -68,7 +68,7 @@ fun getIrClassVirtualFile(irClass: IrClass): VirtualFile? {
return null return null
} }
fun getRawIrClassBinaryPath(irClass: IrClass) = private fun getRawIrClassBinaryPath(irClass: IrClass) =
getIrClassVirtualFile(irClass)?.let { getIrClassVirtualFile(irClass)?.let {
val path = it.path val path = it.path
if(it.fileSystem.protocol == StandardFileSystems.JRT_PROTOCOL) if(it.fileSystem.protocol == StandardFileSystems.JRT_PROTOCOL)
@@ -92,4 +92,4 @@ fun getContainingClassOrSelf(decl: IrDeclaration): IrClass? {
} }
fun getJavaEquivalentClassId(c: IrClass) = fun getJavaEquivalentClassId(c: IrClass) =
c.fqNameWhenAvailable?.toUnsafe()?.let { JavaToKotlinClassMap.mapKotlinToJava(it) } c.fqNameWhenAvailable?.toUnsafe()?.let { JavaToKotlinClassMap.mapKotlinToJava(it) }