diff -r 0cd5e2ca53dd -r 23d427d8a1ff src/jdk.compiler/share/classes/com/sun/tools/javah/JNI.java
--- a/src/jdk.compiler/share/classes/com/sun/tools/javah/JNI.java Wed Dec 13 14:23:34 2017 -0800
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,185 +0,0 @@
-/*
- * Copyright (c) 2002, 2010, 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. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * 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.tools.javah;
-
-import java.io.OutputStream;
-import java.io.PrintWriter;
-import java.util.ArrayList;
-import java.util.List;
-import javax.lang.model.element.Element;
-import javax.lang.model.element.ExecutableElement;
-import javax.lang.model.element.Modifier;
-import javax.lang.model.element.TypeElement;
-import javax.lang.model.element.VariableElement;
-import javax.lang.model.type.ArrayType;
-import javax.lang.model.type.TypeMirror;
-import javax.lang.model.util.ElementFilter;
-
-
-/**
- * Header file generator for JNI.
- *
- *
This is NOT part of any supported API.
- * If you write code that depends on this, you do so at your own
- * risk. This code and its internal interfaces are subject to change
- * or deletion without notice.
- *
- * @author Sucheta Dambalkar(Revised)
- */
-public class JNI extends Gen {
- JNI(Util util) {
- super(util);
- }
-
- public String getIncludes() {
- return "#include ";
- }
-
- public void write(OutputStream o, TypeElement clazz) throws Util.Exit {
- try {
- String cname = mangler.mangle(clazz.getQualifiedName(), Mangle.Type.CLASS);
- PrintWriter pw = wrapWriter(o);
- pw.println(guardBegin(cname));
- pw.println(cppGuardBegin());
-
- /* Write statics. */
- List classfields = getAllFields(clazz);
-
- for (VariableElement v: classfields) {
- if (!v.getModifiers().contains(Modifier.STATIC))
- continue;
- String s = null;
- s = defineForStatic(clazz, v);
- if (s != null) {
- pw.println(s);
- }
- }
-
- /* Write methods. */
- List classmethods = ElementFilter.methodsIn(clazz.getEnclosedElements());
- for (ExecutableElement md: classmethods) {
- if(md.getModifiers().contains(Modifier.NATIVE)){
- TypeMirror mtr = types.erasure(md.getReturnType());
- String sig = signature(md);
- TypeSignature newtypesig = new TypeSignature(elems);
- CharSequence methodName = md.getSimpleName();
- boolean longName = false;
- for (ExecutableElement md2: classmethods) {
- if ((md2 != md)
- && (methodName.equals(md2.getSimpleName()))
- && (md2.getModifiers().contains(Modifier.NATIVE)))
- longName = true;
-
- }
- pw.println("/*");
- pw.println(" * Class: " + cname);
- pw.println(" * Method: " +
- mangler.mangle(methodName, Mangle.Type.FIELDSTUB));
- pw.println(" * Signature: " + newtypesig.getTypeSignature(sig, mtr));
- pw.println(" */");
- pw.println("JNIEXPORT " + jniType(mtr) +
- " JNICALL " +
- mangler.mangleMethod(md, clazz,
- (longName) ?
- Mangle.Type.METHOD_JNI_LONG :
- Mangle.Type.METHOD_JNI_SHORT));
- pw.print(" (JNIEnv *, ");
- List extends VariableElement> paramargs = md.getParameters();
- List args = new ArrayList<>();
- for (VariableElement p: paramargs) {
- args.add(types.erasure(p.asType()));
- }
- if (md.getModifiers().contains(Modifier.STATIC))
- pw.print("jclass");
- else
- pw.print("jobject");
-
- for (TypeMirror arg: args) {
- pw.print(", ");
- pw.print(jniType(arg));
- }
- pw.println(");" + lineSep);
- }
- }
- pw.println(cppGuardEnd());
- pw.println(guardEnd(cname));
- } catch (TypeSignature.SignatureException e) {
- util.error("jni.sigerror", e.getMessage());
- }
- }
-
-
- protected final String jniType(TypeMirror t) throws Util.Exit {
- TypeElement throwable = elems.getTypeElement("java.lang.Throwable");
- TypeElement jClass = elems.getTypeElement("java.lang.Class");
- TypeElement jString = elems.getTypeElement("java.lang.String");
- Element tclassDoc = types.asElement(t);
-
-
- switch (t.getKind()) {
- case ARRAY: {
- TypeMirror ct = ((ArrayType) t).getComponentType();
- switch (ct.getKind()) {
- case BOOLEAN: return "jbooleanArray";
- case BYTE: return "jbyteArray";
- case CHAR: return "jcharArray";
- case SHORT: return "jshortArray";
- case INT: return "jintArray";
- case LONG: return "jlongArray";
- case FLOAT: return "jfloatArray";
- case DOUBLE: return "jdoubleArray";
- case ARRAY:
- case DECLARED: return "jobjectArray";
- default: throw new Error(ct.toString());
- }
- }
-
- case VOID: return "void";
- case BOOLEAN: return "jboolean";
- case BYTE: return "jbyte";
- case CHAR: return "jchar";
- case SHORT: return "jshort";
- case INT: return "jint";
- case LONG: return "jlong";
- case FLOAT: return "jfloat";
- case DOUBLE: return "jdouble";
-
- case DECLARED: {
- if (tclassDoc.equals(jString))
- return "jstring";
- else if (types.isAssignable(t, throwable.asType()))
- return "jthrowable";
- else if (types.isAssignable(t, jClass.asType()))
- return "jclass";
- else
- return "jobject";
- }
- }
-
- util.bug("jni.unknown.type");
- return null; /* dead code. */
- }
-}