mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
show shortened classpath preview (IDEA-165946)
This commit is contained in:
@@ -19,6 +19,7 @@ import com.intellij.ExtensionPoints;
|
||||
import com.intellij.debugger.impl.GenericDebuggerRunnerSettings;
|
||||
import com.intellij.diagnostic.logging.OutputFileUtil;
|
||||
import com.intellij.execution.configurations.*;
|
||||
import com.intellij.execution.filters.ArgumentFileFilter;
|
||||
import com.intellij.execution.impl.ConsoleBuffer;
|
||||
import com.intellij.execution.process.OSProcessHandler;
|
||||
import com.intellij.execution.process.ProcessAdapter;
|
||||
@@ -66,10 +67,7 @@ import org.jetbrains.jps.model.serialization.PathMacroUtil;
|
||||
import java.io.*;
|
||||
import java.net.InetAddress;
|
||||
import java.net.ServerSocket;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.*;
|
||||
|
||||
public abstract class JavaTestFrameworkRunnableState<T extends
|
||||
ModuleBasedConfiguration<JavaRunConfigurationModule>
|
||||
@@ -82,6 +80,7 @@ public abstract class JavaTestFrameworkRunnableState<T extends
|
||||
protected File myWorkingDirsFile = null;
|
||||
|
||||
private RemoteConnectionCreator remoteConnectionCreator;
|
||||
private final List<ArgumentFileFilter> myArgumentFileFilters = new ArrayList<>();
|
||||
|
||||
public void setRemoteConnectionCreator(RemoteConnectionCreator remoteConnectionCreator) {
|
||||
this.remoteConnectionCreator = remoteConnectionCreator;
|
||||
@@ -128,6 +127,16 @@ public abstract class JavaTestFrameworkRunnableState<T extends
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected GeneralCommandLine createCommandLine() throws ExecutionException {
|
||||
GeneralCommandLine commandLine = super.createCommandLine();
|
||||
Map<String, String> content = commandLine.getUserData(JdkUtil.COMMAND_LINE_CONTENT);
|
||||
if (content != null) {
|
||||
content.forEach((key, value) -> myArgumentFileFilters.add(new ArgumentFileFilter(key, value)));
|
||||
}
|
||||
return commandLine;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public ExecutionResult execute(@NotNull Executor executor, @NotNull ProgramRunner runner) throws ExecutionException {
|
||||
@@ -143,6 +152,10 @@ public abstract class JavaTestFrameworkRunnableState<T extends
|
||||
|
||||
final OSProcessHandler handler = createHandler(executor);
|
||||
|
||||
for (ArgumentFileFilter filter : myArgumentFileFilters) {
|
||||
consoleView.addMessageFilter(filter);
|
||||
}
|
||||
|
||||
consoleView.attachToProcess(handler);
|
||||
final AbstractTestProxy root = viewer.getRoot();
|
||||
if (root instanceof TestProxyRoot) {
|
||||
|
||||
+12
@@ -21,6 +21,7 @@ import com.intellij.diagnostic.logging.LogConfigurationPanel;
|
||||
import com.intellij.execution.*;
|
||||
import com.intellij.execution.configuration.EnvironmentVariablesComponent;
|
||||
import com.intellij.execution.configurations.*;
|
||||
import com.intellij.execution.filters.ArgumentFileFilter;
|
||||
import com.intellij.execution.filters.TextConsoleBuilderFactory;
|
||||
import com.intellij.execution.junit.RefactoringListeners;
|
||||
import com.intellij.execution.process.KillableProcessHandler;
|
||||
@@ -34,6 +35,7 @@ import com.intellij.openapi.options.SettingsEditorGroup;
|
||||
import com.intellij.openapi.project.DumbService;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.projectRoots.JavaSdkVersion;
|
||||
import com.intellij.openapi.projectRoots.JdkUtil;
|
||||
import com.intellij.openapi.projectRoots.ex.JavaSdkUtil;
|
||||
import com.intellij.openapi.util.DefaultJDOMExternalizer;
|
||||
import com.intellij.psi.PsiClass;
|
||||
@@ -307,6 +309,16 @@ public class ApplicationConfiguration extends ModuleBasedConfiguration<JavaRunCo
|
||||
return params;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected GeneralCommandLine createCommandLine() throws ExecutionException {
|
||||
GeneralCommandLine line = super.createCommandLine();
|
||||
Map<String, String> content = line.getUserData(JdkUtil.COMMAND_LINE_CONTENT);
|
||||
if (content != null) {
|
||||
content.forEach((key, value) -> addConsoleFilters(new ArgumentFileFilter(key, value)));
|
||||
}
|
||||
return line;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
protected OSProcessHandler startProcess() throws ExecutionException {
|
||||
|
||||
@@ -25,6 +25,7 @@ import com.intellij.ide.util.PropertiesComponent;
|
||||
import com.intellij.openapi.application.ApplicationNamesInfo;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Key;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.util.io.FileUtilRt;
|
||||
import com.intellij.openapi.util.io.JarUtil;
|
||||
@@ -34,6 +35,7 @@ import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.vfs.encoding.EncodingManager;
|
||||
import com.intellij.util.PathUtil;
|
||||
import com.intellij.util.PathsList;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.execution.ParametersListUtil;
|
||||
import com.intellij.util.lang.UrlClassLoader;
|
||||
import gnu.trove.THashMap;
|
||||
@@ -53,6 +55,8 @@ import java.util.jar.Manifest;
|
||||
* @author max
|
||||
*/
|
||||
public class JdkUtil {
|
||||
public static Key<Map<String, String>> COMMAND_LINE_CONTENT = Key.create("command.line.content");
|
||||
|
||||
/**
|
||||
* The VM property is needed to workaround incorrect escaped URLs handling in WebSphere,
|
||||
* see <a href="https://youtrack.jetbrains.com/issue/IDEA-126859#comment=27-778948">IDEA-126859</a> for additional details
|
||||
@@ -250,6 +254,8 @@ public class JdkUtil {
|
||||
}
|
||||
}
|
||||
|
||||
commandLine.putUserData(COMMAND_LINE_CONTENT, ContainerUtil.stringMap(argFile.getAbsolutePath(), FileUtil.loadFile(argFile)));
|
||||
|
||||
appendEncoding(javaParameters, commandLine, vmParameters);
|
||||
|
||||
commandLine.addParameter("@" + argFile.getAbsolutePath());
|
||||
@@ -325,12 +331,16 @@ public class JdkUtil {
|
||||
}
|
||||
|
||||
File classpathFile = FileUtil.createTempFile("idea_classpath", null);
|
||||
PathsList classPath = javaParameters.getClassPath();
|
||||
try (PrintWriter writer = new PrintWriter(classpathFile)) {
|
||||
for (String path : javaParameters.getClassPath().getPathList()) {
|
||||
for (String path : classPath.getPathList()) {
|
||||
writer.println(path);
|
||||
}
|
||||
}
|
||||
|
||||
Map<String, String> map = ContainerUtil.stringMap(classpathFile.getAbsolutePath(), classPath.getPathsString());
|
||||
commandLine.putUserData(COMMAND_LINE_CONTENT, map);
|
||||
|
||||
Set<String> classpath = new LinkedHashSet<>();
|
||||
classpath.add(PathUtil.getJarPathForClass(commandLineWrapper));
|
||||
if (UrlClassLoader.class.getName().equals(vmParameters.getPropertyValue("java.system.class.loader"))) {
|
||||
@@ -348,12 +358,14 @@ public class JdkUtil {
|
||||
if (vmParamsFile != null) {
|
||||
commandLine.addParameter("@vm_params");
|
||||
commandLine.addParameter(vmParamsFile.getAbsolutePath());
|
||||
map.put(vmParamsFile.getAbsolutePath(), FileUtil.loadFile(vmParamsFile));
|
||||
OSProcessHandler.deleteFileOnTermination(commandLine, vmParamsFile);
|
||||
}
|
||||
|
||||
if (appParamsFile != null) {
|
||||
commandLine.addParameter("@app_params");
|
||||
commandLine.addParameter(appParamsFile.getAbsolutePath());
|
||||
map.put(appParamsFile.getAbsolutePath(), FileUtil.loadFile(appParamsFile));
|
||||
OSProcessHandler.deleteFileOnTermination(commandLine, appParamsFile);
|
||||
}
|
||||
}
|
||||
@@ -372,6 +384,7 @@ public class JdkUtil {
|
||||
Manifest manifest = new Manifest();
|
||||
manifest.getMainAttributes().putValue("Created-By", ApplicationNamesInfo.getInstance().getFullProductName());
|
||||
|
||||
String manifestText = "Manifest.MF";
|
||||
if (dynamicVMOptions) {
|
||||
List<String> properties = new ArrayList<>();
|
||||
for (String param : vmParameters.getList()) {
|
||||
@@ -383,6 +396,7 @@ public class JdkUtil {
|
||||
}
|
||||
}
|
||||
manifest.getMainAttributes().putValue("VM-Options", ParametersListUtil.join(properties));
|
||||
manifestText += "VM-Options: " + ParametersListUtil.join(properties) + "\n";
|
||||
}
|
||||
else {
|
||||
commandLine.addParameters(vmParameters.getList());
|
||||
@@ -392,12 +406,12 @@ public class JdkUtil {
|
||||
|
||||
if (dynamicParameters) {
|
||||
manifest.getMainAttributes().putValue("Program-Parameters", ParametersListUtil.join(javaParameters.getProgramParametersList().getList()));
|
||||
manifestText += "Program-Parameters: " + ParametersListUtil.join(javaParameters.getProgramParametersList().getList()) + "\n";
|
||||
}
|
||||
|
||||
boolean notEscape = vmParameters.hasParameter(PROPERTY_DO_NOT_ESCAPE_CLASSPATH_URL);
|
||||
List<String> classPathList = javaParameters.getClassPath().getPathList();
|
||||
|
||||
File classpathJarFile = CommandLineWrapperUtil.createClasspathJarFile(manifest, classPathList, notEscape);
|
||||
PathsList path = javaParameters.getClassPath();
|
||||
File classpathJarFile = CommandLineWrapperUtil.createClasspathJarFile(manifest, path.getPathList(), notEscape);
|
||||
|
||||
String jarFilePath = classpathJarFile.getAbsolutePath();
|
||||
commandLine.addParameter("-classpath");
|
||||
@@ -407,6 +421,8 @@ public class JdkUtil {
|
||||
}
|
||||
commandLine.addParameter(jarFilePath);
|
||||
|
||||
commandLine.putUserData(COMMAND_LINE_CONTENT, ContainerUtil.stringMap(jarFilePath, manifestText + "Class-Path: " + path.getPathsString()));
|
||||
|
||||
OSProcessHandler.deleteFileOnTermination(commandLine, classpathJarFile);
|
||||
}
|
||||
catch (IOException e) {
|
||||
|
||||
@@ -6,11 +6,17 @@ import java.io.File
|
||||
/**
|
||||
* A console filter which looks for a given path in an output and creates a link for viewing a content of that file.
|
||||
*/
|
||||
class ArgumentFileFilter : Filter {
|
||||
class ArgumentFileFilter() : Filter {
|
||||
@Volatile private var filePath: String? = null
|
||||
@Volatile private var fileText: String? = null
|
||||
private var triggered = false
|
||||
|
||||
constructor(filePath: String?, fileText: String?) : this() {
|
||||
this.filePath = filePath
|
||||
this.fileText = fileText
|
||||
}
|
||||
|
||||
|
||||
fun setPath(path: String) {
|
||||
filePath = path
|
||||
fileText = File(path).readText()
|
||||
|
||||
Reference in New Issue
Block a user