[assistant] Ignore java., android[x]., and kotlin[x]. reflection
Bug: b/487293776
Change-Id: Ieb40faab4871fdd890e1f6d4950ea91f0db8bccb
diff --git a/src/assistant/java/com/android/tools/r8/assistant/runtime/ReflectiveOperationJsonLogger.java b/src/assistant/java/com/android/tools/r8/assistant/runtime/ReflectiveOperationJsonLogger.java
index f5deedf2..7e5f477 100644
--- a/src/assistant/java/com/android/tools/r8/assistant/runtime/ReflectiveOperationJsonLogger.java
+++ b/src/assistant/java/com/android/tools/r8/assistant/runtime/ReflectiveOperationJsonLogger.java
@@ -116,6 +116,19 @@
return classLoader == null ? "null" : printClass(classLoader.getClass());
}
+ private boolean isIgnored(Class<?> clazz) {
+ return clazz != null && isIgnored(clazz.getName());
+ }
+
+ private boolean isIgnored(String name) {
+ return name != null
+ && (name.startsWith("java.")
+ || name.startsWith("android.")
+ || name.startsWith("androidx.")
+ || name.startsWith("kotlin.")
+ || name.startsWith("kotlinx."));
+ }
+
private synchronized void output(ReflectiveEventType event, Stack stack, String... args) {
try {
output.write("{\"event\": \"");
@@ -150,80 +163,125 @@
@Override
public void onClassNewInstance(Stack stack, Class<?> clazz) {
+ if (isIgnored(clazz)) {
+ return;
+ }
output(CLASS_NEW_INSTANCE, stack, printClass(clazz));
}
@Override
public void onClassGetDeclaredMethod(
Stack stack, Class<?> returnType, Class<?> clazz, String method, Class<?>... parameters) {
+ if (isIgnored(clazz)) {
+ return;
+ }
output(CLASS_GET_DECLARED_METHOD, stack, methodToString(returnType, clazz, method, parameters));
}
@Override
public void onClassGetDeclaredMethods(Stack stack, Class<?> clazz) {
+ if (isIgnored(clazz)) {
+ return;
+ }
output(CLASS_GET_DECLARED_METHODS, stack, printClass(clazz));
}
@Override
public void onClassGetDeclaredField(
Stack stack, Class<?> fieldType, Class<?> clazz, String fieldName) {
+ if (isIgnored(clazz)) {
+ return;
+ }
output(CLASS_GET_DECLARED_FIELD, stack, printClass(fieldType), printClass(clazz), fieldName);
}
@Override
public void onClassGetDeclaredFields(Stack stack, Class<?> clazz) {
+ if (isIgnored(clazz)) {
+ return;
+ }
output(CLASS_GET_DECLARED_FIELDS, stack, printClass(clazz));
}
@Override
public void onClassGetDeclaredConstructor(Stack stack, Class<?> clazz, Class<?>... parameters) {
+ if (isIgnored(clazz)) {
+ return;
+ }
output(CLASS_GET_DECLARED_CONSTRUCTOR, stack, constructorToString(clazz, parameters));
}
@Override
public void onClassGetDeclaredConstructors(Stack stack, Class<?> clazz) {
+ if (isIgnored(clazz)) {
+ return;
+ }
output(CLASS_GET_DECLARED_CONSTRUCTORS, stack, printClass(clazz));
}
@Override
public void onClassGetMethod(
Stack stack, Class<?> returnType, Class<?> clazz, String method, Class<?>... parameters) {
+ if (isIgnored(clazz)) {
+ return;
+ }
output(CLASS_GET_METHOD, stack, methodToString(returnType, clazz, method, parameters));
}
@Override
public void onClassGetMethods(Stack stack, Class<?> clazz) {
+ if (isIgnored(clazz)) {
+ return;
+ }
output(CLASS_GET_METHODS, stack, printClass(clazz));
}
@Override
public void onClassGetField(Stack stack, Class<?> fieldType, Class<?> clazz, String fieldName) {
+ if (isIgnored(clazz)) {
+ return;
+ }
output(CLASS_GET_FIELD, stack, printClass(fieldType), printClass(clazz), fieldName);
}
@Override
public void onClassGetFields(Stack stack, Class<?> clazz) {
+ if (isIgnored(clazz)) {
+ return;
+ }
output(CLASS_GET_FIELDS, stack, printClass(clazz));
}
@Override
public void onClassGetConstructor(Stack stack, Class<?> clazz, Class<?>... parameters) {
+ if (isIgnored(clazz)) {
+ return;
+ }
output(CLASS_GET_CONSTRUCTOR, stack, constructorToString(clazz, parameters));
}
@Override
public void onClassGetConstructors(Stack stack, Class<?> clazz) {
+ if (isIgnored(clazz)) {
+ return;
+ }
output(CLASS_GET_CONSTRUCTORS, stack, printClass(clazz));
}
@Override
public void onClassGetName(Stack stack, Class<?> clazz, NameLookupType lookupType) {
+ if (isIgnored(clazz)) {
+ return;
+ }
output(CLASS_GET_NAME, stack, printClass(clazz), lookupType.name());
}
@Override
public void onClassForName(
Stack stack, String className, boolean initialize, ClassLoader classLoader) {
+ if (isIgnored(className)) {
+ return;
+ }
output(
CLASS_FOR_NAME,
stack,
@@ -234,31 +292,49 @@
@Override
public void onClassGetComponentType(Stack stack, Class<?> clazz) {
+ if (isIgnored(clazz)) {
+ return;
+ }
output(CLASS_GET_COMPONENT_TYPE, stack, printClass(clazz));
}
@Override
public void onClassGetPackage(Stack stack, Class<?> clazz) {
+ if (isIgnored(clazz)) {
+ return;
+ }
output(CLASS_GET_PACKAGE, stack, printClass(clazz));
}
@Override
public void onClassIsAssignableFrom(Stack stack, Class<?> clazz, Class<?> sup) {
+ if (isIgnored(clazz)) {
+ return;
+ }
output(CLASS_IS_ASSIGNABLE_FROM, stack, printClass(clazz), printClass(sup));
}
@Override
public void onClassGetSuperclass(Stack stack, Class<?> clazz) {
+ if (isIgnored(clazz)) {
+ return;
+ }
output(CLASS_GET_SUPERCLASS, stack, printClass(clazz));
}
@Override
public void onClassAsSubclass(Stack stack, Class<?> holder, Class<?> clazz) {
+ if (isIgnored(holder)) {
+ return;
+ }
output(CLASS_AS_SUBCLASS, stack, printClass(holder), printClass(clazz));
}
@Override
public void onClassIsInstance(Stack stack, Class<?> holder, Object object) {
+ if (isIgnored(holder)) {
+ return;
+ }
output(
CLASS_IS_INSTANCE,
stack,
@@ -268,23 +344,35 @@
@Override
public void onClassCast(Stack stack, Class<?> holder, Object object) {
+ if (isIgnored(holder)) {
+ return;
+ }
output(CLASS_CAST, stack, printClass(holder), printClass(object.getClass()));
}
@Override
public void onClassFlag(Stack stack, Class<?> clazz, ClassFlag classFlag) {
+ if (isIgnored(clazz)) {
+ return;
+ }
output(CLASS_FLAG, stack, printClass(clazz), classFlag.name());
}
@Override
public void onAtomicFieldUpdaterNewUpdater(
Stack stack, Class<?> fieldClass, Class<?> clazz, String name) {
+ if (isIgnored(clazz)) {
+ return;
+ }
output(
ATOMIC_FIELD_UPDATER_NEW_UPDATER, stack, printClass(fieldClass), printClass(clazz), name);
}
@Override
public void onServiceLoaderLoad(Stack stack, Class<?> clazz, ClassLoader classLoader) {
+ if (isIgnored(clazz)) {
+ return;
+ }
output(SERVICE_LOADER_LOAD, stack, printClass(clazz), printClassLoader(classLoader));
}
@@ -294,6 +382,16 @@
ClassLoader classLoader,
Class<?>[] interfaces,
InvocationHandler invocationHandler) {
+ boolean allIgnored = true;
+ for (Class<?> itf : interfaces) {
+ if (!isIgnored(itf)) {
+ allIgnored = false;
+ break;
+ }
+ }
+ if (allIgnored) {
+ return;
+ }
String[] methodStrings = new String[interfaces.length + 2];
methodStrings[0] = printClassLoader(classLoader);
methodStrings[1] = invocationHandler.toString();