aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgoogle-java-format Team <java-team-github-bot@google.com>2024-03-06 00:24:37 -0800
committergoogle-java-format Team <google-java-format-dev+copybara@google.com>2024-03-06 00:25:31 -0800
commit823d7c99bc61e05e26ec68ede3c42231b6e2e62b (patch)
tree978e7cfbb57009e0f632d81f26a6df816c66a389
parentf20d393babf0fb489a90a1d7913d7a43e5f8cff1 (diff)
downloadgoogle-java-format-823d7c99bc61e05e26ec68ede3c42231b6e2e62b.tar.gz
Print all known values when an invalid range is given.
For easier root cause analysis when an invalid request is passed. PiperOrigin-RevId: 613110312
-rw-r--r--core/src/main/java/com/google/googlejavaformat/java/JavaInput.java6
-rw-r--r--core/src/test/java/com/google/googlejavaformat/java/FormatterTest.java28
2 files changed, 27 insertions, 7 deletions
diff --git a/core/src/main/java/com/google/googlejavaformat/java/JavaInput.java b/core/src/main/java/com/google/googlejavaformat/java/JavaInput.java
index 7b5eb84..b5290ab 100644
--- a/core/src/main/java/com/google/googlejavaformat/java/JavaInput.java
+++ b/core/src/main/java/com/google/googlejavaformat/java/JavaInput.java
@@ -573,9 +573,11 @@ public final class JavaInput extends Input {
if (characterRange.upperEndpoint() > text.length()) {
throw new FormatterException(
String.format(
- "error: invalid length %d, offset + length (%d) is outside the file",
+ "error: invalid offset (%d) or length (%d); offset + length (%d) > file length (%d)",
+ characterRange.lowerEndpoint(),
characterRange.upperEndpoint() - characterRange.lowerEndpoint(),
- characterRange.upperEndpoint()));
+ characterRange.upperEndpoint(),
+ text.length()));
}
// empty range stands for "format the line under the cursor"
Range<Integer> nonEmptyRange =
diff --git a/core/src/test/java/com/google/googlejavaformat/java/FormatterTest.java b/core/src/test/java/com/google/googlejavaformat/java/FormatterTest.java
index 9bbca49..b0d7b40 100644
--- a/core/src/test/java/com/google/googlejavaformat/java/FormatterTest.java
+++ b/core/src/test/java/com/google/googlejavaformat/java/FormatterTest.java
@@ -64,7 +64,7 @@ public final class FormatterTest {
Path tmpdir = testFolder.newFolder().toPath();
Path path = tmpdir.resolve("A.java");
- Files.write(path, input.getBytes(UTF_8));
+ Files.writeString(path, input);
StringWriter out = new StringWriter();
StringWriter err = new StringWriter();
@@ -116,7 +116,7 @@ public final class FormatterTest {
Path tmpdir = testFolder.newFolder().toPath();
Path path = tmpdir.resolve("Foo.java");
- Files.write(path, input.getBytes(UTF_8));
+ Files.writeString(path, input);
StringWriter out = new StringWriter();
StringWriter err = new StringWriter();
@@ -133,7 +133,7 @@ public final class FormatterTest {
Path tmpdir = testFolder.newFolder().toPath();
Path path = tmpdir.resolve("Foo.java");
- Files.write(path, input.getBytes(UTF_8));
+ Files.writeString(path, input);
StringWriter out = new StringWriter();
StringWriter err = new StringWriter();
@@ -142,7 +142,25 @@ public final class FormatterTest {
String[] args = {"--offset", "0", "--length", "9999", path.toString()};
assertThat(main.format(args)).isEqualTo(1);
assertThat(err.toString())
- .contains("error: invalid length 9999, offset + length (9999) is outside the file");
+ .contains("error: invalid offset (0) or length (9999); offset + length (9999)");
+ }
+
+ @Test
+ public void testFormatOffsetOutOfRange() throws Exception {
+ String input = "class Foo{}\n";
+
+ Path tmpdir = testFolder.newFolder().toPath();
+ Path path = tmpdir.resolve("Foo.java");
+ Files.writeString(path, input);
+
+ StringWriter out = new StringWriter();
+ StringWriter err = new StringWriter();
+
+ Main main = new Main(new PrintWriter(out, true), new PrintWriter(err, true), System.in);
+ String[] args = {"--offset", "9998", "--length", "1", path.toString()};
+ assertThat(main.format(args)).isEqualTo(1);
+ assertThat(err.toString())
+ .contains("error: invalid offset (9998) or length (1); offset + length (9999)");
}
@Test
@@ -303,7 +321,7 @@ public final class FormatterTest {
String inputResourceName = "com/google/googlejavaformat/java/testimports/A.input";
String input = getResource(inputResourceName);
String expectedOutput = getResource(outputResourceName);
- Files.write(path, input.getBytes(UTF_8));
+ Files.writeString(path, input);
StringWriter out = new StringWriter();
StringWriter err = new StringWriter();