Skip to content

Commit ff5891a

Browse files
Arthurm1Arthur McGibbon
and
Arthur McGibbon
authored
Cope with missing annotation parameter (#691)
Co-authored-by: Arthur McGibbon <[email protected]>
1 parent 545506a commit ff5891a

File tree

3 files changed

+180
-3
lines changed

3 files changed

+180
-3
lines changed

semanticdb-javac/src/main/java/com/sourcegraph/semanticdb_javac/SemanticdbTrees.java

+5-3
Original file line numberDiff line numberDiff line change
@@ -84,9 +84,11 @@ public Semanticdb.AnnotationTree annotationBuilder(AnnotationTree annotation) {
8484
AssignmentTree assign = (AssignmentTree) param;
8585
ExpressionTree assignValue = assign.getExpression();
8686
TreePath variableTreePath = nodes.get(assign.getVariable());
87-
Element variableSym = trees.getElement(variableTreePath);
88-
String symbol = globals.semanticdbSymbol(variableSym, locals);
89-
params.add(tree(assignTree(tree(idTree(symbol)), annotationParameter(assignValue))));
87+
if (variableTreePath != null) {
88+
Element variableSym = trees.getElement(variableTreePath);
89+
String symbol = globals.semanticdbSymbol(variableSym, locals);
90+
params.add(tree(assignTree(tree(idTree(symbol)), annotationParameter(assignValue))));
91+
}
9092
} else {
9193
params.add(annotationParameter(param));
9294
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package minimized;
2+
3+
import java.lang.reflect.Constructor;
4+
import java.lang.reflect.InvocationHandler;
5+
import java.util.concurrent.ConcurrentHashMap;
6+
import java.util.concurrent.ConcurrentMap;
7+
import java.util.function.Function;
8+
9+
public interface AnnotationsOnParameterizedTypes {
10+
11+
public static AnnotationsOnParameterizedTypes getInstance() {
12+
return new AnnotationsOnParameterizedTypesImpl();
13+
}
14+
15+
<C, W> Function<W, C> adapter(Class<C> contract, Class<W> wrappedClass);
16+
}
17+
18+
19+
class AnnotationsOnParameterizedTypesImpl implements AnnotationsOnParameterizedTypes {
20+
private ConcurrentMap<Class<?>, Constructor<?>> proxyConstructors = new ConcurrentHashMap<>();
21+
22+
@Override
23+
public <C, W> Function<W, C> adapter(Class<C> contract, Class<W> wrappedClass) {
24+
25+
Function<InvocationHandler, C> constructor = getConstructor(contract);
26+
27+
System.out.println(constructor);
28+
29+
return null;
30+
}
31+
32+
private <T> Function<InvocationHandler, T> getConstructor(Class<T> contract) {
33+
@SuppressWarnings("unchecked")
34+
Constructor<T> constructor = (Constructor<T>) proxyConstructors.computeIfAbsent(contract, c -> {
35+
return null;
36+
});
37+
38+
System.out.println(constructor);
39+
40+
return null;
41+
}
42+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
package minimized;
2+
3+
import java.lang.reflect.Constructor;
4+
// ^^^^ reference semanticdb maven . . java/
5+
// ^^^^ reference semanticdb maven . . java/lang/
6+
// ^^^^^^^ reference semanticdb maven . . java/lang/reflect/
7+
// ^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/reflect/Constructor#
8+
import java.lang.reflect.InvocationHandler;
9+
// ^^^^ reference semanticdb maven . . java/
10+
// ^^^^ reference semanticdb maven . . java/lang/
11+
// ^^^^^^^ reference semanticdb maven . . java/lang/reflect/
12+
// ^^^^^^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/reflect/InvocationHandler#
13+
import java.util.concurrent.ConcurrentHashMap;
14+
// ^^^^ reference semanticdb maven . . java/
15+
// ^^^^ reference semanticdb maven . . java/util/
16+
// ^^^^^^^^^^ reference semanticdb maven . . java/util/concurrent/
17+
// ^^^^^^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/util/concurrent/ConcurrentHashMap#
18+
import java.util.concurrent.ConcurrentMap;
19+
// ^^^^ reference semanticdb maven . . java/
20+
// ^^^^ reference semanticdb maven . . java/util/
21+
// ^^^^^^^^^^ reference semanticdb maven . . java/util/concurrent/
22+
// ^^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/util/concurrent/ConcurrentMap#
23+
import java.util.function.Function;
24+
// ^^^^ reference semanticdb maven . . java/
25+
// ^^^^ reference semanticdb maven . . java/util/
26+
// ^^^^^^^^ reference semanticdb maven . . java/util/function/
27+
// ^^^^^^^^ reference semanticdb maven jdk 11 java/util/function/Function#
28+
29+
public interface AnnotationsOnParameterizedTypes {
30+
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/AnnotationsOnParameterizedTypes#
31+
// documentation ```java\npublic interface AnnotationsOnParameterizedTypes\n```
32+
33+
public static AnnotationsOnParameterizedTypes getInstance() {
34+
return new AnnotationsOnParameterizedTypesImpl();
35+
}
36+
37+
<C, W> Function<W, C> adapter(Class<C> contract, Class<W> wrappedClass);
38+
}
39+
40+
41+
class AnnotationsOnParameterizedTypesImpl implements AnnotationsOnParameterizedTypes {
42+
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#
43+
// documentation ```java\nclass AnnotationsOnParameterizedTypesImpl\n```
44+
// relationship is_implementation semanticdb maven . . minimized/AnnotationsOnParameterizedTypes#
45+
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#`<init>`().
46+
// documentation ```java\nAnnotationsOnParameterizedTypesImpl()\n```
47+
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference semanticdb maven . . minimized/AnnotationsOnParameterizedTypes#
48+
private ConcurrentMap<Class<?>, Constructor<?>> proxyConstructors = new ConcurrentHashMap<>();
49+
// ^^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/util/concurrent/ConcurrentMap#
50+
// ^^^^^ reference semanticdb maven jdk 11 java/lang/Class#
51+
// ^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/reflect/Constructor#
52+
// ^^^^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#proxyConstructors.
53+
// documentation ```java\nprivate ConcurrentMap<Class<?>, Constructor<?>> proxyConstructors\n```
54+
// ^^^^^^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/util/concurrent/ConcurrentHashMap#`<init>`().
55+
56+
@Override
57+
// ^^^^^^^^ reference semanticdb maven jdk 11 java/lang/Override#
58+
public <C, W> Function<W, C> adapter(Class<C> contract, Class<W> wrappedClass) {
59+
// ^ definition semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#adapter().[C]
60+
// documentation ```java\nC\n```
61+
// ^ definition semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#adapter().[W]
62+
// documentation ```java\nW\n```
63+
// ^^^^^^^^ reference semanticdb maven jdk 11 java/util/function/Function#
64+
// ^ reference semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#adapter().[W]
65+
// ^ reference semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#adapter().[C]
66+
// ^^^^^^^ definition semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#adapter().
67+
// documentation ```java\n@Override\npublic <C, W> Function<W, C> adapter(Class<C> contract, Class<W> wrappedClass)\n```
68+
// relationship is_reference is_implementation semanticdb maven . . minimized/AnnotationsOnParameterizedTypes#adapter().
69+
// ^^^^^ reference semanticdb maven jdk 11 java/lang/Class#
70+
// ^ reference semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#adapter().[C]
71+
// ^^^^^^^^ definition local 0
72+
// documentation ```java\nClass<C> contract\n```
73+
// ^^^^^ reference semanticdb maven jdk 11 java/lang/Class#
74+
// ^ reference semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#adapter().[W]
75+
// ^^^^^^^^^^^^ definition local 1
76+
// documentation ```java\nClass<W> wrappedClass\n```
77+
78+
Function<InvocationHandler, C> constructor = getConstructor(contract);
79+
// ^^^^^^^^ reference semanticdb maven jdk 11 java/util/function/Function#
80+
// ^^^^^^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/reflect/InvocationHandler#
81+
// ^ reference semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#adapter().[C]
82+
// ^^^^^^^^^^^ definition local 2
83+
// documentation ```java\nFunction<InvocationHandler, C> constructor\n```
84+
// ^^^^^^^^^^^^^^ reference semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#getConstructor().
85+
// ^^^^^^^^ reference local 0
86+
87+
System.out.println(constructor);
88+
// ^^^^^^ reference semanticdb maven jdk 11 java/lang/System#
89+
// ^^^ reference semanticdb maven jdk 11 java/lang/System#out.
90+
// ^^^^^^^ reference semanticdb maven jdk 11 java/io/PrintStream#println(+9).
91+
// ^^^^^^^^^^^ reference local 2
92+
93+
return null;
94+
}
95+
96+
private <T> Function<InvocationHandler, T> getConstructor(Class<T> contract) {
97+
// ^ definition semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#getConstructor().[T]
98+
// documentation ```java\nT\n```
99+
// ^^^^^^^^ reference semanticdb maven jdk 11 java/util/function/Function#
100+
// ^^^^^^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/reflect/InvocationHandler#
101+
// ^ reference semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#getConstructor().[T]
102+
// ^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#getConstructor().
103+
// documentation ```java\nprivate <T> Function<InvocationHandler, T> getConstructor(Class<T> contract)\n```
104+
// ^^^^^ reference semanticdb maven jdk 11 java/lang/Class#
105+
// ^ reference semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#getConstructor().[T]
106+
// ^^^^^^^^ definition local 3
107+
// documentation ```java\nClass<T> contract\n```
108+
@SuppressWarnings("unchecked")
109+
// ^^^^^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/SuppressWarnings#
110+
Constructor<T> constructor = (Constructor<T>) proxyConstructors.computeIfAbsent(contract, c -> {
111+
// ^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/reflect/Constructor#
112+
// ^ reference semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#getConstructor().[T]
113+
// ^^^^^^^^^^^ definition local 4
114+
// documentation ```java\n@SuppressWarnings("unchecked")\nConstructor<T> constructor\n```
115+
// ^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/reflect/Constructor#
116+
// ^ reference semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#getConstructor().[T]
117+
// ^^^^^^^^^^^^^^^^^ reference semanticdb maven . . minimized/AnnotationsOnParameterizedTypesImpl#proxyConstructors.
118+
// ^^^^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/util/concurrent/ConcurrentMap#computeIfAbsent().
119+
// ^^^^^^^^ reference local 3
120+
// ^ definition local 5
121+
// documentation ```java\nClass<?> c\n```
122+
return null;
123+
});
124+
125+
System.out.println(constructor);
126+
// ^^^^^^ reference semanticdb maven jdk 11 java/lang/System#
127+
// ^^^ reference semanticdb maven jdk 11 java/lang/System#out.
128+
// ^^^^^^^ reference semanticdb maven jdk 11 java/io/PrintStream#println(+9).
129+
// ^^^^^^^^^^^ reference local 4
130+
131+
return null;
132+
}
133+
}

0 commit comments

Comments
 (0)