jdk/src/share/classes/sun/tracing/dtrace/DTraceProvider.java
author sherman
Tue, 30 Aug 2011 11:53:11 -0700
changeset 10419 12c063b39232
parent 5506 202f599c92aa
child 14342 8435a30053c1
permissions -rw-r--r--
7084245: Update usages of InternalError to use exception chaining Summary: to use new InternalError constructor with cause chainning Reviewed-by: alanb, ksrini, xuelei, neugens Contributed-by: sebastian.sickelmann@gmx.de
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
406
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
     1
/*
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 491
diff changeset
     2
 * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved.
491
a394684ccfe6 6697875: Copyright headers need to be upgraded with GPL derivative
kamg
parents: 406
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
a394684ccfe6 6697875: Copyright headers need to be upgraded with GPL derivative
kamg
parents: 406
diff changeset
     4
 *
a394684ccfe6 6697875: Copyright headers need to be upgraded with GPL derivative
kamg
parents: 406
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
a394684ccfe6 6697875: Copyright headers need to be upgraded with GPL derivative
kamg
parents: 406
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 491
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
491
a394684ccfe6 6697875: Copyright headers need to be upgraded with GPL derivative
kamg
parents: 406
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 491
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
491
a394684ccfe6 6697875: Copyright headers need to be upgraded with GPL derivative
kamg
parents: 406
diff changeset
    10
 *
a394684ccfe6 6697875: Copyright headers need to be upgraded with GPL derivative
kamg
parents: 406
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
a394684ccfe6 6697875: Copyright headers need to be upgraded with GPL derivative
kamg
parents: 406
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
a394684ccfe6 6697875: Copyright headers need to be upgraded with GPL derivative
kamg
parents: 406
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
a394684ccfe6 6697875: Copyright headers need to be upgraded with GPL derivative
kamg
parents: 406
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
a394684ccfe6 6697875: Copyright headers need to be upgraded with GPL derivative
kamg
parents: 406
diff changeset
    15
 * accompanied this code).
a394684ccfe6 6697875: Copyright headers need to be upgraded with GPL derivative
kamg
parents: 406
diff changeset
    16
 *
a394684ccfe6 6697875: Copyright headers need to be upgraded with GPL derivative
kamg
parents: 406
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
a394684ccfe6 6697875: Copyright headers need to be upgraded with GPL derivative
kamg
parents: 406
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
a394684ccfe6 6697875: Copyright headers need to be upgraded with GPL derivative
kamg
parents: 406
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
a394684ccfe6 6697875: Copyright headers need to be upgraded with GPL derivative
kamg
parents: 406
diff changeset
    20
 *
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 491
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 491
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 491
diff changeset
    23
 * questions.
406
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    24
 */
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    25
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    26
package sun.tracing.dtrace;
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    27
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    28
import java.lang.reflect.Method;
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    29
import java.lang.reflect.Modifier;
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    30
import java.lang.reflect.Constructor;
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    31
import java.lang.reflect.InvocationHandler;
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    32
import java.lang.reflect.InvocationTargetException;
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    33
import java.lang.annotation.Annotation;
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    34
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    35
import sun.tracing.ProviderSkeleton;
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    36
import sun.tracing.ProbeSkeleton;
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    37
import com.sun.tracing.Provider;
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    38
import com.sun.tracing.ProbeName;
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    39
import com.sun.tracing.dtrace.Attributes;
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    40
import com.sun.tracing.dtrace.ModuleName;
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    41
import com.sun.tracing.dtrace.FunctionName;
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    42
import com.sun.tracing.dtrace.StabilityLevel;
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    43
import com.sun.tracing.dtrace.DependencyClass;
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    44
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    45
import sun.misc.ProxyGenerator;
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    46
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    47
class DTraceProvider extends ProviderSkeleton {
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    48
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    49
    private Activation activation;
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    50
    private Object proxy;
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    51
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    52
    // For proxy generation
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    53
    private final static Class[] constructorParams = { InvocationHandler.class };
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    54
    private final String proxyClassNamePrefix = "$DTraceTracingProxy";
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    55
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    56
    static final String DEFAULT_MODULE = "java_tracing";
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    57
    static final String DEFAULT_FUNCTION = "unspecified";
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    58
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    59
    private static long nextUniqueNumber = 0;
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    60
    private static synchronized long getUniqueNumber() {
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    61
        return nextUniqueNumber++;
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    62
    }
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    63
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    64
    protected ProbeSkeleton createProbe(Method m) {
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    65
        return new DTraceProbe(proxy, m);
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    66
    }
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    67
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    68
    DTraceProvider(Class<? extends Provider> type) {
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    69
        super(type);
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    70
    }
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    71
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    72
    void setProxy(Object p) {
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    73
        proxy = p;
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    74
    }
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    75
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    76
    void setActivation(Activation a) {
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    77
        this.activation = a;
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    78
    }
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    79
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    80
    public void dispose() {
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    81
        if (activation != null) {
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    82
            activation.disposeProvider(this);
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    83
            activation = null;
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    84
        }
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    85
        super.dispose();
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    86
    }
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    87
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    88
    /**
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    89
     * Magic routine which creates an implementation of the user's interface.
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    90
     *
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    91
     * This method uses the ProxyGenerator directly to bypass the
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    92
     * java.lang.reflect.proxy cache so that we get a unique class each
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    93
     * time it's called and can't accidently reuse a $Proxy class.
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    94
     *
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    95
     * @return an implementation of the user's interface
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    96
     */
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    97
    @SuppressWarnings("unchecked")
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    98
    public <T extends Provider> T newProxyInstance() {
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
    99
        /*
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   100
         * Choose a name for the proxy class to generate.
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   101
         */
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   102
        long num = getUniqueNumber();
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   103
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   104
        String proxyPkg = "";
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   105
        if (!Modifier.isPublic(providerType.getModifiers())) {
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   106
            String name = providerType.getName();
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   107
            int n = name.lastIndexOf('.');
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   108
            proxyPkg = ((n == -1) ? "" : name.substring(0, n + 1));
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   109
        }
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   110
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   111
        String proxyName = proxyPkg + proxyClassNamePrefix + num;
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   112
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   113
        /*
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   114
         * Generate the specified proxy class.
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   115
         */
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   116
        Class<?> proxyClass = null;
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   117
        byte[] proxyClassFile = ProxyGenerator.generateProxyClass(
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   118
                proxyName, new Class<?>[] { providerType });
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   119
        try {
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   120
            proxyClass = JVM.defineClass(
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   121
                providerType.getClassLoader(), proxyName,
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   122
                proxyClassFile, 0, proxyClassFile.length);
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   123
        } catch (ClassFormatError e) {
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   124
            /*
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   125
             * A ClassFormatError here means that (barring bugs in the
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   126
             * proxy class generation code) there was some other
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   127
             * invalid aspect of the arguments supplied to the proxy
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   128
             * class creation (such as virtual machine limitations
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   129
             * exceeded).
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   130
             */
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   131
            throw new IllegalArgumentException(e.toString());
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   132
        }
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   133
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   134
        /*
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   135
         * Invoke its constructor with the designated invocation handler.
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   136
         */
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   137
        try {
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   138
            Constructor cons = proxyClass.getConstructor(constructorParams);
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   139
            return (T)cons.newInstance(new Object[] { this });
10419
12c063b39232 7084245: Update usages of InternalError to use exception chaining
sherman
parents: 5506
diff changeset
   140
        } catch (ReflectiveOperationException e) {
12c063b39232 7084245: Update usages of InternalError to use exception chaining
sherman
parents: 5506
diff changeset
   141
            throw new InternalError(e.toString(), e);
406
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   142
        }
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   143
    }
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   144
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   145
    // In the normal case, the proxy object's method implementations will call
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   146
    // this method (it usually calls the ProviderSkeleton's version).  That
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   147
    // method uses the passed 'method' object to lookup the associated
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   148
    // 'ProbeSkeleton' and calls uncheckedTrigger() on that probe to cause the
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   149
    // probe to fire.  DTrace probes are different in that the proxy class's
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   150
    // methods are immediately overridden with native code to fire the probe
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   151
    // directly.  So this method should never get invoked.  We also wire up the
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   152
    // DTraceProbe.uncheckedTrigger() method to call the proxy method instead
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   153
    // of doing the work itself.
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   154
    public Object invoke(Object proxy, Method method, Object[] args) {
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   155
        if (method.getDeclaringClass() != providerType) {
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   156
            try {
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   157
                return method.invoke(this, args);
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   158
            } catch (IllegalAccessException e) {
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   159
                assert false;
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   160
            } catch (InvocationTargetException e) {
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   161
                assert false;
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   162
            }
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   163
        } else if (active) {
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   164
            assert false : "This method should have been overridden by the JVM";
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   165
        }
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   166
        return null;
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   167
    }
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   168
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   169
    public String getProviderName() {
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   170
        return super.getProviderName();
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   171
    }
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   172
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   173
    String getModuleName() {
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   174
        return getAnnotationString(
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   175
            providerType, ModuleName.class, DEFAULT_MODULE);
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   176
    }
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   177
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   178
    static String getProbeName(Method method) {
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   179
        return getAnnotationString(
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   180
            method, ProbeName.class, method.getName());
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   181
    }
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   182
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   183
    static String getFunctionName(Method method) {
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   184
        return getAnnotationString(
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   185
            method, FunctionName.class, DEFAULT_FUNCTION);
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   186
    }
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   187
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   188
    DTraceProbe[] getProbes() {
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   189
        return probes.values().toArray(new DTraceProbe[0]);
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   190
    }
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   191
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   192
    StabilityLevel getNameStabilityFor(Class<? extends Annotation> type) {
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   193
        Attributes attrs = (Attributes)getAnnotationValue(
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   194
            providerType, type, "value", null);
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   195
        if (attrs == null) {
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   196
            return StabilityLevel.PRIVATE;
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   197
        } else {
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   198
            return attrs.name();
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   199
        }
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   200
    }
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   201
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   202
    StabilityLevel getDataStabilityFor(Class<? extends Annotation> type) {
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   203
        Attributes attrs = (Attributes)getAnnotationValue(
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   204
            providerType, type, "value", null);
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   205
        if (attrs == null) {
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   206
            return StabilityLevel.PRIVATE;
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   207
        } else {
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   208
            return attrs.data();
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   209
        }
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   210
    }
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   211
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   212
    DependencyClass getDependencyClassFor(Class<? extends Annotation> type) {
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   213
        Attributes attrs = (Attributes)getAnnotationValue(
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   214
            providerType, type, "value", null);
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   215
        if (attrs == null) {
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   216
            return DependencyClass.UNKNOWN;
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   217
        } else {
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   218
            return attrs.dependency();
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   219
        }
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   220
    }
bde3a21bcab0 6690122: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
   221
}