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;
|
||||
|
||||
import com.falsepattern.zigbrains.common.ObjectHolder;
|
||||
import com.falsepattern.zigbrains.debugbridge.ZigDebuggerDriverConfigurationProvider;
|
||||
import com.falsepattern.zigbrains.debugger.settings.ZigDebuggerSettings;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
|
@ -29,11 +28,13 @@ import com.jetbrains.cidr.execution.debugger.backend.DebuggerDriverConfiguration
|
|||
import lombok.val;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.function.Supplier;
|
||||
|
||||
public class ZigClionDebuggerDriverConfigurationProvider implements ZigDebuggerDriverConfigurationProvider {
|
||||
private static final Logger LOG = Logger.getInstance(ZigClionDebuggerDriverConfigurationProvider.class);
|
||||
|
||||
@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)
|
||||
return null;
|
||||
|
||||
|
@ -51,9 +52,10 @@ public class ZigClionDebuggerDriverConfigurationProvider implements ZigDebuggerD
|
|||
return null;
|
||||
}
|
||||
|
||||
CPPToolchains.Toolchain finalToolchain = toolchain;
|
||||
return switch (toolchain.getDebuggerKind()) {
|
||||
case CUSTOM_GDB, BUNDLED_GDB -> new ObjectHolder<>(new CLionGDBDriverConfiguration(project, toolchain));
|
||||
case BUNDLED_LLDB -> new ObjectHolder<>(new CLionLLDBDriverConfiguration(project, toolchain));
|
||||
case CUSTOM_GDB, BUNDLED_GDB -> () -> new CLionGDBDriverConfiguration(project, finalToolchain);
|
||||
case BUNDLED_LLDB -> () -> new CLionLLDBDriverConfiguration(project, finalToolchain);
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,27 +16,26 @@
|
|||
|
||||
package com.falsepattern.zigbrains.debugbridge;
|
||||
|
||||
import com.falsepattern.zigbrains.common.ObjectHolder;
|
||||
import com.intellij.openapi.extensions.ExtensionPointName;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.jetbrains.cidr.execution.debugger.backend.DebuggerDriverConfiguration;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Optional;
|
||||
import java.util.Objects;
|
||||
import java.util.function.Supplier;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
public interface ZigDebuggerDriverConfigurationProvider {
|
||||
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()
|
||||
.stream()
|
||||
.map(it -> (Supplier<DebuggerDriverConfiguration>) () -> Optional.ofNullable(it.getDebuggerConfiguration(project, isElevated, emulateTerminal))
|
||||
.map(ObjectHolder::value)
|
||||
.orElse(null));
|
||||
.map(it -> it.getDebuggerConfiguration(project, isElevated, emulateTerminal))
|
||||
.filter(Objects::nonNull)
|
||||
.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;
|
||||
|
||||
import com.falsepattern.zigbrains.ZigBundle;
|
||||
import com.falsepattern.zigbrains.common.ObjectHolder;
|
||||
import com.falsepattern.zigbrains.debugbridge.ZigDebuggerDriverConfigurationProvider;
|
||||
import com.falsepattern.zigbrains.debugger.settings.ZigDebuggerSettings;
|
||||
import com.falsepattern.zigbrains.debugger.toolchain.DebuggerAvailability;
|
||||
|
@ -26,6 +25,7 @@ import org.jetbrains.annotations.Nullable;
|
|||
|
||||
import java.io.File;
|
||||
import java.nio.file.Path;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
public class ZigDefaultDebuggerDriverConfigurationProvider implements ZigDebuggerDriverConfigurationProvider {
|
||||
private static boolean availabilityCheck(Project project, DebuggerKind kind) {
|
||||
|
@ -79,7 +79,7 @@ public class ZigDefaultDebuggerDriverConfigurationProvider implements ZigDebugge
|
|||
}
|
||||
|
||||
@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 service = ZigDebuggerToolchainService.getInstance();
|
||||
val kind = settings.debuggerKind;
|
||||
|
@ -88,14 +88,14 @@ public class ZigDefaultDebuggerDriverConfigurationProvider implements ZigDebugge
|
|||
}
|
||||
val availability = service.debuggerAvailability(kind);
|
||||
return switch (availability.kind()) {
|
||||
case Bundled -> new ObjectHolder<>(switch (kind) {
|
||||
case Bundled -> () -> (switch (kind) {
|
||||
case LLDB -> new ZigLLDBDriverConfiguration(isElevated, emulateTerminal);
|
||||
case GDB -> new ZigGDBDriverConfiguration(isElevated, emulateTerminal);
|
||||
case MSVC -> throw new AssertionError("MSVC is never bundled");
|
||||
});
|
||||
case Binaries -> {
|
||||
val bin = (DebuggerAvailability.Binaries) availability;
|
||||
yield new ObjectHolder<>(switch (bin.binariesKind()) {
|
||||
yield () -> (switch (bin.binariesKind()) {
|
||||
case LLDB -> new ZigCustomBinariesLLDBDriverConfiguration((LLDBBinaries) bin, isElevated, emulateTerminal);
|
||||
case GDB -> new ZigCustomBinariesGDBDriverConfiguration((GDBBinaries) 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)
|
||||
throws ExecutionException {
|
||||
val project = environment.getProject();
|
||||
val providers = ZigDebuggerDriverConfigurationProvider.findDebuggerConfigurations(project, false, false)
|
||||
val drivers = ZigDebuggerDriverConfigurationProvider.findDebuggerConfigurations(project, false, false)
|
||||
.toList();
|
||||
|
||||
DebuggerDriverConfiguration debuggerDriver = null;
|
||||
|
||||
for (val provider: providers) {
|
||||
debuggerDriver = provider.get();
|
||||
if (debuggerDriver != null)
|
||||
break;
|
||||
}
|
||||
|
||||
if (debuggerDriver == null) {
|
||||
return null;
|
||||
}
|
||||
for (val debuggerDriver: drivers) {
|
||||
if (debuggerDriver == null)
|
||||
continue;
|
||||
ZigDebugParametersBase<ProfileState> runParameters = getDebugParameters(state, environment, debuggerDriver, toolchain);
|
||||
if (runParameters == null) {
|
||||
return null;
|
||||
continue;
|
||||
}
|
||||
|
||||
return startSession(environment, new ZigLocalDebugProcessStarter(runParameters, state, environment));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public abstract boolean canRun(@NotNull String executorId, @NotNull RunProfile profile);
|
||||
|
|
Loading…
Add table
Reference in a new issue