diff options
author | Liam Miller-Cushon <cushon@google.com> | 2024-04-24 11:50:41 -0700 |
---|---|---|
committer | Javac Team <javac-team+copybara@google.com> | 2024-04-24 11:51:31 -0700 |
commit | 48220971c6dd52d6ce865f4bef8170df04f46e44 (patch) | |
tree | e148c3c8a3f87ee3e1b5ed28aa98d7a111f2aa32 | |
parent | 5637a07740c7117adcba19a718b88de8344bba92 (diff) | |
download | turbine-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
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 |