Skip to content

Commit ef9d6ea

Browse files
committed
Fix #1638: Instantiate the code formatter and don't rely on an extension point
1 parent 68e2139 commit ef9d6ea

File tree

4 files changed

+446
-34
lines changed

4 files changed

+446
-34
lines changed

lib-extra/src/jdt/java/com/diffplug/spotless/extra/glue/jdt/EclipseJdtFormatterStepImpl.java

+10-1
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,15 @@
1616
package com.diffplug.spotless.extra.glue.jdt;
1717

1818
import java.io.File;
19+
import java.util.HashMap;
20+
import java.util.Map;
1921
import java.util.Properties;
22+
import java.util.stream.Collectors;
2023

2124
import org.eclipse.jdt.core.ToolFactory;
2225
import org.eclipse.jdt.core.formatter.CodeFormatter;
2326
import org.eclipse.jdt.internal.compiler.env.IModule;
27+
import org.eclipse.jdt.internal.formatter.DefaultCodeFormatter;
2428
import org.eclipse.jface.text.Document;
2529
import org.eclipse.jface.text.IDocument;
2630
import org.eclipse.text.edits.TextEdit;
@@ -33,7 +37,12 @@ public class EclipseJdtFormatterStepImpl {
3337
private final CodeFormatter codeFormatter;
3438

3539
public EclipseJdtFormatterStepImpl(Properties settings) {
36-
this.codeFormatter = ToolFactory.createCodeFormatter(settings, ToolFactory.M_FORMAT_EXISTING);
40+
Map<String, String> options = settings.entrySet().stream().collect(Collectors.toMap(
41+
e -> String.valueOf(e.getKey()),
42+
e -> String.valueOf(e.getValue()),
43+
(prev, next) -> next,
44+
HashMap::new));
45+
this.codeFormatter = new DefaultCodeFormatter(options);
3746
}
3847

3948
/** Formatting Java string, distinguishing module-info and compilation unit by file name */

lib-extra/src/test/java/com/diffplug/spotless/extra/java/EclipseJdtFormatterStepSpecialCaseTest.java

+10-1
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,25 @@
1515
*/
1616
package com.diffplug.spotless.extra.java;
1717

18+
import com.diffplug.spotless.extra.EquoBasedStepBuilder;
19+
1820
import org.junit.jupiter.api.Test;
1921

2022
import com.diffplug.spotless.StepHarness;
2123
import com.diffplug.spotless.TestProvisioner;
2224

25+
import java.io.File;
26+
import java.util.List;
27+
2328
public class EclipseJdtFormatterStepSpecialCaseTest {
2429
/** https://github.com/diffplug/spotless/issues/1638 */
2530
@Test
2631
public void issue_1638() {
27-
StepHarness.forStep(EclipseJdtFormatterStep.createBuilder(TestProvisioner.mavenCentral()).build())
32+
ClassLoader classLoader = getClass().getClassLoader();
33+
File file = new File(classLoader.getResource("eclipse_formatter_issue_1638.xml").getFile());
34+
EquoBasedStepBuilder builder = EclipseJdtFormatterStep.createBuilder(TestProvisioner.mavenCentral());
35+
builder.setPreferences(List.of(file));
36+
StepHarness.forStep(builder.build())
2837
.testResource("java/eclipse/AbstractType.test", "java/eclipse/AbstractType.clean");
2938
}
3039
}

0 commit comments

Comments
 (0)