140b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz/*
240b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz * Licensed to the Apache Software Foundation (ASF) under one or more
340b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz * contributor license agreements.  See the NOTICE file distributed with
440b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz * this work for additional information regarding copyright ownership.
540b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz * The ASF licenses this file to You under the Apache License, Version 2.0
640b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz * (the "License"); you may not use this file except in compliance with
740b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz * the License.  You may obtain a copy of the License at
840b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz *
940b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz *     http://www.apache.org/licenses/LICENSE-2.0
1040b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz *
1140b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz *  Unless required by applicable law or agreed to in writing, software
1240b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz *  distributed under the License is distributed on an "AS IS" BASIS,
1340b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1440b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz *
1540b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz *  See the License for the specific language governing permissions and
1640b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz *  limitations under the License.
1740b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz */
1840b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz
1940b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertzpackage org.apache.harmony.jpda.tests.jdwp.StackFrame;
2040b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz
2140b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertzimport org.apache.harmony.jpda.tests.framework.TestErrorException;
2240b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertzimport org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
2340b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertzimport org.apache.harmony.jpda.tests.share.SyncDebuggee;
2440b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz
2554d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertzimport java.lang.reflect.InvocationTargetException;
2654d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertzimport java.lang.reflect.Method;
2754d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz
2840b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz/**
2940b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz * Debuggee for GetValues002Test and SetValues002Test.
3040b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz */
3140b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertzpublic class StackTrace002Debuggee extends SyncDebuggee {
3240b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    // Signals to select which method the debuggee needs to call.
3340b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    static final String BOOLEAN_SIGNAL = "runBreakpointBoolean";
3440b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    static final String BYTE_SIGNAL = "runBreakpointByte";
3540b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    static final String CHAR_SIGNAL = "runBreakpointChar";
3640b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    static final String SHORT_SIGNAL = "runBreakpointShort";
3740b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    static final String INT_SIGNAL = "runBreakpointInt";
3840b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    static final String INT_METHOD2_SIGNAL = "runBreakpointInt2";
3954d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    static final String INT_CONSTANT_METHOD_SIGNAL = "runBreakpointIntConstant";
4054d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    static final String INT_TWO_CONSTANTS_METHOD_SIGNAL = "runBreakpointIntTwoConstants";
4154d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    static final String INT_CONSTANT_METHOD_WITH_EXCEPTION_SIGNAL =
4254d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz            "runBreakpointIntConstantWithException";
4354d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    static final String INT_CONSTANT_METHOD_WITH_EXCEPTION_IN_CALLEE_SIGNAL =
4454d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz            "runBreakpointIntConstantWithExceptionInCallee";
4554d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    static final String INT_CONSTANT_METHOD_WITH_EXCEPTION_IN_CALLER_SIGNAL =
4654d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz            "runBreakpointIntConstantWithExceptionInCaller";
4754d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    static final String INT_CONSTANT_METHOD_WITH_EXCEPTION_FROM_NATIVE_SIGNAL =
4854d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz            "runBreakpointIntConstantWithExceptionAndNativeTransition";
4940b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    static final String LONG_METHOD_SIGNAL = "runBreakpointLong";
5040b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    static final String FLOAT_METHOD = "runBreakpointFloat";
5140b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    static final String DOUBLE_METHOD = "runBreakpointDouble";
5240b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    static final String OBJECT_SIGNAL = "runBreakpointObject";
5354d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    static final String OBJECT_WITH_EXCEPTION_SIGNAL = "runBreakpointObjectWithException";
5454d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    static final String OBJECT_METHOD_WITH_EXCEPTION_IN_CALLEE_SIGNAL =
5554d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz            "runBreakpointObjectWithExceptionInCallee";
5654d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    static final String OBJECT_METHOD_WITH_EXCEPTION_IN_CALLER_SIGNAL =
5754d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz            "runBreakpointObjectWithExceptionInCaller";
5854d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    static final String OBJECT_METHOD_WITH_EXCEPTION_FROM_NATIVE_SIGNAL =
5954d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz            "runBreakpointObjectWithExceptionAndNativeTransition";
6040b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    static final String ARRAY_SIGNAL = "runBreakpointArray";
6140b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    static final String CLASS_SIGNAL = "runBreakpointClass";
6240b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    static final String CLASS_LOADER_SIGNAL = "runBreakpointClassLoader";
6340b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    static final String STRING_SIGNAL = "runBreakpointString";
6440b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    static final String THREAD_SIGNAL = "runBreakpointThread";
6540b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    static final String THREAD_GROUP_SIGNAL = "runBreakpointThreadGroup";
6640b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    static final String ARRAY_AS_OBJECT_SIGNAL = "runBreakpointArrayAsObject";
6740b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    static final String CLASS_AS_OBJECT_SIGNAL = "runBreakpointClassAsObject";
6840b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    static final String CLASS_LOADER_AS_OBJECT_SIGNAL = "runBreakpointClassLoaderAsObject";
6940b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    static final String STRING_AS_OBJECT_SIGNAL = "runBreakpointStringAsObject";
7040b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    static final String THREAD_AS_OBJECT_SIGNAL = "runBreakpointThreadAsObject";
7140b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    static final String THREAD_GROUP_AS_OBJECT_SIGNAL = "runBreakpointThreadGroupAsObject";
7240b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz
7340b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    // Values used to check StackFrame.GetValues.
7440b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    static final boolean BOOLEAN_PARAM_VALUE = true;
7540b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    static final byte BYTE_PARAM_VALUE = 123;
7640b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    static final char CHAR_PARAM_VALUE = '@';
7740b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    static final short SHORT_PARAM_VALUE = 12345;
7840b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    static final int INT_PARAM_VALUE = 123456789;
7940b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    static final long LONG_PARAM_VALUE = 102030405060708090L;
8040b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    static final float FLOAT_PARAM_VALUE = 123.456f;
8140b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    static final double DOUBLE_PARAM_VALUE = 0.123456789;
8240b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    static final Object OBJECT_PARAM_VALUE = new Object();
8340b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    static final int[] ARRAY_PARAM_VALUE = new int[]{1, 2, 3, 4, 5};
8440b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    static final Class<?> CLASS_PARAM_VALUE = StackTrace002Debuggee.class;
8540b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    static final ClassLoader CLASS_LOADER_PARAM_VALUE = CLASS_PARAM_VALUE.getClassLoader();
8640b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    static final String STRING_PARAM_VALUE = "this is a string object";
8740b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    static final Thread THREAD_PARAM_VALUE = new Thread("this is a thread");
8840b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    static final ThreadGroup THREAD_GROUP_PARAM_VALUE = THREAD_PARAM_VALUE.getThreadGroup();
8940b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz
9040b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    // Values used to check StackFrame.SetValues.
9140b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    static final boolean BOOLEAN_PARAM_VALUE_TO_SET = !BOOLEAN_PARAM_VALUE;
9240b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    static final byte BYTE_PARAM_VALUE_TO_SET = -BYTE_PARAM_VALUE;
9340b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    static final char CHAR_PARAM_VALUE_TO_SET = '%';
9440b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    static final short SHORT_PARAM_VALUE_TO_SET = -SHORT_PARAM_VALUE;
9540b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    static final int INT_PARAM_VALUE_TO_SET = -INT_PARAM_VALUE;
9640b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    static final long LONG_PARAM_VALUE_TO_SET = -LONG_PARAM_VALUE;
9740b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    static final float FLOAT_PARAM_VALUE_TO_SET = -FLOAT_PARAM_VALUE;
9840b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    static final double DOUBLE_PARAM_VALUE_TO_SET = -DOUBLE_PARAM_VALUE;
9940b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    static final Object OBJECT_PARAM_VALUE_TO_SET = new Object();
10040b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    static final int[] ARRAY_PARAM_VALUE_TO_SET = new int[]{5, 4, 3, 2, 1};
10140b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    static final Class<?> CLASS_PARAM_VALUE_TO_SET = Object.class;
10240b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    static final ClassLoader CLASS_LOADER_PARAM_VALUE_TO_SET =
10340b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz            CLASS_PARAM_VALUE_TO_SET.getClassLoader();
10440b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    static final String STRING_PARAM_VALUE_TO_SET = "this is another string object";
10540b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    static final Thread THREAD_PARAM_VALUE_TO_SET = new Thread("this is another thread");
10640b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    static final ThreadGroup THREAD_GROUP_PARAM_VALUE_TO_SET =
10740b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz            THREAD_PARAM_VALUE_TO_SET.getThreadGroup();
10840b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz
10940b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    // A reference to 'this' debuggee.
11040b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    static Object THIS_OBJECT;
11140b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz
11254d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    private static class TestException extends Exception {
11354d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    }
11454d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz
11540b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    public static void main(String[] args) {
11640b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        runDebuggee(StackTrace002Debuggee.class);
11740b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    }
11840b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz
11940b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    @Override
12040b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    public void run() {
12140b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        THIS_OBJECT = this;
12240b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz
12340b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_READY);
12440b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz
12540b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        // Wait for test setup.
12640b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        String signal = synchronizer.receiveMessage();
12740b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz
12840b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        // Invoke the method requested by the test.
12940b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        switch (signal) {
13040b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz            case BOOLEAN_SIGNAL:
13140b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz                runBreakpointBoolean(BOOLEAN_PARAM_VALUE);
13240b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz                break;
13340b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz            case BYTE_SIGNAL:
13440b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz                runBreakpointByte(BYTE_PARAM_VALUE);
13540b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz                break;
13640b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz            case CHAR_SIGNAL:
13740b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz                runBreakpointChar(CHAR_PARAM_VALUE);
13840b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz                break;
13940b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz            case SHORT_SIGNAL:
14040b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz                runBreakpointShort(SHORT_PARAM_VALUE);
14140b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz                break;
14240b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz            case INT_SIGNAL:
14340b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz                runBreakpointInt(INT_PARAM_VALUE);
14440b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz                break;
14540b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz            case INT_METHOD2_SIGNAL:
14640b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz                runBreakpointInt2(INT_PARAM_VALUE);
14740b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz                break;
14854d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz            case INT_CONSTANT_METHOD_SIGNAL:
14954d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz                runBreakpointIntConstant();
15054d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz                break;
15154d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz            case INT_TWO_CONSTANTS_METHOD_SIGNAL:
15254d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz                runBreakpointIntTwoConstants();
15354d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz                break;
15454d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz            case INT_CONSTANT_METHOD_WITH_EXCEPTION_SIGNAL:
15554d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz                runBreakpointIntConstantWithException();
15654d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz                break;
15754d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz            case INT_CONSTANT_METHOD_WITH_EXCEPTION_IN_CALLEE_SIGNAL:
15854d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz                runBreakpointIntConstantWithExceptionInCallee();
15954d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz                break;
16054d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz            case INT_CONSTANT_METHOD_WITH_EXCEPTION_IN_CALLER_SIGNAL:
16154d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz                runBreakpointIntConstantWithExceptionInCaller();
16254d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz                break;
16354d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz            case INT_CONSTANT_METHOD_WITH_EXCEPTION_FROM_NATIVE_SIGNAL:
16454d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz                runBreakpointIntConstantWithExceptionAndNativeTransition();
16554d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz                break;
16640b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz            case LONG_METHOD_SIGNAL:
16740b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz                runBreakpointLong(LONG_PARAM_VALUE);
16840b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz                break;
16940b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz            case FLOAT_METHOD:
17040b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz                runBreakpointFloat(FLOAT_PARAM_VALUE);
17140b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz                break;
17240b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz            case DOUBLE_METHOD:
17340b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz                runBreakpointDouble(DOUBLE_PARAM_VALUE);
17440b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz                break;
17540b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz            case OBJECT_SIGNAL:
17640b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz                runBreakpointObject(OBJECT_PARAM_VALUE);
17740b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz                break;
17854d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz            case OBJECT_WITH_EXCEPTION_SIGNAL:
17954d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz                runBreakpointObjectWithException();
18054d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz                break;
18154d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz            case OBJECT_METHOD_WITH_EXCEPTION_IN_CALLEE_SIGNAL:
18254d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz                runBreakpointObjectWithExceptionInCallee();
18354d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz                break;
18454d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz            case OBJECT_METHOD_WITH_EXCEPTION_IN_CALLER_SIGNAL:
18554d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz                runBreakpointObjectWithExceptionInCaller();
18654d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz                break;
18754d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz            case OBJECT_METHOD_WITH_EXCEPTION_FROM_NATIVE_SIGNAL:
18854d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz                runBreakpointObjectWithExceptionAndNativeTransition();
18954d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz                break;
19040b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz            case ARRAY_SIGNAL:
19140b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz                runBreakpointArray(ARRAY_PARAM_VALUE);
19240b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz                break;
19340b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz            case CLASS_SIGNAL:
19440b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz                runBreakpointClass(CLASS_PARAM_VALUE);
19540b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz                break;
19640b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz            case CLASS_LOADER_SIGNAL:
19740b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz                runBreakpointClassLoader(CLASS_LOADER_PARAM_VALUE);
19840b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz                break;
19940b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz            case STRING_SIGNAL:
20040b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz                runBreakpointString(STRING_PARAM_VALUE);
20140b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz                break;
20240b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz            case THREAD_SIGNAL:
20340b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz                runBreakpointThread(THREAD_PARAM_VALUE);
20440b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz                break;
20540b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz            case THREAD_GROUP_SIGNAL:
20640b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz                runBreakpointThreadGroup(THREAD_GROUP_PARAM_VALUE);
20740b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz                break;
20840b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz            case ARRAY_AS_OBJECT_SIGNAL:
20940b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz                runBreakpointObject(ARRAY_PARAM_VALUE);
21040b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz                break;
21140b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz            case CLASS_AS_OBJECT_SIGNAL:
21240b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz                runBreakpointObject(CLASS_PARAM_VALUE);
21340b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz                break;
21440b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz            case CLASS_LOADER_AS_OBJECT_SIGNAL:
21540b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz                runBreakpointObject(CLASS_LOADER_PARAM_VALUE);
21640b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz                break;
21740b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz            case STRING_AS_OBJECT_SIGNAL:
21840b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz                runBreakpointObject(STRING_PARAM_VALUE);
21940b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz                break;
22040b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz            case THREAD_AS_OBJECT_SIGNAL:
22140b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz                runBreakpointObject(THREAD_PARAM_VALUE);
22240b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz                break;
22340b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz            case THREAD_GROUP_AS_OBJECT_SIGNAL:
22440b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz                runBreakpointObject(THREAD_GROUP_PARAM_VALUE);
22540b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz                break;
22640b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz            default:
22740b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz                throw new TestErrorException("Unexpected signal \"" + signal + "\"");
22840b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        }
22940b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz
23040b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    }
23140b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz
23240b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    // Test boolean type.
23340b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    public void runBreakpointBoolean(boolean param) {
23440b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        breakpointBoolean(param);
23540b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        breakpointBoolean(param);
23640b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    }
23740b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz
23840b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    public void breakpointBoolean(boolean param) {
23940b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        logWriter.println("breakpointBoolean(param=" + param + ")");
24054d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        synchronizeWithTest();
24140b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    }
24240b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz
24340b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    // Test byte type.
24440b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    public void runBreakpointByte(byte param) {
24540b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        breakpointByte(param);
24640b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        breakpointByte(param);
24740b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    }
24840b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz
24940b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    public void breakpointByte(byte param) {
25040b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        logWriter.println("breakpointByte(param=" + param + ")");
25154d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        synchronizeWithTest();
25240b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    }
25340b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz
25440b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    // Test char type.
25540b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    public void runBreakpointChar(char param) {
25640b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        breakpointChar(param);
25740b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        breakpointChar(param);
25840b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    }
25940b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz
26040b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    public void breakpointChar(char param) {
26140b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        logWriter.println("breakpointChar(param=" + param + ")");
26254d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        synchronizeWithTest();
26340b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    }
26440b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz
26540b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    // Test short type.
26640b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    public void runBreakpointShort(short param) {
26740b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        breakpointShort(param);
26840b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        breakpointShort(param);
26940b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    }
27040b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz
27140b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    public void breakpointShort(short param) {
27240b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        logWriter.println("breakpointShort(param=" + param + ")");
27354d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        synchronizeWithTest();
27440b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    }
27540b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz
27640b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    // Test int type.
27740b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    public void runBreakpointInt(int param) {
27840b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        breakpointInt(param);
27940b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        breakpointInt(param);
28040b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    }
28140b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz
28240b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    public void breakpointInt(int param) {
28340b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        logWriter.println("breakpointInt(param=" + param + ")");
28454d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        synchronizeWithTest();
28540b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    }
28640b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz
28740b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    public void runBreakpointInt2(int param) {
28840b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        int local = param;
28940b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        breakpointInt2(local);
29040b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        local = local + param;
29140b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        breakpointInt2(local);
29240b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    }
29340b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz
29440b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    public void breakpointInt2(int param) {
29540b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        logWriter.println("breakpointInt2(param=" + param + ")");
29654d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        synchronizeWithTest();
29754d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    }
29854d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz
29954d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    // Test int type with a constant.
30054d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    public void runBreakpointIntConstant() {
30154d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        int local = INT_PARAM_VALUE;
30254d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        breakpointIntConstant(local);
30354d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        breakpointIntConstant(local);
30454d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    }
30554d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz
30654d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    public void breakpointIntConstant(int param) {
30754d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        logWriter.println("breakpointIntConstant(param=" + param + ")");
30854d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        synchronizeWithTest();
30954d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    }
31054d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz
31154d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    // Test int type with two constants in the same frame.
31254d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    public void runBreakpointIntTwoConstants() {
31354d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        int local1 = INT_PARAM_VALUE;
31454d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        int local2 = -INT_PARAM_VALUE;
31554d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        breakpointIntTwoConstants(local1, local2);
31654d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        breakpointIntTwoConstants(local1, local2);
31754d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    }
31854d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz
31954d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    public void breakpointIntTwoConstants(int param1, int param2) {
32054d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        logWriter.println("breakpointIntTwoConstants(param1=" + param1 +
32154d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz                ", param2=" + param2 + ")");
32254d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        synchronizeWithTest();
32354d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    }
32454d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz
32554d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    // Test setting a variable with a caught exception.
32654d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    public void runBreakpointIntConstantWithException() {
32754d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        int local = INT_PARAM_VALUE;
32854d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        try {
32954d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz            breakpointIntConstantWithException(local);
33054d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        } catch (TestException expected) {
33154d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        }
33254d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        try {
33354d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz            breakpointIntConstantWithException(local);
33454d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        } catch (TestException expected) {
33554d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        }
33654d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    }
33754d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz
33854d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    // Test setting a variable with a caught exception in the callee.
33954d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    public void runBreakpointIntConstantWithExceptionInCallee() {
34054d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        int local = INT_PARAM_VALUE;
34154d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        breakpointIntConstantWithCaughtException(local);
34254d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        breakpointIntConstantWithCaughtException(local);
34354d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    }
34454d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz
34554d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    // Test setting a variable with a caught exception in the caller. Because the frame will
34654d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    // be unwound after throwing the exception, setting the variable has no effect.
34754d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    public void runBreakpointIntConstantWithExceptionInCaller() {
34854d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        // Call twice to remain compatible with the test expecting 2 suspensions.
34954d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        try {
35054d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz            runBreakpointIntConstantWithExceptionInCallerImpl();
35154d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        } catch (TestException expected) {
35254d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        }
35354d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        try {
35454d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz            runBreakpointIntConstantWithExceptionInCallerImpl();
35554d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        } catch (TestException expected) {
35654d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        }
35754d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    }
35854d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz
35954d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    public void runBreakpointIntConstantWithExceptionInCallerImpl() throws TestException {
36054d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        int local = INT_PARAM_VALUE;
36154d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        // We're going to throw in the callee and the exception is caught in our caller so we
36254d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        // won't execute the current frame anymore.
36354d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        breakpointIntConstantWithException(local);
36454d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    }
36554d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz
36654d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    private void breakpointIntConstantWithCaughtException(int param) {
36754d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        try {
36854d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz            breakpointIntConstantWithException(param);
36954d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        } catch (TestException expected) {
37054d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        }
37154d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    }
37254d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz
37354d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    public void breakpointIntConstantWithException(int param) throws TestException {
37454d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        logWriter.println("breakpointIntConstantWithException(param=" + param + ")");
37554d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        synchronizeWithTest();
37654d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        throw new TestException();
37754d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    }
37854d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz
37954d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    // Test setting a variable with a caught exception with a native transition (using reflect).
38054d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    public void runBreakpointIntConstantWithExceptionAndNativeTransition() {
38154d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        int local = INT_PARAM_VALUE;
38254d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        try {
38354d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz            breakpointIntConstantWithExceptionAndNativeTransition(local);
38454d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        } catch (TestException expected) {
38554d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        }
38654d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        try {
38754d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz            breakpointIntConstantWithExceptionAndNativeTransition(local);
38854d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        } catch (TestException expected) {
38954d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        }
39054d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    }
39154d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz
39254d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    private void breakpointIntConstantWithExceptionAndNativeTransition(int local) throws TestException {
39354d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        try {
39454d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz            Method suspensionMethod =
39554d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz                    StackTrace002Debuggee.class.getDeclaredMethod("breakpointIntConstantWithException",
39654d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz                            new Class<?>[]{int.class});
39754d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz            suspensionMethod.invoke(this, local);
39854d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        } catch (NoSuchMethodException | IllegalAccessException | IllegalArgumentException e) {
39954d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz            throw new TestErrorException(e);
40054d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        } catch (InvocationTargetException e) {
40154d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz            if (e.getTargetException() instanceof TestException) {
40254d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz                throw (TestException) e.getTargetException();
40354d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz            } else {
40454d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz                throw new TestErrorException(e);
40554d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz            }
40654d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        }
40740b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    }
40840b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz
40940b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    // Test long type.
41040b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    public void runBreakpointLong(long param) {
41140b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        breakpointLong(param);
41240b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        breakpointLong(param);
41340b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    }
41440b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz
41540b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    public void breakpointLong(long param) {
41640b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        logWriter.println("breakpointLong(param=" + param + ")");
41754d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        synchronizeWithTest();
41840b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    }
41940b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz
42040b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    // Test float type.
42140b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    public void runBreakpointFloat(float param) {
42240b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        breakpointFloat(param);
42340b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        breakpointFloat(param);
42440b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    }
42540b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz
42640b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    public void breakpointFloat(float param) {
42740b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        logWriter.println("breakpointFloat(param=" + param + ")");
42854d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        synchronizeWithTest();
42940b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    }
43040b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz
43140b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    // Test double type.
43240b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    public void runBreakpointDouble(double param) {
43340b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        breakpointDouble(param);
43440b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        breakpointDouble(param);
43540b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    }
43640b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz
43740b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    public void breakpointDouble(double param) {
43840b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        logWriter.println("breakpointDouble(param=" + param + ")");
43954d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        synchronizeWithTest();
44040b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    }
44140b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz
44240b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    // Test java.lang.Object type.
44340b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    public void runBreakpointObject(Object param) {
44440b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        breakpointObject(param);
44540b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        breakpointObject(param);
44640b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    }
44740b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz
44840b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    public void breakpointObject(Object param) {
44940b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        logWriter.println("breakpointObject(param=\"" + param + "\")");
45054d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        synchronizeWithTest();
45154d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    }
45254d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz
45354d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    // Test setting a java.lang.Object variable with a caught exception.
45454d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    public void runBreakpointObjectWithException() {
45554d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        Object local = OBJECT_PARAM_VALUE;
45654d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        try {
45754d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz            breakpointObjectWithException(local);
45854d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        } catch (TestException expected) {
45954d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        }
46054d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        try {
46154d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz            breakpointObjectWithException(local);
46254d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        } catch (TestException expected) {
46354d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        }
46454d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    }
46554d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz
46654d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    public void breakpointObjectWithException(Object param) throws TestException {
46754d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        logWriter.println("breakpointObjectWithException(param=" + param + ")");
46854d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        synchronizeWithTest();
46954d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        throw new TestException();
47054d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    }
47154d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz
47254d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    // Test setting a java.lang.Object variable with a caught exception in the callee.
47354d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    public void runBreakpointObjectWithExceptionInCallee() {
47454d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        Object local = OBJECT_PARAM_VALUE;
47554d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        breakpointObjectWithCaughtException(local);
47654d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        breakpointObjectWithCaughtException(local);
47754d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    }
47854d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz
47954d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    // Test setting a java.lang.Object variable with a caught exception in the caller.
48054d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    // Because the frame will be unwound after throwing the exception, setting the
48154d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    // variable has no effect.
48254d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    public void runBreakpointObjectWithExceptionInCaller() {
48354d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        // Call twice to remain compatible with the test expecting 2 suspensions.
48454d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        try {
48554d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz            runBreakpointObjectWithExceptionInCallerImpl();
48654d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        } catch (TestException expected) {
48754d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        }
48854d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        try {
48954d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz            runBreakpointObjectWithExceptionInCallerImpl();
49054d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        } catch (TestException expected) {
49154d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        }
49254d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    }
49354d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz
49454d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    public void runBreakpointObjectWithExceptionInCallerImpl() throws TestException {
49554d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        Object local = OBJECT_PARAM_VALUE;
49654d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        // We're going to throw in the callee and the exception is caught in our caller so we
49754d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        // won't execute the current frame anymore.
49854d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        breakpointObjectWithException(local);
49954d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    }
50054d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz
50154d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    private void breakpointObjectWithCaughtException(Object param) {
50254d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        try {
50354d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz            breakpointObjectWithException(param);
50454d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        } catch (TestException expected) {
50554d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        }
50654d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    }
50754d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz
50854d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    // Test setting a java.lang.Object variable with a caught exception with a native
50954d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    // transition (using reflect).
51054d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    public void runBreakpointObjectWithExceptionAndNativeTransition() {
51154d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        Object local = OBJECT_PARAM_VALUE;
51254d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        try {
51354d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz            breakpointObjectWithExceptionAndNativeTransition(local);
51454d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        } catch (TestException expected) {
51554d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        }
51654d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        try {
51754d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz            breakpointObjectWithExceptionAndNativeTransition(local);
51854d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        } catch (TestException expected) {
51954d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        }
52054d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    }
52154d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz
52254d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    private void breakpointObjectWithExceptionAndNativeTransition(Object local)
52354d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz            throws TestException {
52454d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        try {
52554d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz            Method suspensionMethod =
52654d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz                    StackTrace002Debuggee.class.getDeclaredMethod("breakpointObjectWithException",
52754d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz                            new Class<?>[]{Object.class});
52854d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz            suspensionMethod.invoke(this, local);
52954d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        } catch (NoSuchMethodException | IllegalAccessException | IllegalArgumentException e) {
53054d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz            throw new TestErrorException(e);
53154d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        } catch (InvocationTargetException e) {
53254d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz            if (e.getTargetException() instanceof TestException) {
53354d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz                throw (TestException) e.getTargetException();
53454d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz            } else {
53554d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz                throw new TestErrorException(e);
53654d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz            }
53754d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        }
53840b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    }
53940b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz
54040b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    // Test array type.
54140b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    public void runBreakpointArray(int[] param) {
54240b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        breakpointArray(param);
54340b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        breakpointArray(param);
54440b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    }
54540b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz
54640b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    public void breakpointArray(int[] param) {
54740b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        logWriter.println("breakpointArray(param=\"" + param + "\")");
54854d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        synchronizeWithTest();
54940b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    }
55040b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz
55140b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    // Test java.lang.Class type.
55240b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    public void runBreakpointClass(Class<?> param) {
55340b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        breakpointClass(param);
55440b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        breakpointClass(param);
55540b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    }
55640b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz
55740b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    public void breakpointClass(Class<?> param) {
55840b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        logWriter.println("breakpointClass(param=\"" + param + "\")");
55954d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        synchronizeWithTest();
56040b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    }
56140b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz
56240b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    // Test java.lang.ClassLoader type.
56340b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    public void runBreakpointClassLoader(ClassLoader param) {
56440b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        breakpointClassLoader(param);
56540b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        breakpointClassLoader(param);
56640b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    }
56740b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz
56840b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    public void breakpointClassLoader(ClassLoader param) {
56940b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        logWriter.println("breakpointClassLoader(param=\"" + param + "\")");
57054d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        synchronizeWithTest();
57140b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    }
57240b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz
57340b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    // Test java.lang.String type.
57440b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    public void runBreakpointString(String param) {
57540b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        breakpointString(param);
57640b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        breakpointString(param);
57740b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    }
57840b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz
57940b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    public void breakpointString(String param) {
58040b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        logWriter.println("breakpointString(param=\"" + param + "\")");
58154d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        synchronizeWithTest();
58240b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    }
58340b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz
58440b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    // Test java.lang.Thread type.
58540b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    public void runBreakpointThread(Thread param) {
58640b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        breakpointThread(param);
58740b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        breakpointThread(param);
58840b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    }
58940b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz
59040b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    public void breakpointThread(Thread param) {
59140b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        logWriter.println("breakpointThread(param=\"" + param + "\")");
59254d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        synchronizeWithTest();
59340b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    }
59440b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz
59540b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    // Test java.lang.ThreadGroup type.
59640b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    public void runBreakpointThreadGroup(ThreadGroup param) {
59740b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        breakpointThreadGroup(param);
59840b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        breakpointThreadGroup(param);
59940b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    }
60040b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz
60140b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    public void breakpointThreadGroup(ThreadGroup param) {
60240b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz        logWriter.println("breakpointThreadGroup(param=\"" + param + "\")");
60354d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        synchronizeWithTest();
60454d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    }
60554d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz
60654d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz    private void synchronizeWithTest() {
60754d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        // Sends thread's name so the test can find its thread id.
60854d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        synchronizer.sendMessage(Thread.currentThread().getName());
60954d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz
61054d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        // Wait for the test to signal us after its checks.
61154d7f328676ce7f8ad8d9c916c032ccc309ad136Sebastien Hertz        synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE);
61240b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz    }
61340b8281a8c24db9614ed79c32e296a67abb31786Sebastien Hertz}