mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-155877 Tests in fork mode does not work with kotlin
This commit is contained in:
@@ -15,13 +15,12 @@
|
||||
*/
|
||||
package com.intellij.debugger.engine;
|
||||
|
||||
import com.intellij.debugger.DebuggerBundle;
|
||||
import com.intellij.debugger.DebuggerInvocationUtil;
|
||||
import com.intellij.debugger.DebuggerManagerEx;
|
||||
import com.intellij.debugger.*;
|
||||
import com.intellij.debugger.engine.events.DebuggerCommandImpl;
|
||||
import com.intellij.debugger.engine.events.SuspendContextCommandImpl;
|
||||
import com.intellij.debugger.engine.requests.LocatableEventRequestor;
|
||||
import com.intellij.debugger.engine.requests.MethodReturnValueWatcher;
|
||||
import com.intellij.debugger.impl.DebuggerManagerImpl;
|
||||
import com.intellij.debugger.impl.DebuggerSession;
|
||||
import com.intellij.debugger.jdi.ThreadReferenceProxyImpl;
|
||||
import com.intellij.debugger.jdi.VirtualMachineProxyImpl;
|
||||
@@ -33,6 +32,7 @@ import com.intellij.execution.configurations.RemoteConnection;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.application.ModalityState;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.extensions.Extensions;
|
||||
import com.intellij.openapi.progress.ProcessCanceledException;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.ui.MessageType;
|
||||
@@ -52,6 +52,9 @@ import com.sun.jdi.request.ThreadDeathRequest;
|
||||
import com.sun.jdi.request.ThreadStartRequest;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
/**
|
||||
* @author lex
|
||||
*/
|
||||
@@ -331,6 +334,16 @@ public class DebugProcessEvents extends DebugProcessImpl {
|
||||
threadDeathRequest.setSuspendPolicy(EventRequest.SUSPEND_NONE);
|
||||
threadDeathRequest.enable();
|
||||
|
||||
// fill position managers
|
||||
((DebuggerManagerImpl)DebuggerManager.getInstance(getProject())).getCustomPositionManagerFactories()
|
||||
.map(factory -> factory.fun(this))
|
||||
.filter(Objects::nonNull)
|
||||
.forEach(this::appendPositionManager);
|
||||
Stream.of(Extensions.getExtensions(PositionManagerFactory.EP_NAME, getProject()))
|
||||
.map(factory -> factory.createPositionManager(this))
|
||||
.filter(Objects::nonNull)
|
||||
.forEach(this::appendPositionManager);
|
||||
|
||||
myDebugProcessDispatcher.getMulticaster().processAttached(this);
|
||||
|
||||
// breakpoints should be initialized after all processAttached listeners work
|
||||
|
||||
@@ -271,9 +271,7 @@ public abstract class DebugProcessImpl extends UserDataHolderBase implements Deb
|
||||
LOG.error("State is invalid " + myState.get());
|
||||
}
|
||||
DebuggerManagerThreadImpl.assertIsManagerThread();
|
||||
if (myPositionManager == null) { // no need to reset on reattach
|
||||
myPositionManager = createPositionManager();
|
||||
}
|
||||
myPositionManager = new CompoundPositionManager(new PositionManagerImpl(this));
|
||||
LOG.debug("*******************VM attached******************");
|
||||
checkVirtualMachineVersion(vm);
|
||||
|
||||
@@ -348,11 +346,6 @@ public abstract class DebugProcessImpl extends UserDataHolderBase implements Deb
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
protected CompoundPositionManager createPositionManager() {
|
||||
return new CompoundPositionManager(new PositionManagerImpl(this));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void printToConsole(final String text) {
|
||||
myExecutionResult.getProcessHandler().notifyTextAvailable(text, ProcessOutputTypes.SYSTEM);
|
||||
@@ -1834,18 +1827,28 @@ public abstract class DebugProcessImpl extends UserDataHolderBase implements Deb
|
||||
}
|
||||
|
||||
public void reattach(final DebugEnvironment environment) throws ExecutionException {
|
||||
ApplicationManager.getApplication().assertIsDispatchThread(); //TODO: remove this requirement
|
||||
((XDebugSessionImpl)getXdebugProcess().getSession()).reset();
|
||||
myState.set(State.INITIAL);
|
||||
getManagerThread().schedule(new DebuggerCommandImpl() {
|
||||
@Override
|
||||
protected void action() throws Exception {
|
||||
myRequestManager.processDetached(DebugProcessImpl.this, false);
|
||||
closeProcess(false);
|
||||
doReattach();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void commandCancelled() {
|
||||
doReattach(); // if the original process is already finished
|
||||
}
|
||||
|
||||
private void doReattach() {
|
||||
DebuggerInvocationUtil.swingInvokeLater(myProject, () -> {
|
||||
((XDebugSessionImpl)getXdebugProcess().getSession()).reset();
|
||||
myState.set(State.INITIAL);
|
||||
myConnection = environment.getRemoteConnection();
|
||||
getManagerThread().restartIfNeeded();
|
||||
createVirtualMachine(environment.getSessionName(), environment.isPollConnection());
|
||||
});
|
||||
}
|
||||
});
|
||||
myConnection = environment.getRemoteConnection();
|
||||
getManagerThread().restartIfNeeded();
|
||||
createVirtualMachine(environment.getSessionName(), environment.isPollConnection());
|
||||
}
|
||||
|
||||
@Nullable
|
||||
|
||||
@@ -26,7 +26,6 @@ import com.intellij.execution.ExecutionException;
|
||||
import com.intellij.execution.ExecutionResult;
|
||||
import com.intellij.execution.configurations.JavaParameters;
|
||||
import com.intellij.execution.configurations.RemoteConnection;
|
||||
import com.intellij.execution.configurations.RunProfileState;
|
||||
import com.intellij.execution.process.KillableColoredProcessHandler;
|
||||
import com.intellij.execution.process.ProcessAdapter;
|
||||
import com.intellij.execution.process.ProcessEvent;
|
||||
@@ -40,7 +39,6 @@ import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.editor.colors.EditorColorsListener;
|
||||
import com.intellij.openapi.editor.colors.EditorColorsManager;
|
||||
import com.intellij.openapi.editor.colors.EditorColorsScheme;
|
||||
import com.intellij.openapi.extensions.Extensions;
|
||||
import com.intellij.openapi.progress.ProgressManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.projectRoots.JavaSdk;
|
||||
@@ -56,6 +54,7 @@ import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiClass;
|
||||
import com.intellij.util.EventDispatcher;
|
||||
import com.intellij.util.Function;
|
||||
import com.intellij.util.SmartList;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import org.jdom.Element;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
@@ -66,6 +65,7 @@ import javax.swing.*;
|
||||
import java.io.File;
|
||||
import java.util.*;
|
||||
import java.util.jar.Attributes;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
@State(name = "DebuggerManager", storages = {@Storage(StoragePathMacros.WORKSPACE_FILE)})
|
||||
public class DebuggerManagerImpl extends DebuggerManagerEx implements PersistentStateComponent<Element> {
|
||||
@@ -75,8 +75,7 @@ public class DebuggerManagerImpl extends DebuggerManagerEx implements Persistent
|
||||
private final HashMap<ProcessHandler, DebuggerSession> mySessions = new HashMap<>();
|
||||
private final BreakpointManager myBreakpointManager;
|
||||
private final List<NameMapper> myNameMappers = ContainerUtil.createLockFreeCopyOnWriteList();
|
||||
private final List<Function<DebugProcess, PositionManager>> myCustomPositionManagerFactories =
|
||||
new ArrayList<>();
|
||||
private final List<Function<DebugProcess, PositionManager>> myCustomPositionManagerFactories = new SmartList<>();
|
||||
|
||||
private final EventDispatcher<DebuggerManagerListener> myDispatcher = EventDispatcher.create(DebuggerManagerListener.class);
|
||||
private final MyDebuggerStateManager myDebuggerStateManager = new MyDebuggerStateManager();
|
||||
@@ -209,41 +208,19 @@ public class DebuggerManagerImpl extends DebuggerManagerEx implements Persistent
|
||||
myBreakpointManager.writeExternal(element);
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated to be removed with {@link DebuggerManager#registerPositionManagerFactory(Function)}
|
||||
*/
|
||||
@Deprecated
|
||||
public Stream<Function<DebugProcess, PositionManager>> getCustomPositionManagerFactories() {
|
||||
return myCustomPositionManagerFactories.stream();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public DebuggerSession attachVirtualMachine(@NotNull DebugEnvironment environment) throws ExecutionException {
|
||||
ApplicationManager.getApplication().assertIsDispatchThread();
|
||||
final DebugProcessEvents debugProcess = new DebugProcessEvents(myProject);
|
||||
debugProcess.addDebugProcessListener(new DebugProcessListener() {
|
||||
@Override
|
||||
public void processAttached(final DebugProcess process) {
|
||||
process.removeDebugProcessListener(this);
|
||||
for (Function<DebugProcess, PositionManager> factory : myCustomPositionManagerFactories) {
|
||||
final PositionManager positionManager = factory.fun(process);
|
||||
if (positionManager != null) {
|
||||
process.appendPositionManager(positionManager);
|
||||
}
|
||||
}
|
||||
for (PositionManagerFactory factory : Extensions.getExtensions(PositionManagerFactory.EP_NAME, myProject)) {
|
||||
final PositionManager manager = factory.createPositionManager(debugProcess);
|
||||
if (manager != null) {
|
||||
process.appendPositionManager(manager);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void processDetached(final DebugProcess process, final boolean closedByUser) {
|
||||
debugProcess.removeDebugProcessListener(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void attachException(final RunProfileState state,
|
||||
final ExecutionException exception,
|
||||
final RemoteConnection remoteConnection) {
|
||||
debugProcess.removeDebugProcessListener(this);
|
||||
}
|
||||
});
|
||||
DebugProcessEvents debugProcess = new DebugProcessEvents(myProject);
|
||||
DebuggerSession session = DebuggerSession.create(environment.getSessionName(), debugProcess, environment);
|
||||
ExecutionResult executionResult = session.getProcess().getExecutionResult();
|
||||
if (executionResult == null) {
|
||||
|
||||
Reference in New Issue
Block a user