fix(gui): scroll to first error on jadx script check/run
This commit is contained in:
@@ -175,7 +175,6 @@ public class ScriptContentPanel extends AbstractCodeContentPanel {
|
||||
errorService.clearErrors();
|
||||
errorService.addCompilerIssues(issues);
|
||||
errorService.addLintErrors(lintErrs);
|
||||
errorService.apply();
|
||||
if (!success) {
|
||||
resultLabel.setText("Compile issues: " + issues.size());
|
||||
showScriptLog();
|
||||
@@ -184,6 +183,7 @@ public class ScriptContentPanel extends AbstractCodeContentPanel {
|
||||
} else {
|
||||
resultLabel.setText("OK");
|
||||
}
|
||||
errorService.apply();
|
||||
return success;
|
||||
} catch (Throwable e) {
|
||||
scriptLog.error("Failed to check code", e);
|
||||
|
||||
@@ -15,8 +15,8 @@ import kotlin.script.experimental.api.ScriptDiagnostic;
|
||||
import kotlin.script.experimental.api.SourceCode;
|
||||
|
||||
public class ScriptErrorService extends AbstractParser {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(ScriptErrorService.class);
|
||||
|
||||
private final DefaultParseResult result;
|
||||
private final ScriptCodeArea scriptArea;
|
||||
|
||||
@@ -39,6 +39,7 @@ public class ScriptErrorService extends AbstractParser {
|
||||
scriptArea.removeParser(this);
|
||||
scriptArea.addParser(this);
|
||||
scriptArea.addNotify();
|
||||
scriptArea.requestFocus();
|
||||
jumpCaretToFirstError();
|
||||
}
|
||||
|
||||
@@ -49,15 +50,15 @@ public class ScriptErrorService extends AbstractParser {
|
||||
}
|
||||
ParserNotice notice = parserNotices.get(0);
|
||||
int offset = notice.getOffset();
|
||||
if (offset != -1) {
|
||||
scriptArea.setCaretPosition(offset);
|
||||
} else {
|
||||
if (offset == -1) {
|
||||
try {
|
||||
scriptArea.setCaretPosition(scriptArea.getLineStartOffset(notice.getLine()));
|
||||
offset = scriptArea.getLineStartOffset(notice.getLine());
|
||||
} catch (Exception e) {
|
||||
LOG.error("Failed to jump to first error", e);
|
||||
return;
|
||||
}
|
||||
}
|
||||
scriptArea.scrollToPos(offset);
|
||||
}
|
||||
|
||||
public void addCompilerIssues(List<ScriptDiagnostic> issues) {
|
||||
|
||||
@@ -49,31 +49,19 @@ class ScriptServices {
|
||||
}
|
||||
|
||||
fun analyze(scriptName: String, code: String): ScriptAnalyzeResult {
|
||||
// TODO: temp solution: analyze do not work with dependencies, use compile instead
|
||||
val sourceCode = code.toScriptSource(scriptName)
|
||||
if (code.contains("@file:DependsOn(")) {
|
||||
val result = runBlocking {
|
||||
ScriptEval().compile(sourceCode)
|
||||
}
|
||||
return ScriptAnalyzeResult(
|
||||
success = !result.isError(),
|
||||
issues = result.reports,
|
||||
renderType = null,
|
||||
)
|
||||
} else {
|
||||
val result = runBlocking {
|
||||
val cursor = SourceCode.Position(0, 0) // not used
|
||||
replCompiler.analyze(sourceCode, cursor, compileConf)
|
||||
}
|
||||
val analyzerResult = result.valueOrNull()
|
||||
val issues = mutableListOf<ScriptDiagnostic>()
|
||||
analyzerResult?.get(ReplAnalyzerResult.analysisDiagnostics)?.let(issues::addAll)
|
||||
issues.addAll(result.reports)
|
||||
return ScriptAnalyzeResult(
|
||||
success = !result.isError(),
|
||||
issues = issues,
|
||||
renderType = analyzerResult?.get(ReplAnalyzerResult.renderedResultType),
|
||||
)
|
||||
val result = runBlocking {
|
||||
val cursor = SourceCode.Position(0, 0) // not used
|
||||
replCompiler.analyze(sourceCode, cursor, compileConf)
|
||||
}
|
||||
val analyzerResult = result.valueOrNull()
|
||||
val issues = mutableListOf<ScriptDiagnostic>()
|
||||
analyzerResult?.get(ReplAnalyzerResult.analysisDiagnostics)?.let(issues::addAll)
|
||||
issues.addAll(result.reports)
|
||||
return ScriptAnalyzeResult(
|
||||
success = !result.isError(),
|
||||
issues = issues,
|
||||
renderType = analyzerResult?.get(ReplAnalyzerResult.renderedResultType),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user