--- a/langtools/src/share/classes/com/sun/tools/javac/code/Symtab.java Wed Jul 05 16:51:35 2017 +0200
+++ b/langtools/src/share/classes/com/sun/tools/javac/code/Symtab.java Mon May 04 21:04:04 2009 -0700
@@ -119,6 +119,8 @@
public final Type stringBuilderType;
public final Type cloneableType;
public final Type serializableType;
+ public final Type methodHandleType;
+ public final Type invokeDynamicType;
public final Type throwableType;
public final Type errorType;
public final Type illegalArgumentExceptionType;
@@ -289,6 +291,24 @@
}
}
+ public void synthesizeMHTypeIfMissing(final Type type) {
+ final Completer completer = type.tsym.completer;
+ if (completer != null) {
+ type.tsym.completer = new Completer() {
+ public void complete(Symbol sym) throws CompletionFailure {
+ try {
+ completer.complete(sym);
+ } catch (CompletionFailure e) {
+ sym.flags_field |= (PUBLIC | ABSTRACT);
+ ((ClassType) sym.type).supertype_field = objectType;
+ // do not bother to create MH.type if not visibly declared
+ // this sym just accumulates invoke(...) methods
+ }
+ }
+ };
+ }
+ }
+
public void synthesizeBoxTypeIfMissing(final Type type) {
ClassSymbol sym = reader.enterClass(boxedName[type.tag]);
final Completer completer = sym.completer;
@@ -405,6 +425,8 @@
cloneableType = enterClass("java.lang.Cloneable");
throwableType = enterClass("java.lang.Throwable");
serializableType = enterClass("java.io.Serializable");
+ methodHandleType = enterClass("java.dyn.MethodHandle");
+ invokeDynamicType = enterClass("java.dyn.InvokeDynamic");
errorType = enterClass("java.lang.Error");
illegalArgumentExceptionType = enterClass("java.lang.IllegalArgumentException");
exceptionType = enterClass("java.lang.Exception");
@@ -441,6 +463,8 @@
synthesizeEmptyInterfaceIfMissing(cloneableType);
synthesizeEmptyInterfaceIfMissing(serializableType);
+ synthesizeMHTypeIfMissing(methodHandleType);
+ synthesizeMHTypeIfMissing(invokeDynamicType);
synthesizeBoxTypeIfMissing(doubleType);
synthesizeBoxTypeIfMissing(floatType);