Skip to content

Commit 14d3ed0

Browse files
committed
Replace Guava's immutable collections with java.util ones
ImmutableList, ImmutableMap, ImmutableSet and ImmutableSortedSet give way to List.of, List.copyOf, Map.of, Stream.toList() and, where a builder filled them, an ArrayList or a TreeSet handed out with List.copyOf or an unmodifiable view. FileBasedTests lists its test resources with Files.walk rather than Guava's ClassPath, whose getResources() returns an ImmutableSet. What differs between the two kinds of collection decided three places: - Newlines.BREAKS is a List: it is tried in order, "\r\n" before "\n", and Set.of keeps no order. StringWrapper's ranges are a LinkedHashSet for the same reason. - JavaInput.buildToks asks its stop tokens whether they contain the kind of a comment token, which is null, and Set.of throws on contains(null). They are a HashSet. - Error Prone's @immutable cannot prove a java.util List or Map immutable, so it is gone from Input.Token, JavaInput.Token, OpsBuilder.BlankLineWanted, InputMetadata and doc.Token. The SPI does not change. FormatterService.getFormatReplacements still returns ImmutableList, so that code compiled against an older SPI keeps linking, and its three implementations still declare it: FormatterServiceImpl copies Formatter's list into one. Formatter's own getFormatReplacements, Input.getPositionTokenMap (a RangeMap now) and SnippetFormatter.format return java.util types.
1 parent 7904376 commit 14d3ed0

43 files changed

Lines changed: 345 additions & 355 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎gradle-open-java-format/src/main/groovy/com/palantir/javaformat/gradle/PalantirJavaFormatIdeaPlugin.java‎

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
package com.palantir.javaformat.gradle;
1818

1919
import com.google.common.base.Preconditions;
20-
import com.google.common.collect.ImmutableList;
2120
import java.util.stream.Stream;
2221
import org.gradle.StartParameter;
2322
import org.gradle.api.Plugin;
@@ -80,9 +79,8 @@ public void apply(Project rootProject) {
8079
// Adds the tasks to the Gradle start parameters, so they run with whatever the build was asked to do.
8180
private static void runWithEveryBuild(Project rootProject, TaskProvider<?>... tasks) {
8281
StartParameter startParameter = rootProject.getGradle().getStartParameter();
83-
startParameter.setTaskNames(ImmutableList.<String>builder()
84-
.addAll(startParameter.getTaskNames())
85-
.addAll(Stream.of(tasks).map(task -> ":" + task.getName()).toList())
86-
.build());
82+
startParameter.setTaskNames(Stream.concat(
83+
startParameter.getTaskNames().stream(), Stream.of(tasks).map(task -> ":" + task.getName()))
84+
.toList());
8785
}
8886
}

‎gradle-open-java-format/src/main/groovy/com/palantir/javaformat/gradle/XmlUtils.java‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616

1717
package com.palantir.javaformat.gradle;
1818

19-
import com.google.common.collect.ImmutableMap;
2019
import com.google.common.io.Files;
2120
import groovy.util.Node;
2221
import groovy.xml.XmlNodePrinter;
@@ -26,6 +25,7 @@
2625
import java.io.IOException;
2726
import java.io.PrintWriter;
2827
import java.nio.charset.Charset;
28+
import java.util.Map;
2929
import java.util.function.Consumer;
3030
import javax.xml.parsers.ParserConfigurationException;
3131
import org.xml.sax.SAXException;
@@ -41,7 +41,7 @@ public static void updateIdeaXmlFile(File configurationFile, Consumer<Node> conf
4141
throw new RuntimeException("Couldn't parse existing configuration file: " + configurationFile, e);
4242
}
4343
} else {
44-
rootNode = new Node(null, "project", ImmutableMap.of("version", "4"));
44+
rootNode = new Node(null, "project", Map.of("version", "4"));
4545
}
4646

4747
configure.accept(rootNode);

‎gradle-open-java-format/src/main/java/com/palantir/javaformat/gradle/FormatDiff.java‎

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import com.google.common.annotations.VisibleForTesting;
2323
import com.google.common.base.Preconditions;
2424
import com.google.common.base.Splitter;
25-
import com.google.common.collect.ImmutableList;
2625
import com.google.common.collect.Iterators;
2726
import com.google.common.collect.Range;
2827
import com.google.common.collect.RangeSet;
@@ -110,7 +109,7 @@ private static void format(FormatterService formatter, SingleFileDiff diff) {
110109

111110
try {
112111
System.err.println("Formatting " + diff.path);
113-
ImmutableList<Replacement> replacements = formatter.getFormatReplacements(input, charRanges.asRanges());
112+
List<Replacement> replacements = formatter.getFormatReplacements(input, charRanges.asRanges());
114113
String output = applyReplacements(input, replacements);
115114
Files.write(diff.path, output.getBytes(UTF_8));
116115
} catch (IOException | FormatterException e) {

‎gradle-open-java-format/src/main/java/com/palantir/javaformat/gradle/PalantirJavaFormatSpotlessPlugin.java‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
package com.palantir.javaformat.gradle;
1717

1818
import com.diffplug.gradle.spotless.SpotlessExtension;
19-
import com.google.common.collect.ImmutableList;
19+
import java.util.List;
2020
import org.gradle.api.Action;
2121
import org.gradle.api.Plugin;
2222
import org.gradle.api.Project;
@@ -25,8 +25,8 @@
2525

2626
public abstract class PalantirJavaFormatSpotlessPlugin implements Plugin<Project> {
2727
// The spotless gradle plugin got renamed to 'com.diffplug.spotless' at version 5.0.0
28-
private static final ImmutableList<String> SPOTLESS_PLUGINS =
29-
ImmutableList.of("com.diffplug.gradle.spotless", "com.diffplug.spotless");
28+
private static final List<String> SPOTLESS_PLUGINS =
29+
List.of("com.diffplug.gradle.spotless", "com.diffplug.spotless");
3030

3131
@Override
3232
public void apply(Project project) {

‎gradle-open-java-format/src/test/java/com/palantir/javaformat/gradle/FormatDiffTest.java‎

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121

2222
import com.google.common.base.Preconditions;
2323
import com.google.common.base.Splitter;
24-
import com.google.common.collect.ImmutableList;
2524
import com.palantir.javaformat.bootstrap.BootstrappingFormatterService;
2625
import com.palantir.javaformat.bootstrap.NativeImageFormatterService;
2726
import com.palantir.javaformat.java.FormatterService;
@@ -80,10 +79,10 @@ void reformat_a_subpath_of_a_git_directory_for_only_changed_lines(FormatterServi
8079
Files.createDirectories(subdir);
8180

8281
Path reformatMe = subdir.resolve("ReformatMe.java");
83-
Files.write(reformatMe, ImmutableList.of(" class ReformatMe {}"), UTF_8);
82+
Files.write(reformatMe, List.of(" class ReformatMe {}"), UTF_8);
8483

8584
Path dontTouchMe = repo.resolve("DontTouchMe.java");
86-
Files.write(dontTouchMe, ImmutableList.of(" class DontTouchMe {}"), UTF_8);
85+
Files.write(dontTouchMe, List.of(" class DontTouchMe {}"), UTF_8);
8786

8887
runCommandInRepo("git", "add", "-N", ".");
8988

‎open-java-format-eclipse-plugin/src/main/java/com/palantir/javaformat/java/SnippetFormatter.java‎

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,9 @@
1414

1515
package com.palantir.javaformat.java;
1616

17-
import static com.google.common.collect.ImmutableList.toImmutableList;
18-
1917
import com.google.common.base.CharMatcher;
2018
import com.google.common.base.Preconditions;
2119
import com.google.common.collect.DiscreteDomain;
22-
import com.google.common.collect.ImmutableList;
2320
import com.google.common.collect.Range;
2421
import com.google.common.collect.RangeSet;
2522
import com.google.common.collect.TreeRangeSet;
@@ -93,7 +90,7 @@ private static List<Range<Integer>> offsetRanges(List<Range<Integer>> ranges, in
9390
* Runs the Google Java formatter on the given source, with only the given
9491
* ranges specified.
9592
*/
96-
public ImmutableList<Replacement> format(
93+
public List<Replacement> format(
9794
SnippetKind kind, String source, List<Range<Integer>> ranges, int initialIndent, boolean includeComments)
9895
throws FormatterException {
9996
RangeSet<Integer> rangeSet = TreeRangeSet.create();
@@ -115,7 +112,7 @@ public ImmutableList<Replacement> format(
115112

116113
return toReplacements(source, replacement).stream()
117114
.filter(r -> rangeSet.encloses(r.getReplaceRange()))
118-
.collect(toImmutableList());
115+
.toList();
119116
}
120117

121118
/**

‎open-java-format-idea-plugin/src/main/java/com/palantir/javaformat/intellij/PalantirJavaFormatFormattingService.java‎

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@
1616

1717
package com.palantir.javaformat.intellij;
1818

19-
import com.google.common.collect.ImmutableList;
19+
import static java.util.Comparator.comparing;
20+
import static java.util.Optional.ofNullable;
21+
2022
import com.google.common.collect.Range;
2123
import com.intellij.formatting.service.AsyncDocumentFormattingService;
2224
import com.intellij.formatting.service.AsyncFormattingRequest;
@@ -33,16 +35,12 @@
3335
import com.palantir.javaformat.java.FormatterException;
3436
import com.palantir.javaformat.java.FormatterService;
3537
import com.palantir.javaformat.java.Replacement;
36-
import org.jspecify.annotations.Nullable;
37-
3838
import java.util.ArrayList;
3939
import java.util.Collection;
4040
import java.util.List;
4141
import java.util.Optional;
4242
import java.util.Set;
43-
44-
import static java.util.Comparator.comparing;
45-
import static java.util.Optional.ofNullable;
43+
import org.jspecify.annotations.Nullable;
4644

4745
class PalantirJavaFormatFormattingService extends AsyncDocumentFormattingService implements PluginAware {
4846
private static final Logger logger = Logger.getInstance(PalantirJavaFormatFormattingService.class);
@@ -191,12 +189,11 @@ private static Collection<Range<Integer>> toRanges(AsyncFormattingRequest reques
191189
if (isWholeFile(request)) {
192190
// The IDE sometimes passes invalid ranges when the file is unsaved before invoking the
193191
// formatter. So this is a workaround for that issue.
194-
return ImmutableList.of(
195-
Range.closedOpen(0, request.getDocumentText().length()));
192+
return List.of(Range.closedOpen(0, request.getDocumentText().length()));
196193
}
197194
return request.getFormattingRanges().stream()
198195
.map(textRange -> Range.closedOpen(textRange.getStartOffset(), textRange.getEndOffset()))
199-
.collect(ImmutableList.toImmutableList());
196+
.toList();
200197
}
201198

202199
private static boolean isWholeFile(AsyncFormattingRequest request) {

‎open-java-format-jdk-bootstrap/src/main/java/com/palantir/javaformat/bootstrap/BootstrappingFormatterService.java‎

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import java.io.IOException;
3030
import java.io.UncheckedIOException;
3131
import java.nio.file.Path;
32+
import java.util.ArrayList;
3233
import java.util.Collection;
3334
import java.util.List;
3435
import java.util.Optional;
@@ -125,27 +126,26 @@ record FormatterCliArgs(
125126
List<String> characterRanges) {
126127

127128
List<String> toArgs() {
128-
ImmutableList.Builder<String> args = ImmutableList.<String>builder()
129-
.add(jdkPath.toAbsolutePath().toString())
130-
.addAll(jvmArgs)
131-
.add(
132-
"-cp",
133-
implementationClasspath.stream()
134-
.map(path -> path.toAbsolutePath().toString())
135-
.collect(Collectors.joining(System.getProperty("path.separator"))))
136-
.add(FORMATTER_MAIN_CLASS);
129+
var args = new ArrayList<String>();
130+
args.add(jdkPath.toAbsolutePath().toString());
131+
args.addAll(jvmArgs);
132+
args.add("-cp");
133+
args.add(implementationClasspath.stream()
134+
.map(path -> path.toAbsolutePath().toString())
135+
.collect(Collectors.joining(System.getProperty("path.separator"))));
136+
args.add(FORMATTER_MAIN_CLASS);
137137

138138
if (!characterRanges.isEmpty()) {
139-
args.add("--character-ranges", Joiner.on(',').join(characterRanges));
139+
args.add("--character-ranges");
140+
args.add(Joiner.on(',').join(characterRanges));
140141
}
141142
if (outputReplacements) {
142143
args.add("--output-replacements");
143144
}
144145

145-
return args
146-
// Trailing "-" enables formatting stdin -> stdout
147-
.add("-")
148-
.build();
146+
// Trailing "-" enables formatting stdin -> stdout
147+
args.add("-");
148+
return List.copyOf(args);
149149
}
150150
}
151151
}

‎open-java-format-jdk-bootstrap/src/main/java/com/palantir/javaformat/bootstrap/NativeImageFormatterService.java‎

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import java.io.IOException;
2929
import java.io.UncheckedIOException;
3030
import java.nio.file.Path;
31+
import java.util.ArrayList;
3132
import java.util.Collection;
3233
import java.util.List;
3334
import java.util.Optional;
@@ -91,20 +92,20 @@ private String runFormatterCommand(String input) throws IOException {
9192
record FormatterNativeImageArgs(Path nativeImagePath, boolean outputReplacements, List<String> characterRanges) {
9293

9394
List<String> toArgs() {
94-
ImmutableList.Builder<String> args = ImmutableList.<String>builder()
95-
.add(nativeImagePath.toAbsolutePath().toString());
95+
var args = new ArrayList<String>();
96+
args.add(nativeImagePath.toAbsolutePath().toString());
9697

9798
if (!characterRanges.isEmpty()) {
98-
args.add("--character-ranges", Joiner.on(',').join(characterRanges));
99+
args.add("--character-ranges");
100+
args.add(Joiner.on(',').join(characterRanges));
99101
}
100102
if (outputReplacements) {
101103
args.add("--output-replacements");
102104
}
103105

104-
return args
105-
// Trailing "-" enables formatting stdin -> stdout
106-
.add("-")
107-
.build();
106+
// Trailing "-" enables formatting stdin -> stdout
107+
args.add("-");
108+
return List.copyOf(args);
108109
}
109110
}
110111
}

‎open-java-format-jdk-bootstrap/src/test/java/com/palantir/javaformat/bootstrap/FormatterServicesTest.java‎

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020

2121
import com.google.common.base.Preconditions;
2222
import com.google.common.base.Splitter;
23-
import com.google.common.collect.ImmutableList;
2423
import com.google.common.collect.Range;
2524
import com.palantir.javaformat.Utils;
2625
import com.palantir.javaformat.java.FormatterException;
@@ -44,7 +43,7 @@ void can_format_file_with_replacement(FormatterService formatterService) throws
4443
String input = getTestResourceContent("format.input");
4544
String expectedOutput = getTestResourceContent("format.output");
4645

47-
ImmutableList<Replacement> replacements =
46+
List<Replacement> replacements =
4847
formatterService.getFormatReplacements(input, List.of(Range.open(0, input.length())));
4948

5049
assertThat(replacements).hasSize(1);
@@ -73,7 +72,7 @@ void can_format_large_input_file(FormatterService formatterService) throws Forma
7372
+ " }\n"
7473
+ "}\n";
7574

76-
ImmutableList<Replacement> replacements =
75+
List<Replacement> replacements =
7776
formatterService.getFormatReplacements(input, List.of(Range.open(0, input.length())));
7877

7978
assertThat(replacements).singleElement().satisfies(replacement -> {

0 commit comments

Comments
 (0)