chore: Simplify debugger driver config pipeline
This commit is contained in:
parent
79481eb6f3
commit
998697dcb6
5 changed files with 26 additions and 41 deletions
|
@ -1,9 +0,0 @@
|
||||||
package com.falsepattern.zigbrains.common;
|
|
||||||
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Evil hack for bypassing plugin verifier restrictions via generics. Unfortunately this is necessary due to public api limitations.
|
|
||||||
*/
|
|
||||||
public record ObjectHolder<T>(@NotNull T value) {
|
|
||||||
}
|
|
|
@ -16,7 +16,6 @@
|
||||||
|
|
||||||
package com.falsepattern.zigbrains.clion;
|
package com.falsepattern.zigbrains.clion;
|
||||||
|
|
||||||
import com.falsepattern.zigbrains.common.ObjectHolder;
|
|
||||||
import com.falsepattern.zigbrains.debugbridge.ZigDebuggerDriverConfigurationProvider;
|
import com.falsepattern.zigbrains.debugbridge.ZigDebuggerDriverConfigurationProvider;
|
||||||
import com.falsepattern.zigbrains.debugger.settings.ZigDebuggerSettings;
|
import com.falsepattern.zigbrains.debugger.settings.ZigDebuggerSettings;
|
||||||
import com.intellij.openapi.diagnostic.Logger;
|
import com.intellij.openapi.diagnostic.Logger;
|
||||||
|
@ -29,11 +28,13 @@ import com.jetbrains.cidr.execution.debugger.backend.DebuggerDriverConfiguration
|
||||||
import lombok.val;
|
import lombok.val;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
public class ZigClionDebuggerDriverConfigurationProvider implements ZigDebuggerDriverConfigurationProvider {
|
public class ZigClionDebuggerDriverConfigurationProvider implements ZigDebuggerDriverConfigurationProvider {
|
||||||
private static final Logger LOG = Logger.getInstance(ZigClionDebuggerDriverConfigurationProvider.class);
|
private static final Logger LOG = Logger.getInstance(ZigClionDebuggerDriverConfigurationProvider.class);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @Nullable ObjectHolder<DebuggerDriverConfiguration> getDebuggerConfiguration(Project project, boolean isElevated, boolean emulateTerminal) {
|
public @Nullable Supplier<DebuggerDriverConfiguration> getDebuggerConfiguration(Project project, boolean isElevated, boolean emulateTerminal) {
|
||||||
if (SystemInfo.isWindows)
|
if (SystemInfo.isWindows)
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
|
@ -51,9 +52,10 @@ public class ZigClionDebuggerDriverConfigurationProvider implements ZigDebuggerD
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CPPToolchains.Toolchain finalToolchain = toolchain;
|
||||||
return switch (toolchain.getDebuggerKind()) {
|
return switch (toolchain.getDebuggerKind()) {
|
||||||
case CUSTOM_GDB, BUNDLED_GDB -> new ObjectHolder<>(new CLionGDBDriverConfiguration(project, toolchain));
|
case CUSTOM_GDB, BUNDLED_GDB -> () -> new CLionGDBDriverConfiguration(project, finalToolchain);
|
||||||
case BUNDLED_LLDB -> new ObjectHolder<>(new CLionLLDBDriverConfiguration(project, toolchain));
|
case BUNDLED_LLDB -> () -> new CLionLLDBDriverConfiguration(project, finalToolchain);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,27 +16,26 @@
|
||||||
|
|
||||||
package com.falsepattern.zigbrains.debugbridge;
|
package com.falsepattern.zigbrains.debugbridge;
|
||||||
|
|
||||||
import com.falsepattern.zigbrains.common.ObjectHolder;
|
|
||||||
import com.intellij.openapi.extensions.ExtensionPointName;
|
import com.intellij.openapi.extensions.ExtensionPointName;
|
||||||
import com.intellij.openapi.project.Project;
|
import com.intellij.openapi.project.Project;
|
||||||
import com.jetbrains.cidr.execution.debugger.backend.DebuggerDriverConfiguration;
|
import com.jetbrains.cidr.execution.debugger.backend.DebuggerDriverConfiguration;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import java.util.Optional;
|
import java.util.Objects;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
public interface ZigDebuggerDriverConfigurationProvider {
|
public interface ZigDebuggerDriverConfigurationProvider {
|
||||||
ExtensionPointName<ZigDebuggerDriverConfigurationProvider> EXTENSION_POINT_NAME = ExtensionPointName.create("com.falsepattern.zigbrains.debuggerDriverProvider");
|
ExtensionPointName<ZigDebuggerDriverConfigurationProvider> EXTENSION_POINT_NAME = ExtensionPointName.create("com.falsepattern.zigbrains.debuggerDriverProvider");
|
||||||
|
|
||||||
static @NotNull Stream<Supplier<DebuggerDriverConfiguration>> findDebuggerConfigurations(Project project, boolean isElevated, boolean emulateTerminal) {
|
static @NotNull Stream<DebuggerDriverConfiguration> findDebuggerConfigurations(Project project, boolean isElevated, boolean emulateTerminal) {
|
||||||
return EXTENSION_POINT_NAME.getExtensionList()
|
return EXTENSION_POINT_NAME.getExtensionList()
|
||||||
.stream()
|
.stream()
|
||||||
.map(it -> (Supplier<DebuggerDriverConfiguration>) () -> Optional.ofNullable(it.getDebuggerConfiguration(project, isElevated, emulateTerminal))
|
.map(it -> it.getDebuggerConfiguration(project, isElevated, emulateTerminal))
|
||||||
.map(ObjectHolder::value)
|
.filter(Objects::nonNull)
|
||||||
.orElse(null));
|
.map(Supplier::get);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable ObjectHolder<DebuggerDriverConfiguration> getDebuggerConfiguration(Project project, boolean isElevated, boolean emulateTerminal);
|
@Nullable Supplier<DebuggerDriverConfiguration> getDebuggerConfiguration(Project project, boolean isElevated, boolean emulateTerminal);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
package com.falsepattern.zigbrains.debugger;
|
package com.falsepattern.zigbrains.debugger;
|
||||||
|
|
||||||
import com.falsepattern.zigbrains.ZigBundle;
|
import com.falsepattern.zigbrains.ZigBundle;
|
||||||
import com.falsepattern.zigbrains.common.ObjectHolder;
|
|
||||||
import com.falsepattern.zigbrains.debugbridge.ZigDebuggerDriverConfigurationProvider;
|
import com.falsepattern.zigbrains.debugbridge.ZigDebuggerDriverConfigurationProvider;
|
||||||
import com.falsepattern.zigbrains.debugger.settings.ZigDebuggerSettings;
|
import com.falsepattern.zigbrains.debugger.settings.ZigDebuggerSettings;
|
||||||
import com.falsepattern.zigbrains.debugger.toolchain.DebuggerAvailability;
|
import com.falsepattern.zigbrains.debugger.toolchain.DebuggerAvailability;
|
||||||
|
@ -26,6 +25,7 @@ import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
public class ZigDefaultDebuggerDriverConfigurationProvider implements ZigDebuggerDriverConfigurationProvider {
|
public class ZigDefaultDebuggerDriverConfigurationProvider implements ZigDebuggerDriverConfigurationProvider {
|
||||||
private static boolean availabilityCheck(Project project, DebuggerKind kind) {
|
private static boolean availabilityCheck(Project project, DebuggerKind kind) {
|
||||||
|
@ -79,7 +79,7 @@ public class ZigDefaultDebuggerDriverConfigurationProvider implements ZigDebugge
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @Nullable ObjectHolder<DebuggerDriverConfiguration> getDebuggerConfiguration(Project project, boolean isElevated, boolean emulateTerminal) {
|
public @Nullable Supplier<DebuggerDriverConfiguration> getDebuggerConfiguration(Project project, boolean isElevated, boolean emulateTerminal) {
|
||||||
val settings = ZigDebuggerSettings.getInstance();
|
val settings = ZigDebuggerSettings.getInstance();
|
||||||
val service = ZigDebuggerToolchainService.getInstance();
|
val service = ZigDebuggerToolchainService.getInstance();
|
||||||
val kind = settings.debuggerKind;
|
val kind = settings.debuggerKind;
|
||||||
|
@ -88,14 +88,14 @@ public class ZigDefaultDebuggerDriverConfigurationProvider implements ZigDebugge
|
||||||
}
|
}
|
||||||
val availability = service.debuggerAvailability(kind);
|
val availability = service.debuggerAvailability(kind);
|
||||||
return switch (availability.kind()) {
|
return switch (availability.kind()) {
|
||||||
case Bundled -> new ObjectHolder<>(switch (kind) {
|
case Bundled -> () -> (switch (kind) {
|
||||||
case LLDB -> new ZigLLDBDriverConfiguration(isElevated, emulateTerminal);
|
case LLDB -> new ZigLLDBDriverConfiguration(isElevated, emulateTerminal);
|
||||||
case GDB -> new ZigGDBDriverConfiguration(isElevated, emulateTerminal);
|
case GDB -> new ZigGDBDriverConfiguration(isElevated, emulateTerminal);
|
||||||
case MSVC -> throw new AssertionError("MSVC is never bundled");
|
case MSVC -> throw new AssertionError("MSVC is never bundled");
|
||||||
});
|
});
|
||||||
case Binaries -> {
|
case Binaries -> {
|
||||||
val bin = (DebuggerAvailability.Binaries) availability;
|
val bin = (DebuggerAvailability.Binaries) availability;
|
||||||
yield new ObjectHolder<>(switch (bin.binariesKind()) {
|
yield () -> (switch (bin.binariesKind()) {
|
||||||
case LLDB -> new ZigCustomBinariesLLDBDriverConfiguration((LLDBBinaries) bin, isElevated, emulateTerminal);
|
case LLDB -> new ZigCustomBinariesLLDBDriverConfiguration((LLDBBinaries) bin, isElevated, emulateTerminal);
|
||||||
case GDB -> new ZigCustomBinariesGDBDriverConfiguration((GDBBinaries) bin, isElevated, emulateTerminal);
|
case GDB -> new ZigCustomBinariesGDBDriverConfiguration((GDBBinaries) bin, isElevated, emulateTerminal);
|
||||||
case MSVC -> new ZigMSVCDriverConfiguration((MSVCBinaries) bin, isElevated, emulateTerminal);
|
case MSVC -> new ZigMSVCDriverConfiguration((MSVCBinaries) bin, isElevated, emulateTerminal);
|
||||||
|
|
|
@ -66,27 +66,20 @@ public abstract class ZigDebugRunnerBase<ProfileState extends ProfileStateBase<?
|
||||||
protected RunContentDescriptor doExecute(ProfileState state, AbstractZigToolchain toolchain, ExecutionEnvironment environment)
|
protected RunContentDescriptor doExecute(ProfileState state, AbstractZigToolchain toolchain, ExecutionEnvironment environment)
|
||||||
throws ExecutionException {
|
throws ExecutionException {
|
||||||
val project = environment.getProject();
|
val project = environment.getProject();
|
||||||
val providers = ZigDebuggerDriverConfigurationProvider.findDebuggerConfigurations(project, false, false)
|
val drivers = ZigDebuggerDriverConfigurationProvider.findDebuggerConfigurations(project, false, false)
|
||||||
.toList();
|
.toList();
|
||||||
|
|
||||||
DebuggerDriverConfiguration debuggerDriver = null;
|
for (val debuggerDriver: drivers) {
|
||||||
|
if (debuggerDriver == null)
|
||||||
for (val provider: providers) {
|
continue;
|
||||||
debuggerDriver = provider.get();
|
|
||||||
if (debuggerDriver != null)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (debuggerDriver == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
ZigDebugParametersBase<ProfileState> runParameters = getDebugParameters(state, environment, debuggerDriver, toolchain);
|
ZigDebugParametersBase<ProfileState> runParameters = getDebugParameters(state, environment, debuggerDriver, toolchain);
|
||||||
if (runParameters == null) {
|
if (runParameters == null) {
|
||||||
return null;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
return startSession(environment, new ZigLocalDebugProcessStarter(runParameters, state, environment));
|
return startSession(environment, new ZigLocalDebugProcessStarter(runParameters, state, environment));
|
||||||
}
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public abstract boolean canRun(@NotNull String executorId, @NotNull RunProfile profile);
|
public abstract boolean canRun(@NotNull String executorId, @NotNull RunProfile profile);
|
||||||
|
|
Loading…
Add table
Reference in a new issue