[Lombok] Support RawTypes in fields wtih @Singular in K2 version
^KT-53657 Fixed
This commit is contained in:
committed by
teamcity
parent
06119a4670
commit
a78d43c1ec
+8
-6
@@ -186,9 +186,11 @@ class BuilderGenerator(session: FirSession) : FirDeclarationGenerationExtension(
|
|||||||
val addMultipleParameterType: FirTypeRef
|
val addMultipleParameterType: FirTypeRef
|
||||||
val valueParameters: List<ConeLombokValueParameter>
|
val valueParameters: List<ConeLombokValueParameter>
|
||||||
|
|
||||||
|
val fallbackParameterType = DummyJavaClassType.ObjectType.takeIf { javaClassifierType.isRaw }
|
||||||
|
|
||||||
when (typeName) {
|
when (typeName) {
|
||||||
in LombokNames.SUPPORTED_COLLECTIONS -> {
|
in LombokNames.SUPPORTED_COLLECTIONS -> {
|
||||||
val parameterType = javaClassifierType.parameterType(0) ?: return
|
val parameterType = javaClassifierType.parameterType(0) ?: fallbackParameterType ?: return
|
||||||
valueParameters = listOf(
|
valueParameters = listOf(
|
||||||
ConeLombokValueParameter(nameInSingularForm, parameterType.toRef())
|
ConeLombokValueParameter(nameInSingularForm, parameterType.toRef())
|
||||||
)
|
)
|
||||||
@@ -204,8 +206,8 @@ class BuilderGenerator(session: FirSession) : FirDeclarationGenerationExtension(
|
|||||||
}
|
}
|
||||||
|
|
||||||
in LombokNames.SUPPORTED_MAPS -> {
|
in LombokNames.SUPPORTED_MAPS -> {
|
||||||
val keyType = javaClassifierType.parameterType(0) ?: return
|
val keyType = javaClassifierType.parameterType(0) ?: fallbackParameterType ?: return
|
||||||
val valueType = javaClassifierType.parameterType(1) ?: return
|
val valueType = javaClassifierType.parameterType(1) ?: fallbackParameterType ?: return
|
||||||
valueParameters = listOf(
|
valueParameters = listOf(
|
||||||
ConeLombokValueParameter(Name.identifier("key"), keyType.toRef()),
|
ConeLombokValueParameter(Name.identifier("key"), keyType.toRef()),
|
||||||
ConeLombokValueParameter(Name.identifier("value"), valueType.toRef()),
|
ConeLombokValueParameter(Name.identifier("value"), valueType.toRef()),
|
||||||
@@ -217,9 +219,9 @@ class BuilderGenerator(session: FirSession) : FirDeclarationGenerationExtension(
|
|||||||
}
|
}
|
||||||
|
|
||||||
in LombokNames.SUPPORTED_TABLES -> {
|
in LombokNames.SUPPORTED_TABLES -> {
|
||||||
val rowKeyType = javaClassifierType.parameterType(0) ?: return
|
val rowKeyType = javaClassifierType.parameterType(0) ?: fallbackParameterType ?: return
|
||||||
val columnKeyType = javaClassifierType.parameterType(1) ?: return
|
val columnKeyType = javaClassifierType.parameterType(1) ?: fallbackParameterType ?: return
|
||||||
val valueType = javaClassifierType.parameterType(2) ?: return
|
val valueType = javaClassifierType.parameterType(2) ?: fallbackParameterType ?: return
|
||||||
|
|
||||||
valueParameters = listOf(
|
valueParameters = listOf(
|
||||||
ConeLombokValueParameter(Name.identifier("rowKey"), rowKeyType.toRef()),
|
ConeLombokValueParameter(Name.identifier("rowKey"), rowKeyType.toRef()),
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.name.FqName
|
|||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
object JavaClasses {
|
object JavaClasses {
|
||||||
|
val Object = DummyJavaClass("Object", javaLangName("Object"), numberOfTypeParameters = 0)
|
||||||
val Iterable = DummyJavaClass("Iterable", javaLangName("Iterable"), numberOfTypeParameters = 1)
|
val Iterable = DummyJavaClass("Iterable", javaLangName("Iterable"), numberOfTypeParameters = 1)
|
||||||
val Collection = DummyJavaClass("Collection", javaUtilName("Collection"), numberOfTypeParameters = 1)
|
val Collection = DummyJavaClass("Collection", javaUtilName("Collection"), numberOfTypeParameters = 1)
|
||||||
val Map = DummyJavaClass("Map", javaUtilName("Map"), numberOfTypeParameters = 2)
|
val Map = DummyJavaClass("Map", javaUtilName("Map"), numberOfTypeParameters = 2)
|
||||||
|
|||||||
@@ -90,6 +90,10 @@ class DummyJavaClassType(
|
|||||||
override val classifier: JavaClass,
|
override val classifier: JavaClass,
|
||||||
override val typeArguments: List<JavaType?>
|
override val typeArguments: List<JavaType?>
|
||||||
) : JavaClassifierType {
|
) : JavaClassifierType {
|
||||||
|
companion object {
|
||||||
|
val ObjectType = DummyJavaClassType(JavaClasses.Object, typeArguments = emptyList())
|
||||||
|
}
|
||||||
|
|
||||||
override val annotations: Collection<JavaAnnotation>
|
override val annotations: Collection<JavaAnnotation>
|
||||||
get() = emptyList()
|
get() = emptyList()
|
||||||
override val isDeprecatedInJavaDoc: Boolean
|
override val isDeprecatedInJavaDoc: Boolean
|
||||||
|
|||||||
@@ -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"
|
||||||
|
}
|
||||||
|
}
|
||||||
Generated
+6
@@ -61,6 +61,12 @@ public class BlackBoxCodegenTestForLombokGenerated extends AbstractBlackBoxCodeg
|
|||||||
runTest("plugins/lombok/testData/box/builderGuava.kt");
|
runTest("plugins/lombok/testData/box/builderGuava.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("builderRawSingular.kt")
|
||||||
|
public void testBuilderRawSingular() throws Exception {
|
||||||
|
runTest("plugins/lombok/testData/box/builderRawSingular.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("builderSingular.kt")
|
@TestMetadata("builderSingular.kt")
|
||||||
public void testBuilderSingular() throws Exception {
|
public void testBuilderSingular() throws Exception {
|
||||||
|
|||||||
Generated
+6
@@ -61,6 +61,12 @@ public class FirBlackBoxCodegenTestForLombokGenerated extends AbstractFirBlackBo
|
|||||||
runTest("plugins/lombok/testData/box/builderGuava.kt");
|
runTest("plugins/lombok/testData/box/builderGuava.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("builderRawSingular.kt")
|
||||||
|
public void testBuilderRawSingular() throws Exception {
|
||||||
|
runTest("plugins/lombok/testData/box/builderRawSingular.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("builderSingular.kt")
|
@TestMetadata("builderSingular.kt")
|
||||||
public void testBuilderSingular() throws Exception {
|
public void testBuilderSingular() throws Exception {
|
||||||
|
|||||||
Generated
+6
@@ -61,6 +61,12 @@ public class IrBlackBoxCodegenTestForLombokGenerated extends AbstractIrBlackBoxC
|
|||||||
runTest("plugins/lombok/testData/box/builderGuava.kt");
|
runTest("plugins/lombok/testData/box/builderGuava.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("builderRawSingular.kt")
|
||||||
|
public void testBuilderRawSingular() throws Exception {
|
||||||
|
runTest("plugins/lombok/testData/box/builderRawSingular.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("builderSingular.kt")
|
@TestMetadata("builderSingular.kt")
|
||||||
public void testBuilderSingular() throws Exception {
|
public void testBuilderSingular() throws Exception {
|
||||||
|
|||||||
Reference in New Issue
Block a user