langtools/src/share/classes/com/sun/tools/javah/JNI.java
author briangoetz
Wed, 18 Dec 2013 16:05:18 -0500
changeset 22163 3651128c74eb
parent 7681 1f0819a3341f
permissions -rw-r--r--
8030244: Update langtools to use Diamond Reviewed-by: darcy
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
10
06bc494ca11e Initial load
duke
parents:
diff changeset
     1
/*
7681
1f0819a3341f 6962318: Update copyright year
ohair
parents: 6930
diff changeset
     2
 * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved.
10
06bc494ca11e Initial load
duke
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
06bc494ca11e Initial load
duke
parents:
diff changeset
     4
 *
06bc494ca11e Initial load
duke
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
06bc494ca11e Initial load
duke
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
5520
86e4b9a9da40 6943119: Rebrand source copyright notices
ohair
parents: 3996
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
10
06bc494ca11e Initial load
duke
parents:
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
5520
86e4b9a9da40 6943119: Rebrand source copyright notices
ohair
parents: 3996
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
10
06bc494ca11e Initial load
duke
parents:
diff changeset
    10
 *
06bc494ca11e Initial load
duke
parents:
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
06bc494ca11e Initial load
duke
parents:
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
06bc494ca11e Initial load
duke
parents:
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
06bc494ca11e Initial load
duke
parents:
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
06bc494ca11e Initial load
duke
parents:
diff changeset
    15
 * accompanied this code).
06bc494ca11e Initial load
duke
parents:
diff changeset
    16
 *
06bc494ca11e Initial load
duke
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
06bc494ca11e Initial load
duke
parents:
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
06bc494ca11e Initial load
duke
parents:
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
06bc494ca11e Initial load
duke
parents:
diff changeset
    20
 *
5520
86e4b9a9da40 6943119: Rebrand source copyright notices
ohair
parents: 3996
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
86e4b9a9da40 6943119: Rebrand source copyright notices
ohair
parents: 3996
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
86e4b9a9da40 6943119: Rebrand source copyright notices
ohair
parents: 3996
diff changeset
    23
 * questions.
10
06bc494ca11e Initial load
duke
parents:
diff changeset
    24
 */
06bc494ca11e Initial load
duke
parents:
diff changeset
    25
06bc494ca11e Initial load
duke
parents:
diff changeset
    26
package com.sun.tools.javah;
06bc494ca11e Initial load
duke
parents:
diff changeset
    27
06bc494ca11e Initial load
duke
parents:
diff changeset
    28
import java.io.OutputStream;
06bc494ca11e Initial load
duke
parents:
diff changeset
    29
import java.io.PrintWriter;
3996
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
    30
import java.util.ArrayList;
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
    31
import java.util.List;
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
    32
import javax.lang.model.element.Element;
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
    33
import javax.lang.model.element.ExecutableElement;
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
    34
import javax.lang.model.element.Modifier;
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
    35
import javax.lang.model.element.TypeElement;
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
    36
import javax.lang.model.element.VariableElement;
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
    37
import javax.lang.model.type.ArrayType;
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
    38
import javax.lang.model.type.TypeMirror;
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
    39
import javax.lang.model.util.ElementFilter;
10
06bc494ca11e Initial load
duke
parents:
diff changeset
    40
06bc494ca11e Initial load
duke
parents:
diff changeset
    41
06bc494ca11e Initial load
duke
parents:
diff changeset
    42
/**
06bc494ca11e Initial load
duke
parents:
diff changeset
    43
 * Header file generator for JNI.
06bc494ca11e Initial load
duke
parents:
diff changeset
    44
 *
5847
1908176fd6e3 6944312: Potential rebranding issues in openjdk/langtools repository sources
jjg
parents: 5520
diff changeset
    45
 * <p><b>This is NOT part of any supported API.
3996
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
    46
 * If you write code that depends on this, you do so at your own
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
    47
 * risk.  This code and its internal interfaces are subject to change
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
    48
 * or deletion without notice.</b></p>
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
    49
 *
10
06bc494ca11e Initial load
duke
parents:
diff changeset
    50
 * @author  Sucheta Dambalkar(Revised)
06bc494ca11e Initial load
duke
parents:
diff changeset
    51
 */
06bc494ca11e Initial load
duke
parents:
diff changeset
    52
public class JNI extends Gen {
3996
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
    53
    JNI(Util util) {
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
    54
        super(util);
10
06bc494ca11e Initial load
duke
parents:
diff changeset
    55
    }
06bc494ca11e Initial load
duke
parents:
diff changeset
    56
06bc494ca11e Initial load
duke
parents:
diff changeset
    57
    public String getIncludes() {
06bc494ca11e Initial load
duke
parents:
diff changeset
    58
        return "#include <jni.h>";
06bc494ca11e Initial load
duke
parents:
diff changeset
    59
    }
06bc494ca11e Initial load
duke
parents:
diff changeset
    60
3996
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
    61
    public void write(OutputStream o, TypeElement clazz) throws Util.Exit {
6930
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
    62
        try {
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
    63
            String cname = mangler.mangle(clazz.getQualifiedName(), Mangle.Type.CLASS);
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
    64
            PrintWriter pw = wrapWriter(o);
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
    65
            pw.println(guardBegin(cname));
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
    66
            pw.println(cppGuardBegin());
10
06bc494ca11e Initial load
duke
parents:
diff changeset
    67
6930
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
    68
            /* Write statics. */
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
    69
            List<VariableElement> classfields = getAllFields(clazz);
10
06bc494ca11e Initial load
duke
parents:
diff changeset
    70
6930
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
    71
            for (VariableElement v: classfields) {
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
    72
                if (!v.getModifiers().contains(Modifier.STATIC))
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
    73
                    continue;
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
    74
                String s = null;
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
    75
                s = defineForStatic(clazz, v);
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
    76
                if (s != null) {
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
    77
                    pw.println(s);
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
    78
                }
10
06bc494ca11e Initial load
duke
parents:
diff changeset
    79
            }
06bc494ca11e Initial load
duke
parents:
diff changeset
    80
6930
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
    81
            /* Write methods. */
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
    82
            List<ExecutableElement> classmethods = ElementFilter.methodsIn(clazz.getEnclosedElements());
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
    83
            for (ExecutableElement md: classmethods) {
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
    84
                if(md.getModifiers().contains(Modifier.NATIVE)){
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
    85
                    TypeMirror mtr = types.erasure(md.getReturnType());
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
    86
                    String sig = signature(md);
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
    87
                    TypeSignature newtypesig = new TypeSignature(elems);
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
    88
                    CharSequence methodName = md.getSimpleName();
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
    89
                    boolean longName = false;
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
    90
                    for (ExecutableElement md2: classmethods) {
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
    91
                        if ((md2 != md)
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
    92
                            && (methodName.equals(md2.getSimpleName()))
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
    93
                            && (md2.getModifiers().contains(Modifier.NATIVE)))
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
    94
                            longName = true;
10
06bc494ca11e Initial load
duke
parents:
diff changeset
    95
6930
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
    96
                    }
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
    97
                    pw.println("/*");
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
    98
                    pw.println(" * Class:     " + cname);
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
    99
                    pw.println(" * Method:    " +
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
   100
                               mangler.mangle(methodName, Mangle.Type.FIELDSTUB));
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
   101
                    pw.println(" * Signature: " + newtypesig.getTypeSignature(sig, mtr));
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
   102
                    pw.println(" */");
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
   103
                    pw.println("JNIEXPORT " + jniType(mtr) +
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
   104
                               " JNICALL " +
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
   105
                               mangler.mangleMethod(md, clazz,
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
   106
                                                   (longName) ?
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
   107
                                                   Mangle.Type.METHOD_JNI_LONG :
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
   108
                                                   Mangle.Type.METHOD_JNI_SHORT));
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
   109
                    pw.print("  (JNIEnv *, ");
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
   110
                    List<? extends VariableElement> paramargs = md.getParameters();
22163
3651128c74eb 8030244: Update langtools to use Diamond
briangoetz
parents: 7681
diff changeset
   111
                    List<TypeMirror> args = new ArrayList<>();
6930
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
   112
                    for (VariableElement p: paramargs) {
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
   113
                        args.add(types.erasure(p.asType()));
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
   114
                    }
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
   115
                    if (md.getModifiers().contains(Modifier.STATIC))
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
   116
                        pw.print("jclass");
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
   117
                    else
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
   118
                        pw.print("jobject");
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
   119
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
   120
                    for (TypeMirror arg: args) {
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
   121
                        pw.print(", ");
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
   122
                        pw.print(jniType(arg));
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
   123
                    }
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
   124
                    pw.println(");" + lineSep);
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   125
                }
06bc494ca11e Initial load
duke
parents:
diff changeset
   126
            }
6930
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
   127
            pw.println(cppGuardEnd());
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
   128
            pw.println(guardEnd(cname));
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
   129
        } catch (TypeSignature.SignatureException e) {
b6fea484cbb2 4942232: missing param class processes without error
jjg
parents: 5847
diff changeset
   130
            util.error("jni.sigerror", e.getMessage());
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   131
        }
06bc494ca11e Initial load
duke
parents:
diff changeset
   132
    }
06bc494ca11e Initial load
duke
parents:
diff changeset
   133
06bc494ca11e Initial load
duke
parents:
diff changeset
   134
3996
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
   135
    protected final String jniType(TypeMirror t) throws Util.Exit {
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
   136
        TypeElement throwable = elems.getTypeElement("java.lang.Throwable");
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
   137
        TypeElement jClass = elems.getTypeElement("java.lang.Class");
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
   138
        TypeElement jString = elems.getTypeElement("java.lang.String");
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
   139
        Element tclassDoc = types.asElement(t);
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   140
06bc494ca11e Initial load
duke
parents:
diff changeset
   141
3996
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
   142
        switch (t.getKind()) {
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
   143
            case ARRAY: {
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
   144
                TypeMirror ct = ((ArrayType) t).getComponentType();
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
   145
                switch (ct.getKind()) {
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
   146
                    case BOOLEAN:  return "jbooleanArray";
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
   147
                    case BYTE:     return "jbyteArray";
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
   148
                    case CHAR:     return "jcharArray";
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
   149
                    case SHORT:    return "jshortArray";
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
   150
                    case INT:      return "jintArray";
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
   151
                    case LONG:     return "jlongArray";
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
   152
                    case FLOAT:    return "jfloatArray";
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
   153
                    case DOUBLE:   return "jdoubleArray";
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
   154
                    case ARRAY:
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
   155
                    case DECLARED: return "jobjectArray";
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
   156
                    default: throw new Error(ct.toString());
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
   157
                }
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
   158
            }
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
   159
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
   160
            case VOID:     return "void";
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
   161
            case BOOLEAN:  return "jboolean";
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
   162
            case BYTE:     return "jbyte";
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
   163
            case CHAR:     return "jchar";
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
   164
            case SHORT:    return "jshort";
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
   165
            case INT:      return "jint";
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
   166
            case LONG:     return "jlong";
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
   167
            case FLOAT:    return "jfloat";
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
   168
            case DOUBLE:   return "jdouble";
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
   169
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
   170
            case DECLARED: {
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
   171
                if (tclassDoc.equals(jString))
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
   172
                    return "jstring";
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
   173
                else if (types.isAssignable(t, throwable.asType()))
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
   174
                    return "jthrowable";
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
   175
                else if (types.isAssignable(t, jClass.asType()))
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
   176
                    return "jclass";
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
   177
                else
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
   178
                    return "jobject";
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   179
            }
06bc494ca11e Initial load
duke
parents:
diff changeset
   180
        }
3996
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
   181
dc676a9093b3 6572945: javah should be written as an annotation processor, not a doclet
jjg
parents: 10
diff changeset
   182
        util.bug("jni.unknown.type");
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   183
        return null; /* dead code. */
06bc494ca11e Initial load
duke
parents:
diff changeset
   184
    }
06bc494ca11e Initial load
duke
parents:
diff changeset
   185
}