in javac-ast-extension/src/org/jetbrains/jps/javac/ast/JavacReferenceCollectorListener.java [36:63]
static void installOn(JavaCompiler.CompilationTask task, JavacReferenceCollector.Consumer<? super JavacFileData> dataConsumer) {
JavacTask javacTask = (JavacTask)task;
Method addTaskMethod; // jdk >= 8
try {
addTaskMethod = JavacTask.class.getMethod("addTaskListener", TaskListener.class);
}
catch (NoSuchMethodException e) {
addTaskMethod = null;
}
final JavacReferenceCollectorListener taskListener = new JavacReferenceCollectorListener(
dataConsumer, javacTask, addTaskMethod != null
);
if (addTaskMethod != null) {
try {
addTaskMethod.setAccessible(true);
addTaskMethod.invoke(task, taskListener);
}
catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
catch (InvocationTargetException e) {
throw new RuntimeException(e);
}
} else {
// jdk 6-7
javacTask.setTaskListener(taskListener);
}
}