From 3becc083e963a442bbaf1a7fc818c92bff1fa3a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93lafur=20P=C3=A1ll=20Geirsson?= Date: Tue, 15 Jun 2021 14:52:35 +0200 Subject: [PATCH 1/2] Return empty `SymbolDescriptor` for empty symbol --- .../com/sourcegraph/lsif_semanticdb/SymbolDescriptor.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lsif-semanticdb/src/main/java/com/sourcegraph/lsif_semanticdb/SymbolDescriptor.java b/lsif-semanticdb/src/main/java/com/sourcegraph/lsif_semanticdb/SymbolDescriptor.java index c2cb0af5..8368b9b3 100644 --- a/lsif-semanticdb/src/main/java/com/sourcegraph/lsif_semanticdb/SymbolDescriptor.java +++ b/lsif-semanticdb/src/main/java/com/sourcegraph/lsif_semanticdb/SymbolDescriptor.java @@ -4,7 +4,6 @@ import com.sourcegraph.semanticdb_javac.SemanticdbSymbols.Descriptor; import com.sourcegraph.semanticdb_javac.SemanticdbSymbols.Descriptor.Kind; import java.util.Optional; -import javax.swing.text.html.Option; public class SymbolDescriptor { @@ -16,6 +15,8 @@ public SymbolDescriptor(SemanticdbSymbols.Descriptor descriptor, String owner) { this.owner = owner; } + public static SymbolDescriptor NONE = new SymbolDescriptor(Descriptor.NONE, SemanticdbSymbols.NONE); + public static SymbolDescriptor parseFromSymbol(String symbol) { return new Parser(symbol).entryPoint(); } @@ -56,6 +57,8 @@ public Parser(String symbol) { public SymbolDescriptor entryPoint() { if (SemanticdbSymbols.isLocal(symbol)) return new SymbolDescriptor(Descriptor.local(symbol), SemanticdbSymbols.NONE); + if (SemanticdbSymbols.NONE.equals(symbol)) + return SymbolDescriptor.NONE; readChar(); SemanticdbSymbols.Descriptor descriptor = parseDescriptor(); From 6c4834966066006763e43f520805ac8a080d92aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93lafur=20P=C3=A1ll=20Geirsson?= Date: Tue, 15 Jun 2021 15:06:49 +0200 Subject: [PATCH 2/2] Log SemanticDB path on unexpected error This should make it easier to troubleshoot issues --- .../ConsoleLsifSemanticdbReporter.scala | 3 +-- .../lsif_semanticdb/LsifProcessingException.java | 13 +++++++++++++ .../lsif_semanticdb/LsifSemanticdb.java | 14 ++++++++++++-- .../lsif_semanticdb/SymbolDescriptor.java | 9 ++++++--- 4 files changed, 32 insertions(+), 7 deletions(-) create mode 100644 lsif-semanticdb/src/main/java/com/sourcegraph/lsif_semanticdb/LsifProcessingException.java diff --git a/lsif-java/src/main/scala/com/sourcegraph/lsif_semanticdb/ConsoleLsifSemanticdbReporter.scala b/lsif-java/src/main/scala/com/sourcegraph/lsif_semanticdb/ConsoleLsifSemanticdbReporter.scala index 92156b48..d65e0586 100644 --- a/lsif-java/src/main/scala/com/sourcegraph/lsif_semanticdb/ConsoleLsifSemanticdbReporter.scala +++ b/lsif-java/src/main/scala/com/sourcegraph/lsif_semanticdb/ConsoleLsifSemanticdbReporter.scala @@ -5,7 +5,6 @@ import java.nio.file.NoSuchFileException import moped.cli.Application import moped.progressbars.InteractiveProgressBar -import moped.reporters.Diagnostic /** * Console reporter for index-semanticdb command. @@ -25,7 +24,7 @@ class ConsoleLsifSemanticdbReporter(app: Application) case _: NoSuchFileException => app.reporter.error(s"no such file: ${e.getMessage}") case _ => - app.reporter.log(Diagnostic.exception(e)) + e.printStackTrace(app.err) } } diff --git a/lsif-semanticdb/src/main/java/com/sourcegraph/lsif_semanticdb/LsifProcessingException.java b/lsif-semanticdb/src/main/java/com/sourcegraph/lsif_semanticdb/LsifProcessingException.java new file mode 100644 index 00000000..3477146d --- /dev/null +++ b/lsif-semanticdb/src/main/java/com/sourcegraph/lsif_semanticdb/LsifProcessingException.java @@ -0,0 +1,13 @@ +package com.sourcegraph.lsif_semanticdb; + +public class LsifProcessingException extends Throwable { + + public LsifProcessingException(LsifTextDocument doc, Throwable cause) { + super(doc.semanticdbPath.toString(), cause); + } + + @Override + public Throwable fillInStackTrace() { + return this; + } +} diff --git a/lsif-semanticdb/src/main/java/com/sourcegraph/lsif_semanticdb/LsifSemanticdb.java b/lsif-semanticdb/src/main/java/com/sourcegraph/lsif_semanticdb/LsifSemanticdb.java index 514b2ea7..342e5def 100644 --- a/lsif-semanticdb/src/main/java/com/sourcegraph/lsif_semanticdb/LsifSemanticdb.java +++ b/lsif-semanticdb/src/main/java/com/sourcegraph/lsif_semanticdb/LsifSemanticdb.java @@ -80,10 +80,20 @@ private Set exportSymbols(List files) { private Stream processPath( Path path, Set isExportedSymbol, PackageTable packages) { - return parseTextDocument(path).map(d -> processDocument(d, isExportedSymbol, packages)); + return parseTextDocument(path).flatMap(d -> processDocument(d, isExportedSymbol, packages)); } - private Integer processDocument( + private Stream processDocument( + LsifTextDocument doc, Set isExportedSymbol, PackageTable packages) { + try { + return Stream.of(processDocumentUnsafe(doc, isExportedSymbol, packages)); + } catch (Exception e) { + options.reporter.error(new LsifProcessingException(doc, e)); + return Stream.empty(); + } + } + + private Integer processDocumentUnsafe( LsifTextDocument doc, Set isExportedSymbol, PackageTable packages) { Symtab symtab = new Symtab(doc.semanticdb); diff --git a/lsif-semanticdb/src/main/java/com/sourcegraph/lsif_semanticdb/SymbolDescriptor.java b/lsif-semanticdb/src/main/java/com/sourcegraph/lsif_semanticdb/SymbolDescriptor.java index 8368b9b3..a9da8f1c 100644 --- a/lsif-semanticdb/src/main/java/com/sourcegraph/lsif_semanticdb/SymbolDescriptor.java +++ b/lsif-semanticdb/src/main/java/com/sourcegraph/lsif_semanticdb/SymbolDescriptor.java @@ -15,7 +15,8 @@ public SymbolDescriptor(SemanticdbSymbols.Descriptor descriptor, String owner) { this.owner = owner; } - public static SymbolDescriptor NONE = new SymbolDescriptor(Descriptor.NONE, SemanticdbSymbols.NONE); + public static SymbolDescriptor NONE = + new SymbolDescriptor(Descriptor.NONE, SemanticdbSymbols.NONE); public static SymbolDescriptor parseFromSymbol(String symbol) { return new Parser(symbol).entryPoint(); @@ -55,10 +56,12 @@ public Parser(String symbol) { } public SymbolDescriptor entryPoint() { - if (SemanticdbSymbols.isLocal(symbol)) + if (SemanticdbSymbols.isLocal(symbol)) { return new SymbolDescriptor(Descriptor.local(symbol), SemanticdbSymbols.NONE); - if (SemanticdbSymbols.NONE.equals(symbol)) + } + if (SemanticdbSymbols.NONE.equals(symbol)) { return SymbolDescriptor.NONE; + } readChar(); SemanticdbSymbols.Descriptor descriptor = parseDescriptor();