in sdk/src/main/java/com/google/cloud/dataflow/sdk/util/ApiSurface.java [455:486]
private void addExposedTypes(Class<?> clazz, Class<?> cause) {
if (pruned(clazz)) {
return;
}
// Even if `clazz` has been visited, the link from `cause` may be new
boolean alreadyDone = done(clazz);
visit(clazz);
recordExposure(clazz, cause);
if (alreadyDone || pruned(clazz)) {
return;
}
TypeToken<?> token = TypeToken.of(clazz);
for (TypeToken<?> superType : token.getTypes()) {
if (!superType.equals(token)) {
addExposedTypes(superType, clazz);
}
}
for (Class innerClass : clazz.getDeclaredClasses()) {
if (exposed(innerClass.getModifiers())) {
addExposedTypes(innerClass, clazz);
}
}
for (Field field : clazz.getDeclaredFields()) {
if (exposed(field.getModifiers())) {
addExposedTypes(field, clazz);
}
}
for (Invokable invokable : getExposedInvokables(token)) {
addExposedTypes(invokable, clazz);
}
}