diff options
Diffstat (limited to 'test/jvmti-common/Redefinition.java')
-rw-r--r-- | test/jvmti-common/Redefinition.java | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/test/jvmti-common/Redefinition.java b/test/jvmti-common/Redefinition.java index 2ebce17686..3402fa12b5 100644 --- a/test/jvmti-common/Redefinition.java +++ b/test/jvmti-common/Redefinition.java @@ -19,7 +19,7 @@ package art; import java.util.ArrayList; // Common Redefinition functions. Placed here for use by CTS public class Redefinition { - public static final class CommonClassDefinition { + public static class CommonClassDefinition { public final Class<?> target; public final byte[] class_file_bytes; public final byte[] dex_file_bytes; @@ -31,12 +31,19 @@ public class Redefinition { } } + public static class DexOnlyClassDefinition extends CommonClassDefinition { + public DexOnlyClassDefinition(Class<?> target, byte[] dex_file_bytes) { + super(target, new byte[0], dex_file_bytes); + } + } + // A set of possible test configurations. Test should set this if they need to. // This must be kept in sync with the defines in ti-agent/common_helper.cc public static enum Config { COMMON_REDEFINE(0), COMMON_RETRANSFORM(1), - COMMON_TRANSFORM(2); + COMMON_TRANSFORM(2), + STRUCTURAL_TRANSFORM(3); private final int val; private Config(int val) { @@ -90,5 +97,18 @@ public class Redefinition { byte[] dex_bytes); public static native void doCommonStructuralClassRedefinition(Class<?> target, byte[] dex_file); + public static void doMultiStructuralClassRedefinition(CommonClassDefinition... defs) { + ArrayList<Class<?>> classes = new ArrayList<>(); + ArrayList<byte[]> dex_files = new ArrayList<>(); + + for (CommonClassDefinition d : defs) { + classes.add(d.target); + dex_files.add(d.dex_file_bytes); + } + doCommonMultiStructuralClassRedefinition(classes.toArray(new Class<?>[0]), + dex_files.toArray(new byte[0][])); + } + public static native void doCommonMultiStructuralClassRedefinition(Class<?>[] targets, + byte[][] dexfiles); public static native boolean isStructurallyModifiable(Class<?> target); } |