[Lombok] Support RawTypes in fields wtih @Singular in K2 version

^KT-53657 Fixed
This commit is contained in:
Dmitriy Novozhilov
2022-09-09 12:57:32 +03:00
committed by teamcity
parent 06119a4670
commit a78d43c1ec
7 changed files with 68 additions and 6 deletions
@@ -186,9 +186,11 @@ class BuilderGenerator(session: FirSession) : FirDeclarationGenerationExtension(
val addMultipleParameterType: FirTypeRef
val valueParameters: List<ConeLombokValueParameter>
val fallbackParameterType = DummyJavaClassType.ObjectType.takeIf { javaClassifierType.isRaw }
when (typeName) {
in LombokNames.SUPPORTED_COLLECTIONS -> {
val parameterType = javaClassifierType.parameterType(0) ?: return
val parameterType = javaClassifierType.parameterType(0) ?: fallbackParameterType ?: return
valueParameters = listOf(
ConeLombokValueParameter(nameInSingularForm, parameterType.toRef())
)
@@ -204,8 +206,8 @@ class BuilderGenerator(session: FirSession) : FirDeclarationGenerationExtension(
}
in LombokNames.SUPPORTED_MAPS -> {
val keyType = javaClassifierType.parameterType(0) ?: return
val valueType = javaClassifierType.parameterType(1) ?: return
val keyType = javaClassifierType.parameterType(0) ?: fallbackParameterType ?: return
val valueType = javaClassifierType.parameterType(1) ?: fallbackParameterType ?: return
valueParameters = listOf(
ConeLombokValueParameter(Name.identifier("key"), keyType.toRef()),
ConeLombokValueParameter(Name.identifier("value"), valueType.toRef()),
@@ -217,9 +219,9 @@ class BuilderGenerator(session: FirSession) : FirDeclarationGenerationExtension(
}
in LombokNames.SUPPORTED_TABLES -> {
val rowKeyType = javaClassifierType.parameterType(0) ?: return
val columnKeyType = javaClassifierType.parameterType(1) ?: return
val valueType = javaClassifierType.parameterType(2) ?: return
val rowKeyType = javaClassifierType.parameterType(0) ?: fallbackParameterType ?: return
val columnKeyType = javaClassifierType.parameterType(1) ?: fallbackParameterType ?: return
val valueType = javaClassifierType.parameterType(2) ?: fallbackParameterType ?: return
valueParameters = listOf(
ConeLombokValueParameter(Name.identifier("rowKey"), rowKeyType.toRef()),
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
object JavaClasses {
val Object = DummyJavaClass("Object", javaLangName("Object"), numberOfTypeParameters = 0)
val Iterable = DummyJavaClass("Iterable", javaLangName("Iterable"), numberOfTypeParameters = 1)
val Collection = DummyJavaClass("Collection", javaUtilName("Collection"), numberOfTypeParameters = 1)
val Map = DummyJavaClass("Map", javaUtilName("Map"), numberOfTypeParameters = 2)
@@ -90,6 +90,10 @@ class DummyJavaClassType(
override val classifier: JavaClass,
override val typeArguments: List<JavaType?>
) : JavaClassifierType {
companion object {
val ObjectType = DummyJavaClassType(JavaClasses.Object, typeArguments = emptyList())
}
override val annotations: Collection<JavaAnnotation>
get() = emptyList()
override val isDeprecatedInJavaDoc: Boolean
+37
View File
@@ -0,0 +1,37 @@
// WITH_STDLIB
// FULL_JDK
// FILE: User.java
import lombok.Builder;
import lombok.Data;
import lombok.Singular;
@Builder
@Data
public class User {
@Singular private java.util.Map numbers;
@Singular private java.util.List statuses;
}
// FILE: test.kt
fun box(): String {
val userBuilder = User.builder()
.status(10)
.status("hello")
.statuses(listOf("world", 20))
.number("1", 1)
.numbers(mapOf(2 to "2"))
val user = userBuilder.build()
val expectedNumbers = mapOf("1" to 1, 2 to "2")
val expectedStatuses = listOf(10, "hello", "world", 20)
return if (
user.numbers == expectedNumbers &&
user.statuses == expectedStatuses
) {
"OK"
} else {
"Error: $user"
}
}
@@ -61,6 +61,12 @@ public class BlackBoxCodegenTestForLombokGenerated extends AbstractBlackBoxCodeg
runTest("plugins/lombok/testData/box/builderGuava.kt");
}
@Test
@TestMetadata("builderRawSingular.kt")
public void testBuilderRawSingular() throws Exception {
runTest("plugins/lombok/testData/box/builderRawSingular.kt");
}
@Test
@TestMetadata("builderSingular.kt")
public void testBuilderSingular() throws Exception {
@@ -61,6 +61,12 @@ public class FirBlackBoxCodegenTestForLombokGenerated extends AbstractFirBlackBo
runTest("plugins/lombok/testData/box/builderGuava.kt");
}
@Test
@TestMetadata("builderRawSingular.kt")
public void testBuilderRawSingular() throws Exception {
runTest("plugins/lombok/testData/box/builderRawSingular.kt");
}
@Test
@TestMetadata("builderSingular.kt")
public void testBuilderSingular() throws Exception {
@@ -61,6 +61,12 @@ public class IrBlackBoxCodegenTestForLombokGenerated extends AbstractIrBlackBoxC
runTest("plugins/lombok/testData/box/builderGuava.kt");
}
@Test
@TestMetadata("builderRawSingular.kt")
public void testBuilderRawSingular() throws Exception {
runTest("plugins/lombok/testData/box/builderRawSingular.kt");
}
@Test
@TestMetadata("builderSingular.kt")
public void testBuilderSingular() throws Exception {