Skip to content

Commit

Permalink
fix: realtime kotlin diagnostics not displayed in the editor
Browse files Browse the repository at this point in the history
  • Loading branch information
tyron12233 committed Feb 6, 2022
1 parent 46c9075 commit b869150
Show file tree
Hide file tree
Showing 5 changed files with 48 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -330,9 +330,12 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat

LogViewModel logViewModel =
new ViewModelProvider(requireActivity()).get(LogViewModel.class);
mEditor.setDiagnosticsListener(diagnostics ->
ProgressManager.getInstance().runLater(() ->
logViewModel.updateLogs(LogViewModel.DEBUG, diagnostics)));
mEditor.setDiagnosticsListener(diagnostics -> {
for (DiagnosticWrapper diagnostic : diagnostics) {
DiagnosticUtil.setLineAndColumn(diagnostic, mEditor);
}
ProgressManager.getInstance().runLater(() -> logViewModel.updateLogs(LogViewModel.DEBUG, diagnostics));
});

getChildFragmentManager().setFragmentResultListener(LayoutEditorFragment.KEY_SAVE,
getViewLifecycleOwner(), ((requestKey, result) -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,14 +35,14 @@ public abstract class AbstractCodeAnalyzer<T> extends DiagnosticAnalyzeManager<T
private StyleReceiver mReceiver;
private Token mPreviousToken;
private Styles mLastStyles;
protected final List<DiagnosticWrapper> mDiagnostics = new ArrayList<>();
protected List<DiagnosticWrapper> mDiagnostics = new ArrayList<>();

public AbstractCodeAnalyzer() {
setup();
}

@Override
public void setReceiver(@NonNull StyleReceiver receiver) {
public void setReceiver(@Nullable StyleReceiver receiver) {
super.setReceiver(receiver);

mReceiver = receiver;
Expand Down Expand Up @@ -99,8 +99,7 @@ public void reset(@NonNull ContentReference content, @NonNull Bundle extraArgume

@Override
public void setDiagnostics(Editor editor, List<DiagnosticWrapper> diagnostics) {
mDiagnostics.clear();
mDiagnostics.addAll(diagnostics);
mDiagnostics = diagnostics;
}

public void setup() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import com.tyron.builder.project.api.Module;
import com.tyron.code.ApplicationLoader;
import com.tyron.code.ui.editor.language.AbstractCodeAnalyzer;
import com.tyron.code.ui.editor.language.HighlightUtil;
import com.tyron.code.ui.project.ProjectManager;
import com.tyron.common.SharedPreferenceKeys;
import com.tyron.completion.progress.ProgressManager;
Expand All @@ -18,6 +19,8 @@

import java.lang.ref.WeakReference;

import io.github.rosemoe.sora.lang.styling.MappedSpans;
import io.github.rosemoe.sora.lang.styling.Styles;
import io.github.rosemoe.sora.widget.schemes.EditorColorScheme;

public class KotlinAnalyzer extends AbstractCodeAnalyzer<Object> {
Expand Down Expand Up @@ -94,6 +97,16 @@ public void analyzeInBackground(CharSequence content) {
}
}

@Override
protected void afterAnalyze(CharSequence content, Styles styles, MappedSpans.Builder colors) {
super.afterAnalyze(content, styles, colors);

Editor editor = mEditorReference.get();
if (editor != null) {
HighlightUtil.markDiagnostics(editor, mDiagnostics, styles);
}
}

private static class UnknownToken implements Token {

public static UnknownToken INSTANCE = new UnknownToken();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
import com.tyron.builder.model.DiagnosticWrapper;
import com.tyron.completion.java.compiler.CompileTask;
import com.tyron.completion.java.action.FindMethodDeclarationAt;
import com.tyron.editor.CharPosition;
import com.tyron.editor.Editor;

import org.openjdk.javax.lang.model.element.ExecutableElement;
import org.openjdk.javax.lang.model.element.TypeElement;
Expand All @@ -30,6 +32,25 @@ public class DiagnosticUtil {
private static final Pattern UNREPORTED_EXCEPTION =
Pattern.compile("unreported exception (" + "(\\w+\\.)*\\w+)");

public static void setLineAndColumn(DiagnosticWrapper diagnostic, Editor editor) {
try {
if (diagnostic.getStartLine() <= -1 && diagnostic.getStartPosition() > 0) {
CharPosition start = editor.getCharPosition(((int) diagnostic.getStartPosition()));
diagnostic.setStartLine(start.getLine() + 1);
diagnostic.setStartColumn(start.getColumn());
diagnostic.setLineNumber(start.getLine() + 1);
diagnostic.setColumnNumber(start.getColumn());
}
if (diagnostic.getEndLine() <= -1 && diagnostic.getEndPosition() > 0) {
CharPosition end = editor.getCharPosition(((int) diagnostic.getEndPosition()));
diagnostic.setEndLine(end.getLine() + 1);
diagnostic.setEndColumn(end.getColumn());
}
} catch (IndexOutOfBoundsException ignored) {
// unknown index, dont display line number
}
}

public static class MethodPtr {
public String className, methodName;
public String[] erasedParameterTypes;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,11 @@ fun convertDiagnostic(diagnostic: KotlinDiagnostic): List<DiagnosticWrapper> {
wrapper.kind = severity(diagnostic.severity)
wrapper.source = File(diagnostic.psiFile.viewProvider.virtualFile
.path)
wrapper.position = -1L
wrapper.startLine = -1
wrapper.startColumn = -1
wrapper.endLine = -1
wrapper.endColumn = -1
wrapper.position = it.startOffset.toLong()
wrapper.startPosition = it.startOffset.toLong()
wrapper.endPosition = it.endOffset.toLong()
wrapper
Expand Down

0 comments on commit b869150

Please sign in to comment.