aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLiam Miller-Cushon <cushon@google.com>2024-04-24 11:50:41 -0700
committerJavac Team <javac-team+copybara@google.com>2024-04-24 11:51:31 -0700
commit48220971c6dd52d6ce865f4bef8170df04f46e44 (patch)
treee148c3c8a3f87ee3e1b5ed28aa98d7a111f2aa32
parent5637a07740c7117adcba19a718b88de8344bba92 (diff)
downloadturbine-upstream-main.tar.gz
Don't emit duplicate record component gettersupstream-main
Check if record component getters have been explicitly declared, and don't emit the synthetic methods if they have. https://github.com/bazelbuild/bazel/issues/22105 PiperOrigin-RevId: 627802539
-rw-r--r--java/com/google/turbine/binder/TypeBinder.java12
-rw-r--r--javatests/com/google/turbine/lower/LowerIntegrationTest.java25
-rw-r--r--javatests/com/google/turbine/lower/testdata/record_getter_override.test10
3 files changed, 35 insertions, 12 deletions
diff --git a/java/com/google/turbine/binder/TypeBinder.java b/java/com/google/turbine/binder/TypeBinder.java
index 3611475..a7e1a0d 100644
--- a/java/com/google/turbine/binder/TypeBinder.java
+++ b/java/com/google/turbine/binder/TypeBinder.java
@@ -302,6 +302,10 @@ public class TypeBinder {
boolean hasEquals = false;
boolean hasHashCode = false;
boolean hasPrimaryConstructor = false;
+ Set<String> componentNamesToDeclare = new HashSet<>();
+ for (RecordComponentInfo c : components) {
+ componentNamesToDeclare.add(c.name());
+ }
for (MethodInfo m : boundMethods) {
if (m.name().equals("<init>")) {
if (isPrimaryConstructor(m, components)) {
@@ -321,7 +325,10 @@ public class TypeBinder {
case "hashCode":
hasHashCode = m.parameters().isEmpty();
break;
- default: // fall out
+ default:
+ if (m.parameters().isEmpty()) {
+ componentNamesToDeclare.remove(m.name());
+ }
}
boundNonConstructors.add(m);
}
@@ -383,6 +390,9 @@ public class TypeBinder {
null));
}
for (RecordComponentInfo c : components) {
+ if (!componentNamesToDeclare.contains(c.name())) {
+ continue;
+ }
MethodSymbol componentMethod = syntheticMethods.create(owner, c.name());
methods.add(
new MethodInfo(
diff --git a/javatests/com/google/turbine/lower/LowerIntegrationTest.java b/javatests/com/google/turbine/lower/LowerIntegrationTest.java
index 32b7fb3..c54311f 100644
--- a/javatests/com/google/turbine/lower/LowerIntegrationTest.java
+++ b/javatests/com/google/turbine/lower/LowerIntegrationTest.java
@@ -19,6 +19,7 @@ package com.google.turbine.lower;
import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.TruthJUnit.assume;
import static com.google.turbine.testing.TestResources.getResource;
+import static java.util.Map.entry;
import static java.util.stream.Collectors.toList;
import com.google.common.collect.ImmutableList;
@@ -53,17 +54,18 @@ import org.junit.runners.Parameterized.Parameters;
public class LowerIntegrationTest {
private static final ImmutableMap<String, Integer> SOURCE_VERSION =
- ImmutableMap.of(
- "record.test", 16, //
- "record2.test", 16,
- "record_tostring.test", 16,
- "record_ctor.test", 16,
- "sealed.test", 17,
- "sealed_nested.test", 17,
- "textblock.test", 15,
- "textblock2.test", 15,
- "B306423115.test", 15,
- "string_template.test", 21);
+ ImmutableMap.ofEntries(
+ entry("record.test", 16),
+ entry("record2.test", 16),
+ entry("record_tostring.test", 16),
+ entry("record_ctor.test", 16),
+ entry("record_getter_override.test", 16),
+ entry("sealed.test", 17),
+ entry("sealed_nested.test", 17),
+ entry("textblock.test", 15),
+ entry("textblock2.test", 15),
+ entry("B306423115.test", 15),
+ entry("string_template.test", 21));
private static final ImmutableSet<String> SOURCE_VERSION_PREVIEW =
ImmutableSet.of("string_template.test");
@@ -288,6 +290,7 @@ public class LowerIntegrationTest {
"record.test",
"record2.test",
"record_ctor.test",
+ "record_getter_override.test",
"record_tostring.test",
"rek.test",
"samepkg.test",
diff --git a/javatests/com/google/turbine/lower/testdata/record_getter_override.test b/javatests/com/google/turbine/lower/testdata/record_getter_override.test
new file mode 100644
index 0000000..b08f13f
--- /dev/null
+++ b/javatests/com/google/turbine/lower/testdata/record_getter_override.test
@@ -0,0 +1,10 @@
+=== Foo.java ===
+import java.util.ArrayList;
+import java.util.List;
+
+public record Foo(int bar, List<String> baz) {
+ /** This should override the default baz() getter. */
+ public List<String> baz() {
+ return baz == null ? new ArrayList<>() : baz;
+ }
+} \ No newline at end of file