From 33ac210e7b18e273031611ec32b44ef0ac0546e2 Mon Sep 17 00:00:00 2001 From: "Anna.Kozlova" Date: Thu, 5 Oct 2017 17:52:08 +0200 Subject: [PATCH] show shortened classpath preview (IDEA-165946) --- .../JavaTestFrameworkRunnableState.java | 21 ++++++++++++---- .../application/ApplicationConfiguration.java | 12 ++++++++++ .../openapi/projectRoots/JdkUtil.java | 24 +++++++++++++++---- .../execution/filters/ArgumentFileFilter.kt | 8 ++++++- 4 files changed, 56 insertions(+), 9 deletions(-) diff --git a/java/execution/impl/src/com/intellij/execution/JavaTestFrameworkRunnableState.java b/java/execution/impl/src/com/intellij/execution/JavaTestFrameworkRunnableState.java index ebeb4b2eef6e..d2cb63307cdb 100644 --- a/java/execution/impl/src/com/intellij/execution/JavaTestFrameworkRunnableState.java +++ b/java/execution/impl/src/com/intellij/execution/JavaTestFrameworkRunnableState.java @@ -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 @@ -82,6 +80,7 @@ public abstract class JavaTestFrameworkRunnableState myArgumentFileFilters = new ArrayList<>(); public void setRemoteConnectionCreator(RemoteConnectionCreator remoteConnectionCreator) { this.remoteConnectionCreator = remoteConnectionCreator; @@ -128,6 +127,16 @@ public abstract class JavaTestFrameworkRunnableState 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 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 { diff --git a/platform/lang-api/src/com/intellij/openapi/projectRoots/JdkUtil.java b/platform/lang-api/src/com/intellij/openapi/projectRoots/JdkUtil.java index 11a861ef196c..f0268dc21841 100644 --- a/platform/lang-api/src/com/intellij/openapi/projectRoots/JdkUtil.java +++ b/platform/lang-api/src/com/intellij/openapi/projectRoots/JdkUtil.java @@ -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> COMMAND_LINE_CONTENT = Key.create("command.line.content"); + /** * The VM property is needed to workaround incorrect escaped URLs handling in WebSphere, * see IDEA-126859 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 map = ContainerUtil.stringMap(classpathFile.getAbsolutePath(), classPath.getPathsString()); + commandLine.putUserData(COMMAND_LINE_CONTENT, map); + Set 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 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 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) { diff --git a/platform/platform-impl/src/com/intellij/execution/filters/ArgumentFileFilter.kt b/platform/platform-impl/src/com/intellij/execution/filters/ArgumentFileFilter.kt index 9616b428acb6..b5f5e833562d 100644 --- a/platform/platform-impl/src/com/intellij/execution/filters/ArgumentFileFilter.kt +++ b/platform/platform-impl/src/com/intellij/execution/filters/ArgumentFileFilter.kt @@ -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()