From da6f6ddcac6424f95fbe25918f370bcbd9b31b90 Mon Sep 17 00:00:00 2001 From: Bodo Teichmann Date: Sun, 11 Aug 2024 15:27:31 +0200 Subject: [PATCH 1/3] fix https://github.com/palantir/palantir-java-format/issues/975 --- .../intellij/PalantirJavaFormatFormattingService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/idea-plugin/src/main/java/com/palantir/javaformat/intellij/PalantirJavaFormatFormattingService.java b/idea-plugin/src/main/java/com/palantir/javaformat/intellij/PalantirJavaFormatFormattingService.java index e28a716bd..dd266e0ce 100644 --- a/idea-plugin/src/main/java/com/palantir/javaformat/intellij/PalantirJavaFormatFormattingService.java +++ b/idea-plugin/src/main/java/com/palantir/javaformat/intellij/PalantirJavaFormatFormattingService.java @@ -92,7 +92,7 @@ public void run() { String formattedText = applyReplacements( request.getDocumentText(), formatterService.get().getFormatReplacements(request.getDocumentText(), toRanges(request))); - request.onTextReady(formattedText); + request.onTextReady(formattedText.trim() + "\n"); } catch (FormatterException e) { request.onError( Notifications.PARSING_ERROR_TITLE, From 78818d3c1697ab1923a8a12aa764fc4e071b7d8f Mon Sep 17 00:00:00 2001 From: Bodo Teichmann Date: Sun, 11 Aug 2024 15:43:52 +0200 Subject: [PATCH 2/3] added changelog --- changelog/@unreleased/pr-1113.v2.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 changelog/@unreleased/pr-1113.v2.yml diff --git a/changelog/@unreleased/pr-1113.v2.yml b/changelog/@unreleased/pr-1113.v2.yml new file mode 100644 index 000000000..e10d4188a --- /dev/null +++ b/changelog/@unreleased/pr-1113.v2.yml @@ -0,0 +1,5 @@ +type: fix +fix: + description: "fix issue #975: last character not a \n after format in Intellij" + links: + - https://github.com/palantir/palantir-java-format/pull/1113 From f80202d54a16bff8d18f7174f0046bf07e5a5fc5 Mon Sep 17 00:00:00 2001 From: bodote Date: Sun, 17 Aug 2025 18:17:30 +0200 Subject: [PATCH 3/3] fix java 23 --- .claude/settings.local.json | 18 ++++++++++++++++++ .vscode/settings.json | 4 ++++ gradle/wrapper/gradle-wrapper.properties | 2 +- palantir-java-format/build.gradle | 5 +++-- .../palantir/javaformat/java/JavacTokens.java | 6 ++++++ .../javaformat/java/RemoveUnusedImports.java | 8 +++++++- 6 files changed, 39 insertions(+), 4 deletions(-) create mode 100644 .claude/settings.local.json create mode 100644 .vscode/settings.json diff --git a/.claude/settings.local.json b/.claude/settings.local.json new file mode 100644 index 000000000..677aca421 --- /dev/null +++ b/.claude/settings.local.json @@ -0,0 +1,18 @@ +{ + "permissions": { + "allow": [ + "Bash(./gradlew:*)", + "Bash(java:*)", + "Bash(/usr/libexec/java_home:*)", + "Bash(JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.14/libexec/openjdk.jdk/Contents/Home ./gradlew build)", + "WebSearch", + "WebFetch(domain:github.com)", + "Bash(unzip:*)", + "Bash(./bin/palantir-java-format:*)", + "Bash(./palantir-java-format/build/distributions/palantir-java-format-2.49.0-2-g78818d3.dirty/bin/palantir-java-format:*)", + "Bash(/Users/bodo.teichmann/dev/learning/palantir-java-format/palantir-java-format/build/distributions/palantir-java-format-2.49.0-2-g78818d3.dirty/bin/palantir-java-format --help)" + ], + "deny": [], + "ask": [] + } +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 000000000..d53ecaf3d --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,4 @@ +{ + "java.compile.nullAnalysis.mode": "automatic", + "java.configuration.updateBuildConfiguration": "automatic" +} \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index a4413138c..df97d72b8 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/palantir-java-format/build.gradle b/palantir-java-format/build.gradle index bef1b8918..ee7bb17a7 100644 --- a/palantir-java-format/build.gradle +++ b/palantir-java-format/build.gradle @@ -41,12 +41,13 @@ def exports = [ ] def jvmArgList = exports.collect { value -> "--add-exports=${value}=ALL-UNNAMED".toString() } +def opensArgList = exports.collect { value -> "--add-opens=${value}=ALL-UNNAMED".toString() } tasks.withType(JavaCompile).configureEach { options.errorprone.disable 'StrictUnusedVariable' // Allow access to internal javac apis - options.compilerArgs += jvmArgList + options.compilerArgs += jvmArgList + opensArgList if (JavaVersion.current() < JavaVersion.VERSION_14) { excludes = ['**/Java14InputAstVisitor.java'] @@ -54,7 +55,7 @@ tasks.withType(JavaCompile).configureEach { } tasks.withType(Test).configureEach { - jvmArgs = jvmArgList + jvmArgs = jvmArgList + opensArgList } tasks.withType(Javadoc).configureEach { diff --git a/palantir-java-format/src/main/java/com/palantir/javaformat/java/JavacTokens.java b/palantir-java-format/src/main/java/com/palantir/javaformat/java/JavacTokens.java index 9cc61d20a..45c552ce0 100644 --- a/palantir-java-format/src/main/java/com/palantir/javaformat/java/JavacTokens.java +++ b/palantir-java-format/src/main/java/com/palantir/javaformat/java/JavacTokens.java @@ -27,6 +27,7 @@ import com.sun.tools.javac.parser.Tokens.TokenKind; import com.sun.tools.javac.parser.UnicodeReader; import com.sun.tools.javac.util.Context; +import com.sun.tools.javac.util.JCDiagnostic; import java.util.Set; /** A wrapper around javac's lexer. */ @@ -200,6 +201,11 @@ public boolean isDeprecated() { return false; } + @Override + public JCDiagnostic.DiagnosticPosition getPos() { + return new JCDiagnostic.SimpleDiagnosticPosition(pos); + } + @Override public String toString() { return String.format("Comment: '%s'", getText()); diff --git a/palantir-java-format/src/main/java/com/palantir/javaformat/java/RemoveUnusedImports.java b/palantir-java-format/src/main/java/com/palantir/javaformat/java/RemoveUnusedImports.java index c537afd77..62b320ca2 100644 --- a/palantir-java-format/src/main/java/com/palantir/javaformat/java/RemoveUnusedImports.java +++ b/palantir-java-format/src/main/java/com/palantir/javaformat/java/RemoveUnusedImports.java @@ -43,6 +43,7 @@ import com.sun.tools.javac.tree.JCTree.JCFieldAccess; import com.sun.tools.javac.tree.JCTree.JCIdent; import com.sun.tools.javac.tree.JCTree.JCImport; +import com.sun.tools.javac.tree.JCTree.JCImportBase; import com.sun.tools.javac.util.Context; import com.sun.tools.javac.util.Options; import java.lang.reflect.Method; @@ -221,7 +222,12 @@ private static RangeMap buildReplacements( Set usedNames, Multimap> usedInJavadoc) { RangeMap replacements = TreeRangeMap.create(); - for (JCImport importTree : unit.getImports()) { + for (JCImportBase importBase : unit.getImports()) { + // Skip module imports for now - only handle traditional imports + if (!(importBase instanceof JCImport)) { + continue; + } + JCImport importTree = (JCImport) importBase; String simpleName = getSimpleName(importTree); if (!isUnused(unit, usedNames, usedInJavadoc, importTree, simpleName)) { continue;