diff --git a/lsif-semanticdb/src/main/java/com/sourcegraph/lsif_semanticdb/SignatureFormatter.java b/lsif-semanticdb/src/main/java/com/sourcegraph/lsif_semanticdb/SignatureFormatter.java index 99522300f..085394e18 100644 --- a/lsif-semanticdb/src/main/java/com/sourcegraph/lsif_semanticdb/SignatureFormatter.java +++ b/lsif-semanticdb/src/main/java/com/sourcegraph/lsif_semanticdb/SignatureFormatter.java @@ -178,6 +178,14 @@ private void formatMethodSignature(MethodSignature methodSignature) { + " " + symInfo.getDisplayName()) .collect(Collectors.joining(", ", "(", ")"))); + + if (!methodSignature.getThrowsList().isEmpty()) { + printKeyword(" throws"); + s.append( + methodSignature.getThrowsList().stream() + .map(this::formatType) + .collect(Collectors.joining(", "))); + } } private void formatValueSignature(ValueSignature valueSignature) { diff --git a/semanticdb-java/src/main/protobuf/semanticdb.proto b/semanticdb-java/src/main/protobuf/semanticdb.proto index 259ecd1a7..dd277fdda 100644 --- a/semanticdb-java/src/main/protobuf/semanticdb.proto +++ b/semanticdb-java/src/main/protobuf/semanticdb.proto @@ -60,6 +60,7 @@ message MethodSignature { Scope type_parameters = 1; repeated Scope parameter_lists = 2; Type return_type = 3; + repeated Type throws = 4; } message TypeSignature { diff --git a/semanticdb-javac/src/main/java/com/sourcegraph/semanticdb_javac/SemanticdbSignatures.java b/semanticdb-javac/src/main/java/com/sourcegraph/semanticdb_javac/SemanticdbSignatures.java index 934c1e4af..90ec73626 100644 --- a/semanticdb-javac/src/main/java/com/sourcegraph/semanticdb_javac/SemanticdbSignatures.java +++ b/semanticdb-javac/src/main/java/com/sourcegraph/semanticdb_javac/SemanticdbSignatures.java @@ -7,6 +7,7 @@ import javax.lang.model.element.Element; import javax.lang.model.type.*; import java.util.List; +import java.util.stream.Collectors; import static com.sourcegraph.semanticdb_javac.SemanticdbTypeVisitor.UNRESOLVED_TYPE_REF; @@ -73,6 +74,10 @@ private Signature generateMethodSignature(Symbol.MethodSymbol sym) { builder.setReturnType(returnType); } + List thrownTypes = + sym.getThrownTypes().stream().map(this::generateType).collect(Collectors.toList()); + builder.addAllThrows(thrownTypes); + return Signature.newBuilder().setMethodSignature(builder).build(); } diff --git a/tests/minimized/src/main/java/minimized/Methods.java b/tests/minimized/src/main/java/minimized/Methods.java index e579a1deb..56a35fde1 100644 --- a/tests/minimized/src/main/java/minimized/Methods.java +++ b/tests/minimized/src/main/java/minimized/Methods.java @@ -17,7 +17,7 @@ private static String staticOverload(String value) { return value + "1"; } - public static String app(int n, String m) { + public static String app(int n, String m) throws RuntimeException, IndexOutOfBoundsException { Methods methods = new Methods(); int a = staticOverload(n); String b = staticOverload(m); diff --git a/tests/snapshots/src/main/generated/minimized/Methods.java b/tests/snapshots/src/main/generated/minimized/Methods.java index c3f7aa037..82724de44 100644 --- a/tests/snapshots/src/main/generated/minimized/Methods.java +++ b/tests/snapshots/src/main/generated/minimized/Methods.java @@ -35,12 +35,14 @@ private static String staticOverload(String value) { // ^^^^^ reference local3 } - public static String app(int n, String m) { + public static String app(int n, String m) throws RuntimeException, IndexOutOfBoundsException { // ^^^^^^ reference java/lang/String# -// ^^^ definition minimized/Methods#app(). public static String app(int n, String m) +// ^^^ definition minimized/Methods#app(). public static String app(int n, String m) throws RuntimeException, IndexOutOfBoundsException // ^ definition local4 int n // ^^^^^^ reference java/lang/String# // ^ definition local5 String m +// ^^^^^^^^^^^^^^^^ reference java/lang/RuntimeException# +// ^^^^^^^^^^^^^^^^^^^^^^^^^ reference java/lang/IndexOutOfBoundsException# Methods methods = new Methods(); // ^^^^^^^ reference minimized/Methods# // ^^^^^^^ definition local6 Methods methods