mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-04 17:20:55 +07:00
Clickable links for remote files in console (PY-10224).
This commit is contained in:
@@ -19,7 +19,6 @@ import com.intellij.execution.ExecutionException;
|
||||
import com.intellij.execution.configurations.GeneralCommandLine;
|
||||
import com.intellij.execution.configurations.ParametersList;
|
||||
import com.intellij.execution.configurations.ParamsGroup;
|
||||
import com.intellij.execution.filters.Filter;
|
||||
import com.intellij.execution.process.ProcessAdapter;
|
||||
import com.intellij.execution.process.ProcessEvent;
|
||||
import com.intellij.execution.process.ProcessHandler;
|
||||
@@ -33,7 +32,6 @@ import com.jetbrains.python.run.PythonProcessRunner;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.util.Collections;
|
||||
|
||||
/**
|
||||
* User : catherine
|
||||
@@ -43,7 +41,7 @@ public abstract class RestCommandLineState extends PythonCommandLineState {
|
||||
|
||||
public RestCommandLineState(RestRunConfiguration configuration,
|
||||
ExecutionEnvironment env) {
|
||||
super(configuration, env, Collections.<Filter>emptyList());
|
||||
super(configuration, env);
|
||||
myConfiguration = configuration;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
/*
|
||||
* Copyright 2000-2014 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.jetbrains.python.run;
|
||||
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vfs.LocalFileSystem;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.remote.RemoteProcessHandlerBase;
|
||||
import com.intellij.util.PathMappingSettings;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
/**
|
||||
* @author traff
|
||||
*/
|
||||
public class PyRemoteTracebackFilter extends PythonTracebackFilter {
|
||||
private final RemoteProcessHandlerBase myHandler;
|
||||
|
||||
public PyRemoteTracebackFilter(Project project, RemoteProcessHandlerBase remoteProcessHandler) {
|
||||
super(project);
|
||||
|
||||
|
||||
myHandler = remoteProcessHandler;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
protected VirtualFile findFileByName(String fileName) {
|
||||
for (PathMappingSettings.PathMapping m : myHandler.getMappingSettings().getPathMappings()) {
|
||||
if (m.canReplaceRemote(fileName)) {
|
||||
VirtualFile file = LocalFileSystem.getInstance().findFileByPath(m.mapToLocal(fileName));
|
||||
if (file != null && file.exists()) {
|
||||
return file;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -47,6 +47,7 @@ import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.util.registry.Registry;
|
||||
import com.intellij.openapi.vfs.JarFileSystem;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.remote.RemoteProcessHandlerBase;
|
||||
import com.intellij.util.PlatformUtils;
|
||||
import com.intellij.util.containers.HashMap;
|
||||
import com.jetbrains.python.PythonHelpersLocator;
|
||||
@@ -80,7 +81,9 @@ public abstract class PythonCommandLineState extends CommandLineState {
|
||||
public static final String GROUP_DEBUGGER = "Debugger";
|
||||
public static final String GROUP_SCRIPT = "Script";
|
||||
private final AbstractPythonRunConfiguration myConfig;
|
||||
private final List<Filter> myFilters;
|
||||
|
||||
private final List<Filter> myFilters = Lists.<Filter>newArrayList(new UrlFilter());
|
||||
|
||||
private Boolean myMultiprocessDebug = null;
|
||||
|
||||
public boolean isDebug() {
|
||||
@@ -99,15 +102,9 @@ public abstract class PythonCommandLineState extends CommandLineState {
|
||||
return serverSocket;
|
||||
}
|
||||
|
||||
public PythonCommandLineState(AbstractPythonRunConfiguration runConfiguration, ExecutionEnvironment env, List<Filter> filters) {
|
||||
public PythonCommandLineState(AbstractPythonRunConfiguration runConfiguration, ExecutionEnvironment env) {
|
||||
super(env);
|
||||
myConfig = runConfiguration;
|
||||
myFilters = Lists.newArrayList(filters);
|
||||
addDefaultFilters();
|
||||
}
|
||||
|
||||
protected void addDefaultFilters() {
|
||||
myFilters.add(new UrlFilter());
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@@ -134,10 +131,23 @@ public abstract class PythonCommandLineState extends CommandLineState {
|
||||
protected ConsoleView createAndAttachConsole(Project project, ProcessHandler processHandler, Executor executor)
|
||||
throws ExecutionException {
|
||||
final ConsoleView consoleView = createConsoleBuilder(project).filters(myFilters).getConsole();
|
||||
|
||||
addTracebackFilter(project, consoleView, processHandler);
|
||||
|
||||
consoleView.attachToProcess(processHandler);
|
||||
return consoleView;
|
||||
}
|
||||
|
||||
protected void addTracebackFilter(Project project, ConsoleView consoleView, ProcessHandler processHandler) {
|
||||
if (PySdkUtil.isRemote(myConfig.getSdk())) {
|
||||
assert processHandler instanceof RemoteProcessHandlerBase;
|
||||
consoleView.addMessageFilter(new PyRemoteTracebackFilter(project, (RemoteProcessHandlerBase) processHandler));
|
||||
}
|
||||
else {
|
||||
consoleView.addMessageFilter(new PythonTracebackFilter(project, myConfig.getWorkingDirectory()));
|
||||
}
|
||||
}
|
||||
|
||||
private TextConsoleBuilder createConsoleBuilder(Project project) {
|
||||
if (isDebug()) {
|
||||
return new PyDebugConsoleBuilder(project, PythonSdkType.findSdkByPath(myConfig.getInterpreterPath()));
|
||||
|
||||
@@ -15,11 +15,9 @@
|
||||
*/
|
||||
package com.jetbrains.python.run;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.intellij.execution.ExecutionException;
|
||||
import com.intellij.execution.Executor;
|
||||
import com.intellij.execution.configurations.*;
|
||||
import com.intellij.execution.filters.Filter;
|
||||
import com.intellij.execution.runners.ExecutionEnvironment;
|
||||
import com.intellij.openapi.components.PathMacroManager;
|
||||
import com.intellij.openapi.options.SettingsEditor;
|
||||
@@ -40,7 +38,6 @@ import org.jdom.Element;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author yole
|
||||
@@ -64,10 +61,7 @@ public class PythonRunConfiguration extends AbstractPythonRunConfiguration
|
||||
}
|
||||
|
||||
public RunProfileState getState(@NotNull final Executor executor, @NotNull final ExecutionEnvironment env) throws ExecutionException {
|
||||
List<Filter> filters = Lists.newArrayList();
|
||||
filters.add(new PythonTracebackFilter(getProject(), getWorkingDirectory()));
|
||||
|
||||
return new PythonScriptCommandLineState(this, env, filters);
|
||||
return new PythonScriptCommandLineState(this, env);
|
||||
}
|
||||
|
||||
public void checkConfiguration() throws RuntimeConfigurationException {
|
||||
|
||||
@@ -18,20 +18,17 @@ package com.jetbrains.python.run;
|
||||
import com.intellij.execution.configurations.GeneralCommandLine;
|
||||
import com.intellij.execution.configurations.ParametersList;
|
||||
import com.intellij.execution.configurations.ParamsGroup;
|
||||
import com.intellij.execution.filters.Filter;
|
||||
import com.intellij.execution.runners.ExecutionEnvironment;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author yole
|
||||
*/
|
||||
public class PythonScriptCommandLineState extends PythonCommandLineState {
|
||||
private final PythonRunConfiguration myConfig;
|
||||
|
||||
public PythonScriptCommandLineState(PythonRunConfiguration runConfiguration, ExecutionEnvironment env, List<Filter> filters) {
|
||||
super(runConfiguration, env, filters);
|
||||
public PythonScriptCommandLineState(PythonRunConfiguration runConfiguration, ExecutionEnvironment env) {
|
||||
super(runConfiguration, env);
|
||||
myConfig = runConfiguration;
|
||||
}
|
||||
|
||||
|
||||
@@ -51,10 +51,7 @@ public class PythonTracebackFilter implements Filter {
|
||||
if (matcher.find()) {
|
||||
String fileName = matcher.group(1).replace('\\', '/');
|
||||
int lineNumber = Integer.parseInt(matcher.group(2));
|
||||
VirtualFile vFile = LocalFileSystem.getInstance().findFileByPath(fileName);
|
||||
if (vFile == null && !StringUtil.isEmptyOrSpaces(myWorkingDirectory)) {
|
||||
vFile = LocalFileSystem.getInstance().findFileByIoFile(new File(myWorkingDirectory, fileName));
|
||||
}
|
||||
VirtualFile vFile = findFileByName(fileName);
|
||||
|
||||
if (vFile != null) {
|
||||
OpenFileHyperlinkInfo hyperlink = new OpenFileHyperlinkInfo(myProject, vFile, lineNumber - 1);
|
||||
@@ -66,4 +63,13 @@ public class PythonTracebackFilter implements Filter {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
protected VirtualFile findFileByName(String fileName) {
|
||||
VirtualFile vFile = LocalFileSystem.getInstance().findFileByPath(fileName);
|
||||
if (vFile == null && !StringUtil.isEmptyOrSpaces(myWorkingDirectory)) {
|
||||
vFile = LocalFileSystem.getInstance().findFileByIoFile(new File(myWorkingDirectory, fileName));
|
||||
}
|
||||
return vFile;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,7 +22,6 @@ import com.intellij.execution.ExecutionResult;
|
||||
import com.intellij.execution.Executor;
|
||||
import com.intellij.execution.configurations.GeneralCommandLine;
|
||||
import com.intellij.execution.configurations.ParamsGroup;
|
||||
import com.intellij.execution.filters.Filter;
|
||||
import com.intellij.execution.process.ProcessHandler;
|
||||
import com.intellij.execution.runners.ExecutionEnvironment;
|
||||
import com.intellij.execution.testframework.TestFrameworkRunningModel;
|
||||
@@ -42,12 +41,10 @@ import com.jetbrains.python.console.PythonDebugLanguageConsoleView;
|
||||
import com.jetbrains.python.run.AbstractPythonRunConfiguration;
|
||||
import com.jetbrains.python.run.CommandLinePatcher;
|
||||
import com.jetbrains.python.run.PythonCommandLineState;
|
||||
import com.jetbrains.python.run.PythonTracebackFilter;
|
||||
import com.jetbrains.python.sdk.PythonSdkType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@@ -62,7 +59,7 @@ public abstract class PythonTestCommandLineStateBase extends PythonCommandLineSt
|
||||
}
|
||||
|
||||
public PythonTestCommandLineStateBase(AbstractPythonRunConfiguration configuration, ExecutionEnvironment env) {
|
||||
super(configuration, env, Collections.<Filter>emptyList());
|
||||
super(configuration, env);
|
||||
myConfiguration = configuration;
|
||||
}
|
||||
|
||||
@@ -77,7 +74,6 @@ public abstract class PythonTestCommandLineStateBase extends PythonCommandLineSt
|
||||
consoleProperties,
|
||||
getEnvironment());
|
||||
final ConsoleView consoleView = new PythonDebugLanguageConsoleView(project, PythonSdkType.findSdkByPath(myConfiguration.getInterpreterPath()), testsOutputConsoleView);
|
||||
consoleView.addMessageFilter(new PythonTracebackFilter(project, myConfiguration.getWorkingDirectory()));
|
||||
consoleView.attachToProcess(processHandler);
|
||||
return consoleView;
|
||||
}
|
||||
@@ -85,7 +81,7 @@ public abstract class PythonTestCommandLineStateBase extends PythonCommandLineSt
|
||||
processHandler,
|
||||
consoleProperties,
|
||||
getEnvironment());
|
||||
consoleView.addMessageFilter(new PythonTracebackFilter(project, myConfiguration.getWorkingDirectory()));
|
||||
addTracebackFilter(project, consoleView, processHandler);
|
||||
return consoleView;
|
||||
}
|
||||
|
||||
|
||||
@@ -81,7 +81,7 @@ public class PyTestCommandLineState extends PythonTestCommandLineStateBase {
|
||||
protected ConsoleView createAndAttachConsole(Project project, ProcessHandler processHandler, Executor executor)
|
||||
throws ExecutionException {
|
||||
final ConsoleView consoleView = super.createAndAttachConsole(project, processHandler, executor);
|
||||
consoleView.addMessageFilter(new PyTestTracebackFilter(project, myConfiguration.getWorkingDirectory()));
|
||||
addTracebackFilter(project, consoleView, processHandler);
|
||||
return consoleView;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user