Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion gradle-open-java-format/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,6 @@ tasks.named("test").configure {
// `native` CI jobs, which pass it. Keep this list in sync with the test classes that
// read build/nativeImage.path.
exclude '**/PalantirJavaFormatPluginTest.class'
exclude '**/PalantirJavaFormatIdeaPluginTest.class'
exclude '**/PalantirJavaFormatSpotlessPluginTest.class'
exclude '**/FormatDiffTest.class'
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import java.lang.module.ModuleDescriptor

class ConfigureJavaFormatterXml {

static void configureJavaFormat(Node rootNode, List<URI> uris, Optional<URI> nativeImageUri) {
static void configureJavaFormat(Node rootNode, List<URI> uris) {
def settings = matchOrCreateChild(rootNode, 'component', [name: 'PalantirJavaFormatSettings'])
// enable
matchOrCreateChild(settings, 'option', [name: 'enabled']).attributes().put('value', 'true')
Expand All @@ -31,12 +31,9 @@ class ConfigureJavaFormatterXml {
uris.forEach { URI uri ->
listItems.appendNode('option', [value: uri])
}
// configure nativeImageClasspath
nativeImageUri.ifPresentOrElse({ URI uri ->
matchOrCreateChild(settings, 'option', [name: 'nativeImageClassPath']).attributes().put('value', uri)
}, {
matchChild(settings, 'option', [name: 'nativeImageClassPath']).ifPresent { it.parent().remove(it) }
})
// Earlier versions wrote the native binary for openjavaformat.native.formatter=true. The IDE plugin has a
// setting of its own for that now, useNativeImage, which is left alone, and no longer reads this option.
matchChild(settings, 'option', [name: 'nativeImageClassPath']).ifPresent { it.parent().remove(it) }
}

static void configureWorkspaceXml(Node rootNode) {
Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -18,26 +18,14 @@

import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
import java.nio.file.Paths;
import java.util.Optional;
import java.util.stream.Stream;
import javax.inject.Inject;
import org.gradle.StartParameter;
import org.gradle.api.Plugin;
import org.gradle.api.Project;
import org.gradle.api.artifacts.Configuration;
import org.gradle.api.artifacts.ConfigurationContainer;
import org.gradle.api.tasks.Nested;
import org.gradle.api.tasks.TaskProvider;

public abstract class PalantirJavaFormatIdeaPlugin implements Plugin<Project> {

@Nested
protected abstract NativeImageSupport getNativeImageSupport();

@Inject
protected abstract ConfigurationContainer getConfigurations();

private static final String MIN_IDEA_PLUGIN_VERSION = "2.57.0";

@Override
Expand All @@ -51,26 +39,13 @@ public void apply(Project rootProject) {
TaskProvider<UpdatePalantirJavaFormatIdeaXmlFile> updateOpenJavaFormatXml = rootProject
.getTasks()
.register("updateOpenJavaFormatXml", UpdatePalantirJavaFormatIdeaXmlFile.class, task -> {
// The formatter's classpath only. Whether the IDE runs the native binary is a setting of the
// IDE plugin, for any project: openjavaformat.native.formatter is about this build alone.
task.getXmlOutputFile().set(rootProject.file(".idea/open-java-format.xml"));
task.getImplementationConfig()
.from(rootProject
.getConfigurations()
.getByName(PalantirJavaFormatProviderPlugin.CONFIGURATION_NAME));
maybeGetNativeImplConfiguration().ifPresent(config -> {
task.getNativeImageConfig().from(config);
task.getNativeImageOutputFile()
.fileProvider(rootProject.provider(() -> rootProject
.getGradle()
.getGradleUserHomeDir()
.toPath()
.resolve("open-java-format-caches/")
.resolve(Paths.get(task.getNativeImageConfig()
.getSingleFile()
.toURI())
.getFileName()
.toString())
.toFile()));
});
});

TaskProvider<UpdateWorkspaceXmlFile> updateWorkspaceXml = rootProject
Expand Down Expand Up @@ -108,10 +83,4 @@ private static void runWithEveryBuild(Project rootProject, TaskProvider<?>... ta
.addAll(Stream.of(tasks).map(task -> ":" + task.getName()).toList())
.build());
}

private Optional<Configuration> maybeGetNativeImplConfiguration() {
return getNativeImageSupport().isNativeImageConfigured()
? Optional.of(getConfigurations().getByName(NativeImageFormatProviderPlugin.NATIVE_CONFIGURATION_NAME))
: Optional.empty();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,17 +18,13 @@

import java.io.File;
import java.net.URI;
import java.nio.file.Paths;
import java.util.List;
import java.util.Optional;
import org.gradle.api.DefaultTask;
import org.gradle.api.file.ConfigurableFileCollection;
import org.gradle.api.file.RegularFileProperty;
import org.gradle.api.tasks.Classpath;
import org.gradle.api.tasks.InputFiles;
import org.gradle.api.tasks.OutputFile;
import org.gradle.api.tasks.PathSensitive;
import org.gradle.api.tasks.PathSensitivity;
import org.gradle.api.tasks.TaskAction;
import org.gradle.work.DisableCachingByDefault;

Expand All @@ -39,31 +35,16 @@ public abstract class UpdatePalantirJavaFormatIdeaXmlFile extends DefaultTask {
@Classpath
public abstract ConfigurableFileCollection getImplementationConfig();

@org.gradle.api.tasks.Optional
@InputFiles
@PathSensitive(PathSensitivity.NAME_ONLY)
public abstract ConfigurableFileCollection getNativeImageConfig();

@org.gradle.api.tasks.Optional
@OutputFile
public abstract RegularFileProperty getXmlOutputFile();

@org.gradle.api.tasks.Optional
@OutputFile
public abstract RegularFileProperty getNativeImageOutputFile();

@TaskAction
public final void updateXml() {
List<URI> uris =
getImplementationConfig().getFiles().stream().map(File::toURI).toList();
Optional<URI> nativeUri = getNativeImageConfig().getFiles().stream()
.findFirst()
.map(File::toURI)
.map(uri -> NativeImageAtomicCopy.copyToCacheDir(
Paths.get(uri),
getNativeImageOutputFile().getAsFile().get().toPath()));
XmlUtils.updateIdeaXmlFile(
getXmlOutputFile().getAsFile().get(),
node -> ConfigureJavaFormatterXml.configureJavaFormat(node, uris, nativeUri));
node -> ConfigureJavaFormatterXml.configureJavaFormat(node, uris));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@
import java.io.StringWriter;
import java.net.URI;
import java.util.List;
import java.util.Optional;
import java.util.stream.Stream;
import org.intellij.lang.annotations.Language;
import org.junit.jupiter.api.Test;
Expand Down Expand Up @@ -68,22 +67,6 @@ final class ConfigureJavaFormatterXmlTest {

@Language("xml")
private static final String EXPECTED = """
<root>
<component name="PalantirJavaFormatSettings">
<option name="enabled" value="true"/>
<option name="implementationClassPath">
<list>
<option value="foo"/>
<option value="bar"/>
</list>
</option>
<option name="nativeImageClassPath" value="nativeFoo"/>
</component>
</root>
""";

@Language("xml")
private static final String EXPECTED_WITHOUT_NATIVE = """
<root>
<component name="PalantirJavaFormatSettings">
<option name="enabled" value="true"/>
Expand All @@ -105,8 +88,7 @@ static Stream<String> actionsOnSave() {
void configure_missingEntireBlock_added() {
Node node = parseXml(MISSING_ENTIRE_BLOCK);

ConfigureJavaFormatterXml.configureJavaFormat(
node, List.of(URI.create("foo"), URI.create("bar")), Optional.of(URI.create("nativeFoo")));
ConfigureJavaFormatterXml.configureJavaFormat(node, List.of(URI.create("foo"), URI.create("bar")));

assertThat(xmlToString(node)).isEqualTo(EXPECTED);
}
Expand All @@ -115,8 +97,7 @@ void configure_missingEntireBlock_added() {
void configure_missingClassPath_added() {
Node node = parseXml(MISSING_CLASS_PATH);

ConfigureJavaFormatterXml.configureJavaFormat(
node, List.of(URI.create("foo"), URI.create("bar")), Optional.of(URI.create("nativeFoo")));
ConfigureJavaFormatterXml.configureJavaFormat(node, List.of(URI.create("foo"), URI.create("bar")));

String expected = """
<root>
Expand All @@ -129,7 +110,6 @@ void configure_missingClassPath_added() {
<option value="bar"/>
</list>
</option>
<option name="nativeImageClassPath" value="nativeFoo"/>
</component>
</root>
""";
Expand All @@ -138,23 +118,32 @@ void configure_missingClassPath_added() {
}

@Test
void configure_existingClassPath_modified() {
void configure_existingClassPath_modified_andTheNativeImageOfEarlierVersionsRemoved() {
// Up to 21.0.1 the plugin wrote nativeImageClassPath for openjavaformat.native.formatter=true. The IDE plugin
// switches the native binary on by a setting of its own now, and no longer reads it.
Node node = parseXml(EXISTING_CLASS_PATH);

ConfigureJavaFormatterXml.configureJavaFormat(
node, List.of(URI.create("foo"), URI.create("bar")), Optional.of(URI.create("nativeFoo")));
ConfigureJavaFormatterXml.configureJavaFormat(node, List.of(URI.create("foo"), URI.create("bar")));

assertThat(xmlToString(node)).isEqualTo(EXPECTED);
}

@Test
void configure_noNativeImageClassPath_removal() {
Node node = parseXml(EXISTING_CLASS_PATH);
void configure_leavesTheIdePluginsNativeBinarySettingsAlone() {
Node node = parseXml("""
<root>
<component name="PalantirJavaFormatSettings">
<option name="useNativeImage" value="true"/>
<option name="nativeImagePath" value="/opt/open-java-format"/>
</component>
</root>
""");

ConfigureJavaFormatterXml.configureJavaFormat(
node, List.of(URI.create("foo"), URI.create("bar")), Optional.empty());
ConfigureJavaFormatterXml.configureJavaFormat(node, List.of(URI.create("foo")));

assertThat(xmlToString(node)).isEqualTo(EXPECTED_WITHOUT_NATIVE);
assertThat(xmlToString(node))
.contains("<option name=\"useNativeImage\" value=\"true\"/>")
.contains("<option name=\"nativeImagePath\" value=\"/opt/open-java-format\"/>");
}

@ParameterizedTest
Expand Down
Loading
Loading