fix(java_indexer): emit and test type parameter MarkedSources (#3832)
diff --git a/kythe/java/com/google/devtools/kythe/analyzers/java/KytheTreeScanner.java b/kythe/java/com/google/devtools/kythe/analyzers/java/KytheTreeScanner.java
index ad0cf67..4d77645 100644
--- a/kythe/java/com/google/devtools/kythe/analyzers/java/KytheTreeScanner.java
+++ b/kythe/java/com/google/devtools/kythe/analyzers/java/KytheTreeScanner.java
@@ -964,7 +964,16 @@
List<VName> typeParams = new ArrayList<>();
for (JCTypeParameter tParam : params) {
TreeContext ctx = ownerContext.down(tParam);
- VName node = getNode(tParam.type.asElement());
+ Symbol sym = tParam.type.asElement();
+ VName node =
+ signatureGenerator
+ .getSignature(sym)
+ .map(sig -> entrySets.getNode(signatureGenerator, sym, sig, null, null))
+ .orElse(null);
+ if (node == null) {
+ logger.atWarning().log("Could not get type parameter VName: %s", tParam);
+ continue;
+ }
emitDefinesBindingAnchorEdge(ctx, tParam.name, tParam.getStartPosition(), node);
visitAnnotations(node, tParam.getAnnotations(), ctx);
typeParams.add(node);
diff --git a/kythe/javatests/com/google/devtools/kythe/analyzers/java/testdata/pkg/MarkedSource.java b/kythe/javatests/com/google/devtools/kythe/analyzers/java/testdata/pkg/MarkedSource.java
index d3c4a9a..a3da0a2 100644
--- a/kythe/javatests/com/google/devtools/kythe/analyzers/java/testdata/pkg/MarkedSource.java
+++ b/kythe/javatests/com/google/devtools/kythe/analyzers/java/testdata/pkg/MarkedSource.java
@@ -396,6 +396,17 @@
return arry.clone();
}
+ //- @T defines/binding TVar
+ //- TVar.node/kind absvar
+ //- TVar code TVarCode
+ //- TVarCode.kind "BOX"
+ //- TVarCode child.0 TVarContext
+ //- TVarContext.kind "CONTEXT"
+ //- TVarCode child.1 TVarIdent
+ //- TVarIdent.kind "IDENTIFIER"
+ //- TVarIdent.pre_text "<T>"
+ static class Generic<T> {}
+
//- Void code VoidId
//- VoidId.kind "IDENTIFIER"
//- VoidId.pre_text void