Skip to content

Commit

Permalink
fix issue with double init of BreakpointManager, and make it service …
Browse files Browse the repository at this point in the history
…lazy
  • Loading branch information
VISTALL committed Aug 17, 2024
1 parent 621ecab commit ffd69a9
Show file tree
Hide file tree
Showing 13 changed files with 1,298 additions and 1,332 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,10 @@
/**
* @author lex
*/
@ServiceAPI(value = ComponentScope.PROJECT, lazy = false)
@ServiceAPI(value = ComponentScope.PROJECT)
public abstract class DebuggerManager {
public static DebuggerManager getInstance(Project project) {
return project.getComponent(DebuggerManager.class);
return project.getInstance(DebuggerManager.class);
}

public abstract DebugProcess getDebugProcess(ProcessHandler processHandler);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,11 @@
*/
package com.intellij.java.debugger.impl;

import com.intellij.java.debugger.DebuggerManager;
import com.intellij.java.execution.configurations.ConfigurationWithAlternativeJre;
import com.intellij.java.language.impl.psi.NonClasspathClassFinder;
import com.intellij.java.language.impl.psi.NonClasspathDirectoriesScope;
import consulo.annotation.component.ExtensionImpl;
import consulo.component.messagebus.MessageBusConnection;
import consulo.content.base.BinariesOrderRootType;
import consulo.content.base.SourcesOrderRootType;
import consulo.content.bundle.Sdk;
Expand All @@ -28,72 +28,76 @@
import consulo.language.psi.scope.GlobalSearchScope;
import consulo.project.Project;
import consulo.virtualFileSystem.VirtualFile;
import jakarta.inject.Inject;

import jakarta.annotation.Nonnull;
import jakarta.annotation.Nullable;
import jakarta.inject.Inject;

import java.util.*;

/**
* @author egor
*/
@ExtensionImpl(order = "last")
public class AlternativeJreClassFinder extends NonClasspathClassFinder {
@Inject
public AlternativeJreClassFinder(Project project, DebuggerManager manager) {
super(project);
((DebuggerManagerEx) manager).addDebuggerManagerListener(new DebuggerManagerListener() {
@Override
public void sessionCreated(DebuggerSession session) {
clearCache();
}
@Inject
public AlternativeJreClassFinder(Project project) {
super(project);
}

@Override
public void sessionRemoved(DebuggerSession session) {
clearCache();
}
});
}
@Override
protected void connect(MessageBusConnection connection) {
connection.subscribe(DebuggerManagerListener.class, new DebuggerManagerListener() {
@Override
public void sessionCreated(DebuggerSession session) {
clearCache();
}

@Override
protected List<VirtualFile> calcClassRoots() {
Collection<DebuggerSession> sessions = DebuggerManagerEx.getInstanceEx(myProject).getSessions();
if (sessions.isEmpty()) {
return Collections.emptyList();
@Override
public void sessionRemoved(DebuggerSession session) {
clearCache();
}
});
}
List<VirtualFile> res = new ArrayList<>();
for (DebuggerSession session : sessions) {
Sdk jre = session.getAlternativeJre();
if (jre != null) {
res.addAll(getClassRoots(jre));
}

@Override
protected List<VirtualFile> calcClassRoots() {
Collection<DebuggerSession> sessions = DebuggerManagerEx.getInstanceEx(myProject).getSessions();
if (sessions.isEmpty()) {
return Collections.emptyList();
}
List<VirtualFile> res = new ArrayList<>();
for (DebuggerSession session : sessions) {
Sdk jre = session.getAlternativeJre();
if (jre != null) {
res.addAll(getClassRoots(jre));
}
}
return res;
}
return res;
}

@Nullable
public static Sdk getAlternativeJre(RunProfile profile) {
if (profile instanceof ConfigurationWithAlternativeJre) {
ConfigurationWithAlternativeJre appConfig = (ConfigurationWithAlternativeJre) profile;
if (appConfig.isAlternativeJrePathEnabled()) {
return SdkTable.getInstance().findSdk(appConfig.getAlternativeJrePath());
}
@Nullable
public static Sdk getAlternativeJre(RunProfile profile) {
if (profile instanceof ConfigurationWithAlternativeJre) {
ConfigurationWithAlternativeJre appConfig = (ConfigurationWithAlternativeJre) profile;
if (appConfig.isAlternativeJrePathEnabled()) {
return SdkTable.getInstance().findSdk(appConfig.getAlternativeJrePath());
}
}
return null;
}
return null;
}

@Nonnull
private static Collection<VirtualFile> getClassRoots(@Nonnull Sdk jre) {
return Arrays.asList(jre.getRootProvider().getFiles(BinariesOrderRootType.getInstance()));
}
@Nonnull
private static Collection<VirtualFile> getClassRoots(@Nonnull Sdk jre) {
return Arrays.asList(jre.getRootProvider().getFiles(BinariesOrderRootType.getInstance()));
}

@Nonnull
public static Collection<VirtualFile> getSourceRoots(@Nonnull Sdk jre) {
return Arrays.asList(jre.getRootProvider().getFiles(SourcesOrderRootType.getInstance()));
}
@Nonnull
public static Collection<VirtualFile> getSourceRoots(@Nonnull Sdk jre) {
return Arrays.asList(jre.getRootProvider().getFiles(SourcesOrderRootType.getInstance()));
}

@Nonnull
public static GlobalSearchScope getSearchScope(@Nonnull Sdk jre) {
return new NonClasspathDirectoriesScope(getClassRoots(jre));
}
@Nonnull
public static GlobalSearchScope getSearchScope(@Nonnull Sdk jre) {
return new NonClasspathDirectoriesScope(getClassRoots(jre));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,43 +15,38 @@
*/
package com.intellij.java.debugger.impl;

import consulo.execution.ExecutionResult;
import consulo.process.ExecutionException;
import com.intellij.java.execution.configurations.RemoteConnection;
import consulo.content.bundle.Sdk;
import consulo.execution.ExecutionResult;
import consulo.language.psi.scope.GlobalSearchScope;
import consulo.process.ExecutionException;
import jakarta.annotation.Nonnull;

import jakarta.annotation.Nullable;

public interface DebugEnvironment
{

int LOCAL_START_TIMEOUT = 30000;
public interface DebugEnvironment {
int LOCAL_START_TIMEOUT = 30000;

@Nullable
ExecutionResult createExecutionResult() throws ExecutionException;
@Nullable
ExecutionResult createExecutionResult() throws ExecutionException;

@Nonnull
GlobalSearchScope getSearchScope();
@Nonnull
GlobalSearchScope getSearchScope();

@Nullable
default Sdk getAlternativeJre()
{
return null;
}
@Nullable
default Sdk getAlternativeJre() {
return null;
}

@Nullable
default Sdk getRunJre()
{
return null;
}
@Nullable
default Sdk getRunJre() {
return null;
}

boolean isRemote();
boolean isRemote();

RemoteConnection getRemoteConnection();
RemoteConnection getRemoteConnection();

long getPollTimeout();
long getPollTimeout();

String getSessionName();
String getSessionName();
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,38 +15,31 @@
*/
package com.intellij.java.debugger.impl;

import java.util.Collection;

import jakarta.annotation.Nonnull;

import com.intellij.java.debugger.DebuggerManager;
import com.intellij.java.debugger.engine.DebugProcess;
import com.intellij.java.debugger.impl.ui.breakpoints.BreakpointManager;
import consulo.process.ExecutionException;
import consulo.project.Project;
import jakarta.annotation.Nonnull;
import jakarta.annotation.Nullable;

public abstract class DebuggerManagerEx extends DebuggerManager
{
public static DebuggerManagerEx getInstanceEx(Project project)
{
return (DebuggerManagerEx) DebuggerManager.getInstance(project);
}

public abstract BreakpointManager getBreakpointManager();
import java.util.Collection;

public abstract Collection<DebuggerSession> getSessions();
public abstract class DebuggerManagerEx extends DebuggerManager {
public static DebuggerManagerEx getInstanceEx(Project project) {
return (DebuggerManagerEx) DebuggerManager.getInstance(project);
}

public abstract DebuggerSession getSession(DebugProcess debugProcess);
public abstract BreakpointManager getBreakpointManager();

public abstract DebuggerContextImpl getContext();
public abstract Collection<DebuggerSession> getSessions();

public abstract DebuggerStateManager getContextManager();
public abstract DebuggerSession getSession(DebugProcess debugProcess);

public abstract void addDebuggerManagerListener(DebuggerManagerListener debuggerManagerListener);
public abstract DebuggerContextImpl getContext();

public abstract void removeDebuggerManagerListener(DebuggerManagerListener debuggerManagerListener);
public abstract DebuggerStateManager getContextManager();

@Nullable
public abstract DebuggerSession attachVirtualMachine(@Nonnull DebugEnvironment environment) throws ExecutionException;
@Nullable
public abstract DebuggerSession attachVirtualMachine(@Nonnull DebugEnvironment environment) throws ExecutionException;
}
Loading

0 comments on commit ffd69a9

Please sign in to comment.