blob: 45ce7c2e932f097609cfe3b47806414be36698e9 [file]
// Copyright (c) 2025, the R8 project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.assistant.runtime;
import com.android.tools.r8.assistant.runtime.ReflectiveOracle.Stack;
import com.android.tools.r8.keepanno.annotations.KeepForApi;
import java.lang.reflect.InvocationHandler;
@KeepForApi
public interface ReflectiveOperationReceiver {
boolean requiresStackInformation();
void onClassForName(Stack stack, String className, boolean initialize, ClassLoader classLoader);
void onClassNewInstance(Stack stack, Class<?> clazz);
void onClassGetDeclaredMethod(
Stack stack, Class<?> returnType, Class<?> clazz, String method, Class<?>... parameters);
void onClassGetDeclaredMethods(Stack stack, Class<?> clazz);
void onClassGetDeclaredField(Stack stack, Class<?> fieldType, Class<?> clazz, String fieldName);
void onClassGetDeclaredFields(Stack stack, Class<?> clazz);
void onClassGetDeclaredConstructor(Stack stack, Class<?> clazz, Class<?>... parameters);
void onClassGetDeclaredConstructors(Stack stack, Class<?> clazz);
void onClassGetMethod(
Stack stack, Class<?> returnType, Class<?> clazz, String method, Class<?>... parameters);
void onClassGetMethods(Stack stack, Class<?> clazz);
void onClassGetField(Stack stack, Class<?> fieldType, Class<?> clazz, String fieldName);
void onClassGetFields(Stack stack, Class<?> clazz);
void onClassGetConstructor(Stack stack, Class<?> clazz, Class<?>... parameters);
void onClassGetConstructors(Stack stack, Class<?> clazz);
void onClassGetName(Stack stack, Class<?> clazz, NameLookupType lookupType);
void onClassGetSuperclass(Stack stack, Class<?> clazz);
void onClassAsSubclass(Stack stack, Class<?> holder, Class<?> clazz);
void onClassIsInstance(Stack stack, Class<?> holder, Object object);
void onClassCast(Stack stack, Class<?> holder, Object object);
void onClassFlag(Stack stack, Class<?> clazz, ClassFlag classFlag);
void onClassGetComponentType(Stack stack, Class<?> clazz);
void onClassGetPackage(Stack stack, Class<?> clazz);
void onClassIsAssignableFrom(Stack stack, Class<?> clazz, Class<?> sup);
void onAtomicFieldUpdaterNewUpdater(
Stack stack, Class<?> fieldClass, Class<?> clazz, String name);
void onServiceLoaderLoad(Stack stack, Class<?> clazz, ClassLoader classLoader);
void onProxyNewProxyInstance(
Stack stack,
ClassLoader classLoader,
Class<?>[] interfaces,
InvocationHandler invocationHandler);
@KeepForApi
enum ClassFlag {
ANNOTATION,
ANONYMOUS_CLASS,
ARRAY,
ENUM,
HIDDEN,
INTERFACE,
LOCAL_CLASS,
MEMBER_CLASS,
PRIMITIVE,
RECORD,
SEALED,
SYNTHETIC
}
@KeepForApi
enum NameLookupType {
NAME,
SIMPLE_NAME,
CANONICAL_NAME,
TYPE_NAME
}
}