/*
* Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package com.sun.max.vm.ext.jvmti;
import static com.sun.max.vm.ext.jvmti.JVMTIConstants.*;
/**
* Support for {@link JVMTIFunctions#GetErrorName}.
* The use of an enum has the VM create the strings for us.
*/
public enum JVMTIError {
// Errors
NONE(JVMTI_ERROR_NONE),
INVALID_THREAD(JVMTI_ERROR_INVALID_THREAD),
INVALID_THREAD_GROUP(JVMTI_ERROR_INVALID_THREAD_GROUP),
INVALID_PRIORITY(JVMTI_ERROR_INVALID_PRIORITY),
THREAD_NOT_SUSPENDED(JVMTI_ERROR_THREAD_NOT_SUSPENDED),
THREAD_SUSPENDED(JVMTI_ERROR_THREAD_SUSPENDED),
THREAD_NOT_ALIVE(JVMTI_ERROR_THREAD_NOT_ALIVE),
INVALID_OBJECT(JVMTI_ERROR_INVALID_OBJECT),
INVALID_CLASS(JVMTI_ERROR_INVALID_CLASS),
CLASS_NOT_PREPARED(JVMTI_ERROR_CLASS_NOT_PREPARED),
INVALID_METHODID(JVMTI_ERROR_INVALID_METHODID),
INVALID_LOCATION(JVMTI_ERROR_INVALID_LOCATION),
INVALID_FIELDID(JVMTI_ERROR_INVALID_FIELDID),
NO_MORE_FRAMES(JVMTI_ERROR_NO_MORE_FRAMES),
OPAQUE_FRAME(JVMTI_ERROR_OPAQUE_FRAME),
TYPE_MISMATCH(JVMTI_ERROR_TYPE_MISMATCH),
INVALID_SLOT(JVMTI_ERROR_INVALID_SLOT),
DUPLICATE(JVMTI_ERROR_DUPLICATE),
NOT_FOUND(JVMTI_ERROR_NOT_FOUND),
INVALID_MONITOR(JVMTI_ERROR_INVALID_MONITOR),
NOT_MONITOR_OWNER(JVMTI_ERROR_NOT_MONITOR_OWNER),
INTERRUPT(JVMTI_ERROR_INTERRUPT),
INVALID_CLASS_FORMAT(JVMTI_ERROR_INVALID_CLASS_FORMAT),
CIRCULAR_CLASS_DEFINITION(JVMTI_ERROR_CIRCULAR_CLASS_DEFINITION),
FAILS_VERIFICATION(JVMTI_ERROR_FAILS_VERIFICATION),
UNSUPPORTED_REDEFINITION_METHOD_ADDED(JVMTI_ERROR_UNSUPPORTED_REDEFINITION_METHOD_ADDED),
UNSUPPORTED_REDEFINITION_SCHEMA_CHANGED(JVMTI_ERROR_UNSUPPORTED_REDEFINITION_SCHEMA_CHANGED),
INVALID_TYPESTATE(JVMTI_ERROR_INVALID_TYPESTATE),
UNSUPPORTED_REDEFINITION_HIERARCHY_CHANGED(JVMTI_ERROR_UNSUPPORTED_REDEFINITION_HIERARCHY_CHANGED),
UNSUPPORTED_REDEFINITION_METHOD_DELETED(JVMTI_ERROR_UNSUPPORTED_REDEFINITION_METHOD_DELETED),
UNSUPPORTED_VERSION(JVMTI_ERROR_UNSUPPORTED_VERSION),
NAMES_DONT_MATCH(JVMTI_ERROR_NAMES_DONT_MATCH),
UNSUPPORTED_REDEFINITION_CLASS_MODIFIERS_CHANGED(JVMTI_ERROR_UNSUPPORTED_REDEFINITION_CLASS_MODIFIERS_CHANGED),
UNSUPPORTED_REDEFINITION_METHOD_MODIFIERS_CHANGED(JVMTI_ERROR_UNSUPPORTED_REDEFINITION_METHOD_MODIFIERS_CHANGED),
UNMODIFIABLE_CLASS(JVMTI_ERROR_UNMODIFIABLE_CLASS),
NOT_AVAILABLE(JVMTI_ERROR_NOT_AVAILABLE),
MUST_POSSESS_CAPABILITY(JVMTI_ERROR_MUST_POSSESS_CAPABILITY),
NULL_POINTER(JVMTI_ERROR_NULL_POINTER),
ABSENT_INFORMATION(JVMTI_ERROR_ABSENT_INFORMATION),
INVALID_EVENT_TYPE(JVMTI_ERROR_INVALID_EVENT_TYPE),
ILLEGAL_ARGUMENT(JVMTI_ERROR_ILLEGAL_ARGUMENT),
NATIVE_METHOD(JVMTI_ERROR_NATIVE_METHOD),
CLASS_LOADER_UNSUPPORTED(JVMTI_ERROR_CLASS_LOADER_UNSUPPORTED),
OUT_OF_MEMORY(JVMTI_ERROR_OUT_OF_MEMORY),
ACCESS_DENIED(JVMTI_ERROR_ACCESS_DENIED),
WRONG_PHASE(JVMTI_ERROR_WRONG_PHASE),
INTERNAL(JVMTI_ERROR_INTERNAL),
UNATTACHED_THREAD(JVMTI_ERROR_UNATTACHED_THREAD),
INVALID_ENVIRONMENT(JVMTI_ERROR_INVALID_ENVIRONMENT),
MAX(JVMTI_ERROR_MAX);
final int code;
private static final String JVMTI_ERROR_PREFIX = "JVMTI_ERROR_";
private static final JVMTIError[] VALUES = values();
/**
* Full names as byte arrays. Index is the error code value, NOT {code ordinal()}.
*/
static final byte[][] nameBytes = new byte[JVMTI_ERROR_MAX + 1][];
static {
for (int i = 0; i < VALUES.length; i++) {
JVMTIError error = VALUES[i];
String fullName = JVMTI_ERROR_PREFIX + error.name();
nameBytes[error.code] = fullName.getBytes();
}
}
private JVMTIError(int code) {
this.code = code;
}
public static String getName(int code) {
return VALUES[code].name();
}
}