Skip to content

Commit

Permalink
change logic for default debug editor provider logic - not return pla…
Browse files Browse the repository at this point in the history
…in text
  • Loading branch information
VISTALL committed Jan 3, 2025
1 parent 4986d1e commit f7f6a39
Show file tree
Hide file tree
Showing 3 changed files with 88 additions and 60 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ public ExecutionConsole createConsole() {
@Nonnull
@Override
public XDebuggerEditorsProvider getEditorsProvider() {
return new DotNetEditorsProvider(getSession());
return new DotNetEditorsProvider(getSession(), myRunProfile);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,89 +3,106 @@
import consulo.annotation.access.RequiredReadAction;
import consulo.dotnet.debugger.DotNetDebuggerProvider;
import consulo.dotnet.debugger.DotNetDebuggerProviders;
import consulo.dotnet.module.extension.DotNetModuleLangExtension;
import consulo.execution.configuration.ModuleRunConfiguration;
import consulo.execution.configuration.RunProfile;
import consulo.execution.debug.XDebugSession;
import consulo.execution.debug.XSourcePosition;
import consulo.execution.debug.evaluation.XDebuggerEditorsProviderBase;
import consulo.language.Language;
import consulo.language.file.LanguageFileType;
import consulo.language.plain.PlainTextFileType;
import consulo.language.plain.PlainTextLanguage;
import consulo.language.psi.PsiElement;
import consulo.language.psi.PsiFile;
import consulo.language.psi.PsiFileFactory;
import consulo.language.psi.PsiManager;
import consulo.module.Module;
import consulo.project.Project;
import consulo.virtualFileSystem.VirtualFile;
import consulo.virtualFileSystem.fileType.FileType;

import jakarta.annotation.Nonnull;
import jakarta.annotation.Nullable;

import java.util.Collection;
import java.util.Collections;
import java.util.List;

/**
* @author VISTALL
* @since 06.06.14
*/
public class DotNetEditorsProvider extends XDebuggerEditorsProviderBase
{
@Nullable
private XDebugSession mySession;
public class DotNetEditorsProvider extends XDebuggerEditorsProviderBase {
private final XDebugSession mySession;
private final LanguageFileType myLanguageFileType;

public DotNetEditorsProvider(@Nonnull LanguageFileType languageFileType) {
myLanguageFileType = languageFileType;
mySession = null;
}

public DotNetEditorsProvider(@Nullable XDebugSession session, @Nullable RunProfile runProfile) {
mySession = session;
myLanguageFileType = findLanguageFileType(runProfile);
}

@Nonnull
private static LanguageFileType findLanguageFileType(@Nullable RunProfile runProfile) {
if (runProfile instanceof ModuleRunConfiguration moduleRunConfiguration) {
Module[] modules = moduleRunConfiguration.getModules();
for (Module module : modules) {
DotNetModuleLangExtension extension = module.getExtension(DotNetModuleLangExtension.class);
if (extension != null) {
return extension.getFileType();
}
}
}
return PlainTextFileType.INSTANCE;
}

public DotNetEditorsProvider(@Nullable XDebugSession session)
{
mySession = session;
}
@Override
@RequiredReadAction
protected PsiFile createExpressionCodeFragment(@Nonnull Project project, @Nonnull String text, @Nullable PsiElement context, boolean isPhysical) {
if (context == null) {
XDebugSession session = mySession;
XSourcePosition currentPosition = session == null ? null : session.getCurrentPosition();
if (currentPosition != null) {
VirtualFile file = currentPosition.getFile();
PsiFile psiFile = PsiManager.getInstance(project).findFile(file);
if (psiFile != null) {
context = psiFile.findElementAt(currentPosition.getOffset());
}
}
}

@Override
@RequiredReadAction
protected PsiFile createExpressionCodeFragment(@Nonnull Project project, @Nonnull String text, @Nullable PsiElement context, boolean isPhysical)
{
if(context == null)
{
XDebugSession session = mySession;
XSourcePosition currentPosition = session == null ? null : session.getCurrentPosition();
if(currentPosition != null)
{
VirtualFile file = currentPosition.getFile();
PsiFile psiFile = PsiManager.getInstance(project).findFile(file);
if(psiFile != null)
{
context = psiFile.findElementAt(currentPosition.getOffset());
}
}
}
DotNetDebuggerProvider debuggerProvider = context == null ? null : DotNetDebuggerProviders.findByPsiFile(context.getContainingFile());
if (debuggerProvider == null) {
debuggerProvider = DotNetDebuggerProvider.getProvider(myLanguageFileType.getLanguage());
}

DotNetDebuggerProvider debuggerProvider = context == null ? null : DotNetDebuggerProviders.findByPsiFile(context.getContainingFile());
if(debuggerProvider == null)
{
return PsiFileFactory.getInstance(project).createFileFromText("test.txt", PlainTextFileType.INSTANCE, text);
}
if (debuggerProvider == null) {
return PsiFileFactory.getInstance(project).createFileFromText("test." + myLanguageFileType.getDefaultExtension(), myLanguageFileType, text);
}

return debuggerProvider.createExpressionCodeFragment(project, context, text, isPhysical);
}
return debuggerProvider.createExpressionCodeFragment(project, context, text, isPhysical);
}

@Override
@Nonnull
@RequiredReadAction
public Collection<Language> getSupportedLanguages(@Nonnull Project project, @Nullable XSourcePosition sourcePosition)
{
if(sourcePosition == null)
{
return Collections.<Language>singletonList(PlainTextLanguage.INSTANCE);
}
@Override
@Nonnull
@RequiredReadAction
public Collection<Language> getSupportedLanguages(@Nonnull Project project, @Nullable XSourcePosition sourcePosition) {
if (sourcePosition == null) {
return List.of(myLanguageFileType.getLanguage());
}

DotNetDebuggerProvider dotNetDebuggerProvider = DotNetDebuggerProviders.findByVirtualFile(project, sourcePosition.getFile());
if(dotNetDebuggerProvider == null)
{
return Collections.<Language>singletonList(PlainTextLanguage.INSTANCE);
}
return Collections.singletonList(dotNetDebuggerProvider.getEditorLanguage());
}
DotNetDebuggerProvider provider = DotNetDebuggerProviders.findByVirtualFile(project, sourcePosition.getFile());
if (provider == null) {
return List.of(myLanguageFileType.getLanguage());
}
return List.of(provider.getEditorLanguage());
}

@Nonnull
@Override
public FileType getFileType()
{
return PlainTextFileType.INSTANCE;
}
@Nonnull
@Override
public FileType getFileType() {
return myLanguageFileType;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import consulo.dotnet.debugger.DotNetDebuggerUtil;
import consulo.dotnet.debugger.impl.DotNetEditorsProvider;
import consulo.dotnet.debugger.impl.breakpoint.properties.DotNetLineBreakpointProperties;
import consulo.dotnet.module.extension.DotNetModuleLangExtension;
import consulo.dotnet.psi.DotNetQualifiedElement;
import consulo.dotnet.util.ArrayUtil2;
import consulo.execution.debug.XSourcePosition;
Expand All @@ -34,6 +35,7 @@
import consulo.execution.debug.icon.ExecutionDebugIconGroup;
import consulo.language.psi.*;
import consulo.language.psi.util.PsiTreeUtil;
import consulo.language.util.ModuleUtilCore;
import consulo.project.Project;
import consulo.ui.annotation.RequiredUIAccess;
import consulo.ui.image.Image;
Expand Down Expand Up @@ -98,7 +100,16 @@ public TextRange getHighlightRange(XLineBreakpoint<DotNetLineBreakpointPropertie
@Nullable
@Override
public XDebuggerEditorsProvider getEditorsProvider(@Nonnull XLineBreakpoint<DotNetLineBreakpointProperties> breakpoint, @Nonnull Project project) {
return new DotNetEditorsProvider(null);
VirtualFile file = breakpoint.getFile();
if (file == null) {
return new DotNetEditorsProvider(null, null);
}

DotNetModuleLangExtension extension = ModuleUtilCore.getExtension(project, file, DotNetModuleLangExtension.class);
if (extension != null) {
return new DotNetEditorsProvider(extension.getFileType());
}
return new DotNetEditorsProvider(null, null);
}

@Nonnull
Expand Down

0 comments on commit f7f6a39

Please # to comment.