KAPT+IR: Support @JvmOverloads annotation

This commit is contained in:
Mikhael Bogdanov
2022-02-10 11:40:11 +01:00
parent 7ec19d015c
commit 00f2b83b84
3 changed files with 99 additions and 9 deletions
@@ -15,17 +15,12 @@ import org.jetbrains.kotlin.ir.expressions.IrBlockBody
import org.jetbrains.kotlin.ir.expressions.IrBody import org.jetbrains.kotlin.ir.expressions.IrBody
import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.expressions.IrExpression
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
import org.jetbrains.kotlin.ir.expressions.impl.IrGetFieldImpl import org.jetbrains.kotlin.ir.expressions.impl.*
import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl
import org.jetbrains.kotlin.ir.expressions.impl.IrReturnImpl
import org.jetbrains.kotlin.ir.expressions.impl.IrSetFieldImpl
import org.jetbrains.kotlin.ir.types.impl.IrUninitializedType import org.jetbrains.kotlin.ir.types.impl.IrUninitializedType
import org.jetbrains.kotlin.ir.util.declareSimpleFunctionWithOverrides import org.jetbrains.kotlin.ir.util.declareSimpleFunctionWithOverrides
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.getElementTextWithContext import org.jetbrains.kotlin.psi.psiUtil.*
import org.jetbrains.kotlin.psi.psiUtil.pureEndOffset
import org.jetbrains.kotlin.psi.psiUtil.pureStartOffset
import org.jetbrains.kotlin.psi2ir.isConstructorDelegatingToSuper import org.jetbrains.kotlin.psi2ir.isConstructorDelegatingToSuper
import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
@@ -357,8 +352,16 @@ class FunctionGenerator(declarationGenerator: DeclarationGenerator) : Declaratio
valueParameterDescriptor.containingDeclaration.safeAs<ConstructorDescriptor>()?.isAnnotationConstructor() ?: false valueParameterDescriptor.containingDeclaration.safeAs<ConstructorDescriptor>()?.isAnnotationConstructor() ?: false
if (inAnnotation) { if (inAnnotation) {
generateDefaultAnnotationParameterValue(defaultValue, valueParameterDescriptor) generateDefaultAnnotationParameterValue(defaultValue, valueParameterDescriptor)
} else } else if (context.configuration.generateBodies) {
bodyGenerator.generateExpressionBody(defaultValue) bodyGenerator.generateExpressionBody(defaultValue)
} else context.irFactory.createExpressionBody(
IrErrorExpressionImpl(
defaultValue.startOffsetSkippingComments,
defaultValue.endOffset,
context.irBuiltIns.nothingType,
defaultValue::class.java.simpleName
)
)
} }
} }
} }
@@ -1,4 +1,3 @@
// IGNORE_BACKEND: JVM_IR
class State @JvmOverloads constructor( class State @JvmOverloads constructor(
val someInt: Int, val someInt: Int,
@@ -0,0 +1,88 @@
import java.lang.System;
@kotlin.Metadata()
public final class State {
private final int someInt = 0;
private final long someLong = 0L;
@org.jetbrains.annotations.NotNull()
private final java.lang.String someString = null;
@kotlin.jvm.JvmOverloads()
public State(int someInt, long someLong, @org.jetbrains.annotations.NotNull()
java.lang.String someString) {
super();
}
public final int getSomeInt() {
return 0;
}
public final long getSomeLong() {
return 0L;
}
@org.jetbrains.annotations.NotNull()
public final java.lang.String getSomeString() {
return null;
}
@kotlin.jvm.JvmOverloads()
public State(int someInt, long someLong) {
super();
}
}
////////////////////
import java.lang.System;
@kotlin.Metadata()
public final class State2 {
@kotlin.jvm.JvmField()
public final int someInt = 0;
@kotlin.jvm.JvmField()
public final long someLong = 0L;
@org.jetbrains.annotations.NotNull()
@kotlin.jvm.JvmField()
public final java.lang.String someString = null;
@kotlin.jvm.JvmOverloads()
public State2(int someInt, long someLong, @org.jetbrains.annotations.NotNull()
java.lang.String someString) {
super();
}
@kotlin.jvm.JvmOverloads()
public final int test(int someInt, long someLong, @org.jetbrains.annotations.NotNull()
java.lang.String someString) {
return 0;
}
public final void someMethod(@org.jetbrains.annotations.NotNull()
java.lang.String str) {
}
public final void methodWithoutArgs() {
}
@kotlin.jvm.JvmOverloads()
public State2(int someInt) {
super();
}
@kotlin.jvm.JvmOverloads()
public State2(int someInt, long someLong) {
super();
}
@kotlin.jvm.JvmOverloads()
public final int test(int someInt) {
return 0;
}
@kotlin.jvm.JvmOverloads()
public final int test(int someInt, long someLong) {
return 0;
}
}