mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-02-04 15:06:56 +07:00
IDEA-161641 - small refactoring
GitOrigin-RevId: fd7ef351dbd9abd0f27cb519de6e11bb2f3964b6
This commit is contained in:
committed by
intellij-monorepo-bot
parent
3ad3f5c6fe
commit
fdfa32d491
@@ -6,6 +6,7 @@ import com.intellij.execution.process.BaseOSProcessHandler;
|
||||
import com.intellij.execution.process.ProcessAdapter;
|
||||
import com.intellij.execution.process.ProcessEvent;
|
||||
import com.intellij.execution.process.ProcessOutputTypes;
|
||||
import com.intellij.openapi.compiler.JavaCompilerBundle;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.util.Key;
|
||||
import com.intellij.openapi.util.NlsSafe;
|
||||
@@ -35,7 +36,7 @@ import java.util.Set;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class JLinkArtifactBuildTaskProvider extends ArtifactBuildTaskProvider {
|
||||
public final class JLinkArtifactBuildTaskProvider extends ArtifactBuildTaskProvider {
|
||||
|
||||
@Override
|
||||
public @NotNull List<? extends BuildTask> createArtifactBuildTasks(@NotNull JpsArtifact artifact,
|
||||
@@ -44,9 +45,7 @@ public class JLinkArtifactBuildTaskProvider extends ArtifactBuildTaskProvider {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
final JpsElement properties = artifact.getProperties();
|
||||
if (!(properties instanceof JpsJLinkProperties)) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
if (!(properties instanceof JpsJLinkProperties)) return Collections.emptyList();
|
||||
return Collections.singletonList(new JLinkBuildTask(artifact));
|
||||
}
|
||||
|
||||
@@ -59,25 +58,47 @@ public class JLinkArtifactBuildTaskProvider extends ArtifactBuildTaskProvider {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void build(CompileContext context) throws ProjectBuildException {
|
||||
LOG.warn("jlink task was started");
|
||||
public void build(@NotNull CompileContext context) throws ProjectBuildException {
|
||||
LOG.info("jlink task was started");
|
||||
|
||||
Set<JpsSdk<?>> sdks = context.getProjectDescriptor().getProjectJavaSdks();
|
||||
if (sdks.isEmpty()) {
|
||||
JpsJLinkProperties properties = (JpsJLinkProperties)myArtifact.getProperties();
|
||||
String runtimeImagePath = myArtifact.getOutputPath() + File.separator + "jdk";
|
||||
List<String> commands = buildCommands(context, properties, runtimeImagePath);
|
||||
if (commands.isEmpty()) return;
|
||||
try {
|
||||
FileUtil.delete(Path.of(runtimeImagePath));
|
||||
}
|
||||
catch (IOException e) {
|
||||
error(context, JavaCompilerBundle.message("packaging.jlink.build.task.run.time.image.deletion.failure"));
|
||||
return;
|
||||
}
|
||||
ModuleFinder moduleFinder = ModuleFinder.of(Path.of(myArtifact.getOutputFilePath()));
|
||||
String modulesStr = moduleFinder.findAll().stream().map(mr -> mr.descriptor().name()).collect(Collectors.joining(","));
|
||||
if (modulesStr.isEmpty()) {
|
||||
error(context, "No module has been found");
|
||||
final int errorCode = startProcess(context, commands, properties);
|
||||
if (errorCode != 0) {
|
||||
error(context, JavaCompilerBundle.message("packaging.jlink.build.task.failure"));
|
||||
return;
|
||||
}
|
||||
|
||||
LOG.info("jlink task was finished");
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private List<String> buildCommands(@NotNull CompileContext context,
|
||||
@NotNull JpsJLinkProperties properties,
|
||||
@NotNull String runtimeImagePath) {
|
||||
Set<JpsSdk<?>> sdks = context.getProjectDescriptor().getProjectJavaSdks();
|
||||
if (sdks.isEmpty()) return Collections.emptyList();
|
||||
String artifactOutputPath = myArtifact.getOutputFilePath();
|
||||
ModuleFinder moduleFinder = ModuleFinder.of(Path.of(artifactOutputPath));
|
||||
String modulesSequence = moduleFinder.findAll().stream().map(mr -> mr.descriptor().name()).collect(Collectors.joining(","));
|
||||
if (modulesSequence.isEmpty()) {
|
||||
error(context, JavaCompilerBundle.message("packaging.jlink.build.task.modules.not.found"));
|
||||
return Collections.emptyList();
|
||||
}
|
||||
JpsSdk<?> javaSdk = sdks.iterator().next();
|
||||
String sdkHomePath = javaSdk.getHomePath();
|
||||
String jLinkPath = sdkHomePath + File.separatorChar + "bin" + File.separatorChar + "jlink";
|
||||
List<String> commands = new ArrayList<>();
|
||||
commands.add(jLinkPath);
|
||||
JpsJLinkProperties properties = (JpsJLinkProperties)myArtifact.getProperties();
|
||||
if (properties.compressionLevel.hasCompression()) {
|
||||
addOption(commands, "--compress", String.valueOf(properties.compressionLevel.myValue));
|
||||
}
|
||||
@@ -85,30 +106,17 @@ public class JLinkArtifactBuildTaskProvider extends ArtifactBuildTaskProvider {
|
||||
commands.add("--verbose");
|
||||
}
|
||||
commands.add("--module-path");
|
||||
commands.add(myArtifact.getOutputFilePath());
|
||||
commands.add(artifactOutputPath);
|
||||
commands.add("--add-modules");
|
||||
commands.add(modulesStr);
|
||||
String outputPath = myArtifact.getOutputFilePath() + File.separator + "jdk";
|
||||
addOption(commands, "--output", outputPath);
|
||||
|
||||
LOG.warn(String.join(" ", commands));
|
||||
|
||||
try {
|
||||
FileUtil.delete(Path.of(outputPath));
|
||||
}
|
||||
catch (IOException e) {
|
||||
error(context,"Couldn't delete existing run-time image: " + e.getMessage());
|
||||
}
|
||||
|
||||
final int errorCode = startProcess(context, commands, properties);
|
||||
if (errorCode != 0) {
|
||||
error(context,"jlink task has failed");
|
||||
}
|
||||
|
||||
LOG.warn("jlink task was finished");
|
||||
commands.add(modulesSequence);
|
||||
addOption(commands, "--output", runtimeImagePath);
|
||||
LOG.info(String.join(" ", commands));
|
||||
return commands;
|
||||
}
|
||||
|
||||
private int startProcess(@NotNull CompileContext context, @NotNull List<String> commands, @NotNull JpsJLinkProperties properties) {
|
||||
private static int startProcess(@NotNull CompileContext context,
|
||||
@NotNull List<String> commands,
|
||||
@NotNull JpsJLinkProperties properties) {
|
||||
try {
|
||||
final AtomicInteger exitCode = new AtomicInteger();
|
||||
final @NlsSafe StringBuilder errorOutput = new StringBuilder();
|
||||
@@ -117,18 +125,8 @@ public class JLinkArtifactBuildTaskProvider extends ArtifactBuildTaskProvider {
|
||||
final Process process = new ProcessBuilder(CommandLineUtil.toCommandLine(commands)).start();
|
||||
BaseOSProcessHandler handler = new BaseOSProcessHandler(process, commands.toString(), null);
|
||||
handler.addProcessListener(new ProcessAdapter() {
|
||||
@Override
|
||||
public void startNotified(@NotNull ProcessEvent event) {
|
||||
if (properties.verbose) {
|
||||
LOG.info("Started " + commands);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void processTerminated(@NotNull ProcessEvent event) {
|
||||
if (properties.verbose) {
|
||||
LOG.info("Terminated " + commands + ", exit code: " + event.getExitCode());
|
||||
}
|
||||
exitCode.set(event.getExitCode());
|
||||
}
|
||||
|
||||
@@ -140,7 +138,6 @@ public class JLinkArtifactBuildTaskProvider extends ArtifactBuildTaskProvider {
|
||||
errorOutput.append(event.getText());
|
||||
}
|
||||
else {
|
||||
LOG.info(message);
|
||||
if (properties.verbose) {
|
||||
info(context, message);
|
||||
}
|
||||
@@ -180,11 +177,11 @@ public class JLinkArtifactBuildTaskProvider extends ArtifactBuildTaskProvider {
|
||||
}
|
||||
}
|
||||
|
||||
private void error(@NotNull CompileContext compileContext, @Nls String message) {
|
||||
private static void error(@NotNull CompileContext compileContext, @Nls String message) {
|
||||
compileContext.processMessage(new CompilerMessage("jlink", BuildMessage.Kind.ERROR, message));
|
||||
}
|
||||
|
||||
private void info(@NotNull CompileContext compileContext, @Nls String message) {
|
||||
private static void info(@NotNull CompileContext compileContext, @Nls String message) {
|
||||
compileContext.processMessage(new CompilerMessage("jlink", BuildMessage.Kind.INFO, message));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,9 +4,8 @@ package com.intellij.packaging.impl.jlink;
|
||||
import org.jetbrains.jps.model.artifact.JpsArtifactType;
|
||||
import org.jetbrains.jps.model.ex.JpsElementTypeBase;
|
||||
|
||||
public class JpsJLinkArtifactType extends JpsElementTypeBase<JpsJLinkProperties> implements JpsArtifactType<JpsJLinkProperties> {
|
||||
|
||||
public static final JpsJLinkArtifactType INSTANCE = new JpsJLinkArtifactType();
|
||||
final class JpsJLinkArtifactType extends JpsElementTypeBase<JpsJLinkProperties> implements JpsArtifactType<JpsJLinkProperties> {
|
||||
static final JpsJLinkArtifactType INSTANCE = new JpsJLinkArtifactType();
|
||||
|
||||
private JpsJLinkArtifactType() {
|
||||
}
|
||||
|
||||
@@ -12,14 +12,14 @@ import org.jetbrains.jps.model.serialization.artifact.JpsArtifactPropertiesSeria
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
public class JpsJLinkModelSerializerExtension extends JpsModelSerializerExtension {
|
||||
public final class JpsJLinkModelSerializerExtension extends JpsModelSerializerExtension {
|
||||
|
||||
@Override
|
||||
public @NotNull List<? extends JpsArtifactPropertiesSerializer<?>> getArtifactTypePropertiesSerializers() {
|
||||
return Collections.singletonList(new JpsJLinkArtifactPropertiesSerializer());
|
||||
}
|
||||
|
||||
static class JpsJLinkArtifactPropertiesSerializer extends JpsArtifactPropertiesSerializer<JpsJLinkProperties> {
|
||||
private static class JpsJLinkArtifactPropertiesSerializer extends JpsArtifactPropertiesSerializer<JpsJLinkProperties> {
|
||||
|
||||
JpsJLinkArtifactPropertiesSerializer() {
|
||||
super("jlink", JpsJLinkArtifactType.INSTANCE);
|
||||
@@ -30,9 +30,7 @@ public class JpsJLinkModelSerializerExtension extends JpsModelSerializerExtensio
|
||||
final ArtifactPropertiesState state = findApplicationProperties(stateList);
|
||||
if (state != null) {
|
||||
final Element options = state.getOptions();
|
||||
if (options != null) {
|
||||
return new JpsJLinkProperties(XmlSerializer.deserialize(options, JpsJLinkProperties.class));
|
||||
}
|
||||
if (options != null) return new JpsJLinkProperties(XmlSerializer.deserialize(options, JpsJLinkProperties.class));
|
||||
}
|
||||
return new JpsJLinkProperties();
|
||||
}
|
||||
|
||||
@@ -2,19 +2,16 @@
|
||||
package com.intellij.packaging.impl.jlink;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jps.model.ex.JpsElementBase;
|
||||
|
||||
import java.util.stream.Stream;
|
||||
|
||||
public class JpsJLinkProperties extends JpsElementBase<JpsJLinkProperties> {
|
||||
final class JpsJLinkProperties extends JpsElementBase<JpsJLinkProperties> {
|
||||
public CompressionLevel compressionLevel = CompressionLevel.ZERO;
|
||||
public boolean verbose;
|
||||
|
||||
public JpsJLinkProperties() {
|
||||
JpsJLinkProperties() {
|
||||
}
|
||||
|
||||
public JpsJLinkProperties(@NotNull JpsJLinkProperties properties) {
|
||||
JpsJLinkProperties(@NotNull JpsJLinkProperties properties) {
|
||||
copyToThis(properties);
|
||||
}
|
||||
|
||||
@@ -33,7 +30,7 @@ public class JpsJLinkProperties extends JpsElementBase<JpsJLinkProperties> {
|
||||
verbose = copy.verbose;
|
||||
}
|
||||
|
||||
public enum CompressionLevel {
|
||||
enum CompressionLevel {
|
||||
ZERO(0),
|
||||
FIRST(1),
|
||||
SECOND(2);
|
||||
@@ -43,12 +40,7 @@ public class JpsJLinkProperties extends JpsElementBase<JpsJLinkProperties> {
|
||||
this.myValue = value;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static CompressionLevel getLevelByValue(int value) {
|
||||
return Stream.of(values()).filter(v -> v.myValue == value).findFirst().orElse(null);
|
||||
}
|
||||
|
||||
public boolean hasCompression() {
|
||||
boolean hasCompression() {
|
||||
return this == FIRST || this == SECOND;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -105,6 +105,10 @@ checkbox.text.compile.affected.unloaded.modules=Compile affected &unloaded modul
|
||||
dialog.title.output.directory.for.artifact=Output Directory for Artifact
|
||||
chooser.description.select.output.directory.for.0.artifact=Select output directory for ''{0}'' artifact
|
||||
|
||||
packaging.jlink.build.task.modules.not.found=JPMS modules not found
|
||||
packaging.jlink.build.task.run.time.image.deletion.failure=Couldn't delete existing run-time image
|
||||
packaging.jlink.build.task.failure=jlink task has failed
|
||||
|
||||
#package file action
|
||||
action.name.package.file=Package File
|
||||
action.description.package.file=Update the file in the corresponding artifacts
|
||||
|
||||
@@ -269,7 +269,7 @@
|
||||
</extensionPoints>
|
||||
|
||||
<extensions defaultExtensionNs="com.intellij">
|
||||
<compileServer.plugin classpath="java-compiler-impl.jar"/>
|
||||
<compileServer.plugin classpath="platform-core.jar;java-compiler.jar;java-compiler-impl.jar"/>
|
||||
|
||||
<notificationGroup id="jps configuration error"
|
||||
toolWindowId="Build"
|
||||
|
||||
@@ -10,17 +10,17 @@ import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.stream.Stream;
|
||||
|
||||
public class JLinkArtifactProperties extends ArtifactProperties<JLinkArtifactProperties> {
|
||||
final class JLinkArtifactProperties extends ArtifactProperties<JLinkArtifactProperties> {
|
||||
public CompressionLevel compressionLevel = CompressionLevel.ZERO;
|
||||
public boolean verbose;
|
||||
|
||||
@Override
|
||||
public ArtifactPropertiesEditor createEditor(@NotNull ArtifactEditorContext context) {
|
||||
return new JLinkArtifactPropertiesEditor(this, context.getProject());
|
||||
return new JLinkArtifactPropertiesEditor(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable JLinkArtifactProperties getState() {
|
||||
public @NotNull JLinkArtifactProperties getState() {
|
||||
return this;
|
||||
}
|
||||
|
||||
@@ -29,7 +29,7 @@ public class JLinkArtifactProperties extends ArtifactProperties<JLinkArtifactPro
|
||||
XmlSerializerUtil.copyBean(state, this);
|
||||
}
|
||||
|
||||
public enum CompressionLevel {
|
||||
enum CompressionLevel {
|
||||
ZERO(0),
|
||||
FIRST(1),
|
||||
SECOND(2);
|
||||
@@ -43,9 +43,5 @@ public class JLinkArtifactProperties extends ArtifactProperties<JLinkArtifactPro
|
||||
public static CompressionLevel getLevelByValue(int value) {
|
||||
return Stream.of(values()).filter(v -> v.myValue == value).findFirst().orElse(null);
|
||||
}
|
||||
|
||||
public boolean hasCompression() {
|
||||
return this == FIRST || this == SECOND;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Copyright 2000-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package com.intellij.packaging.jlink;
|
||||
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.java.JavaBundle;
|
||||
import com.intellij.openapi.ui.ComboBox;
|
||||
import com.intellij.packaging.ui.ArtifactPropertiesEditor;
|
||||
import com.intellij.util.ui.FormBuilder;
|
||||
@@ -15,22 +15,20 @@ import java.util.Optional;
|
||||
|
||||
import static com.intellij.packaging.jlink.JLinkArtifactProperties.CompressionLevel;
|
||||
|
||||
public class JLinkArtifactPropertiesEditor extends ArtifactPropertiesEditor {
|
||||
final class JLinkArtifactPropertiesEditor extends ArtifactPropertiesEditor {
|
||||
private final JLinkArtifactProperties myProperties;
|
||||
private final Project myProject;
|
||||
|
||||
private ComboBox<Integer> myCompressionLevel;
|
||||
private JCheckBox myVerbose;
|
||||
|
||||
public JLinkArtifactPropertiesEditor(@NotNull JLinkArtifactProperties properties, @NotNull Project project) {
|
||||
JLinkArtifactPropertiesEditor(@NotNull JLinkArtifactProperties properties) {
|
||||
myProperties = properties;
|
||||
myProject = project;
|
||||
}
|
||||
|
||||
@Nls
|
||||
@Override
|
||||
public String getTabName() {
|
||||
return "JLink";
|
||||
return JavaBundle.message("packaging.jlink.artifact.name");
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -39,9 +37,9 @@ public class JLinkArtifactPropertiesEditor extends ArtifactPropertiesEditor {
|
||||
|
||||
myCompressionLevel = new ComboBox<>(EnumSet.allOf(CompressionLevel.class).stream().map(level -> level.myValue).toArray(Integer[]::new));
|
||||
myCompressionLevel.setItem(myProperties.compressionLevel.myValue);
|
||||
builder.addLabeledComponent("Compress level", myCompressionLevel);
|
||||
builder.addLabeledComponent(JavaBundle.message("packaging.jlink.compression.level"), myCompressionLevel);
|
||||
|
||||
myVerbose = new JCheckBox("Enable verbose tracing", myProperties.verbose);
|
||||
myVerbose = new JCheckBox(JavaBundle.message("packaging.jlink.verbose.tracing"), myProperties.verbose);
|
||||
builder.addComponent(myVerbose);
|
||||
|
||||
return builder.getPanel();
|
||||
|
||||
@@ -6,8 +6,8 @@ import com.intellij.packaging.artifacts.ArtifactPropertiesProvider;
|
||||
import com.intellij.packaging.artifacts.ArtifactType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class JLinkArtifactPropertiesProvider extends ArtifactPropertiesProvider {
|
||||
protected JLinkArtifactPropertiesProvider() {
|
||||
public final class JLinkArtifactPropertiesProvider extends ArtifactPropertiesProvider {
|
||||
public JLinkArtifactPropertiesProvider() {
|
||||
super("jlink-properties");
|
||||
}
|
||||
|
||||
|
||||
@@ -2,18 +2,18 @@
|
||||
package com.intellij.packaging.jlink;
|
||||
|
||||
import com.intellij.icons.AllIcons;
|
||||
import com.intellij.java.JavaBundle;
|
||||
import com.intellij.packaging.artifacts.ArtifactType;
|
||||
import com.intellij.packaging.elements.CompositePackagingElement;
|
||||
import com.intellij.packaging.elements.PackagingElementFactory;
|
||||
import com.intellij.packaging.elements.PackagingElementOutputKind;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
|
||||
public class JLinkArtifactType extends ArtifactType {
|
||||
protected JLinkArtifactType() {
|
||||
super("jlink", () -> "Run-time image");
|
||||
public final class JLinkArtifactType extends ArtifactType {
|
||||
public JLinkArtifactType() {
|
||||
super("jlink", () -> JavaBundle.message("packaging.jlink.artifact.title"));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -22,7 +22,7 @@ public class JLinkArtifactType extends ArtifactType {
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable String getDefaultPathFor(@NotNull PackagingElementOutputKind kind) {
|
||||
public @NotNull String getDefaultPathFor(@NotNull PackagingElementOutputKind kind) {
|
||||
return "/";
|
||||
}
|
||||
|
||||
|
||||
@@ -1037,6 +1037,10 @@ override.implement.broken.file.template.message=Please Correct "Overridden/Imple
|
||||
override.implement.broken.file.template.title=File Template Error
|
||||
package.dependencies.production.node.text=Production Classes
|
||||
package.dependencies.test.node.text=Test Classes
|
||||
packaging.jlink.artifact.name=JLink
|
||||
packaging.jlink.artifact.title=Run-time image
|
||||
packaging.jlink.compression.level=Compression level
|
||||
packaging.jlink.verbose.tracing=Enable verbose tracing
|
||||
paste.class.command.name=Paste class ''{0}''
|
||||
please.report.a.bug=Please report a bug
|
||||
popup.title.choose.framework=Choose Framework
|
||||
|
||||
Reference in New Issue
Block a user