[Lombok] Properly support Guava collections with @Singular

^KT-53683 Fixed
This commit is contained in:
Dmitriy Novozhilov
2022-09-09 12:14:12 +03:00
committed by teamcity
parent 69a857649f
commit 2aadaee69f
12 changed files with 253 additions and 90 deletions
+68
View File
@@ -0,0 +1,68 @@
// WITH_GUAVA
// WITH_STDLIB
// FULL_JDK
// FILE: User.java
import lombok.Builder;
import lombok.Data;
import lombok.Singular;
@Builder
@Data
public class User {
@Singular private com.google.common.collect.ImmutableMap<String, Integer> numbers;
@Singular private com.google.common.collect.ImmutableList<String> statuses;
@Singular private com.google.common.collect.ImmutableTable<String, String, String> values;
}
// FILE: Other.java
import lombok.Builder;
import lombok.Data;
import lombok.Singular;
@Builder(setterPrefix = "with")
@Data
public class Other {
@Singular("singleSome") private java.util.List<Integer> some;
}
// FILE: test.kt
import com.google.common.collect.ImmutableTable
import com.google.common.collect.HashBasedTable
fun box(): String {
val userBuilder = User.builder()
.status("wrong")
.clearStatuses()
.status("hello")
.statuses(listOf("world", "!"))
.number("1", 1)
.numbers(mapOf("2" to 2, "3" to 3))
.value("1", "a", "hello")
.values(ImmutableTable.of("2", "b", "world"))
val user = userBuilder.build()
val outer = Other.builder()
.withSingleSome(1)
.withSome(listOf(2, 3))
.build()
val expectedNumbers = mapOf("1" to 1, "2" to 2, "3" to 3)
val expectedStatuses = listOf("hello", "world", "!")
val expectedSome = listOf(1, 2, 3)
val expectedValues = HashBasedTable.create<String, String, String>().apply {
put("1", "a", "hello")
put("2", "b", "world")
}
return if (
user.numbers == expectedNumbers &&
user.statuses == expectedStatuses &&
user.values == expectedValues &&
outer.some == expectedSome
) {
"OK"
} else {
"Error: $user"
}
}