зеркало из https://github.com/mono/ikvm-fork.git
Include OpenJDK 7 java.lang.AutoCloseable interface and make it shadow System.IDisposable. Removed java.io.Closeable special casing to support IDisposable (now automatic because Closeable extends AutoCloseable).
This commit is contained in:
Родитель
524bf7c090
Коммит
1e3a90329d
|
@ -868,6 +868,9 @@ sealed class BootstrapBootstrapClassLoader : ClassLoaderWrapper
|
|||
SetRemappedType(JVM.Import(typeof(string)), new StubTypeWrapper(Modifiers.Public | Modifiers.Final, "java.lang.String", javaLangObject, true));
|
||||
SetRemappedType(JVM.Import(typeof(Exception)), new StubTypeWrapper(Modifiers.Public, "java.lang.Throwable", javaLangObject, true));
|
||||
SetRemappedType(JVM.Import(typeof(IComparable)), new StubTypeWrapper(Modifiers.Public | Modifiers.Abstract | Modifiers.Interface, "java.lang.Comparable", null, true));
|
||||
TypeWrapper tw = new StubTypeWrapper(Modifiers.Public | Modifiers.Abstract | Modifiers.Interface, "java.lang.AutoCloseable", null, true);
|
||||
tw.SetMethods(new MethodWrapper[] { new SimpleCallMethodWrapper(tw, "close", "()V", JVM.Import(typeof(IDisposable)).GetMethod("Dispose"), PrimitiveTypeWrapper.VOID, TypeWrapper.EmptyArray, Modifiers.Public | Modifiers.Abstract, MemberFlags.None, SimpleOpCode.Callvirt, SimpleOpCode.Callvirt) });
|
||||
SetRemappedType(JVM.Import(typeof(IDisposable)), tw);
|
||||
|
||||
RegisterInitiatingLoader(new StubTypeWrapper(Modifiers.Public, "java.lang.Enum", javaLangObject, false));
|
||||
RegisterInitiatingLoader(new StubTypeWrapper(Modifiers.Public | Modifiers.Abstract | Modifiers.Interface, "java.lang.annotation.Annotation", null, false));
|
||||
|
|
|
@ -8435,7 +8435,7 @@ sun/security/jgss/wrapper/SunNativeProvider.java
|
|||
@OPENJDK6@/jdk/src/share/classes/java/io/CharArrayReader.java
|
||||
@OPENJDK6@/jdk/src/share/classes/java/io/CharArrayWriter.java
|
||||
@OPENJDK6@/jdk/src/share/classes/java/io/CharConversionException.java
|
||||
@OPENJDK6@/jdk/src/share/classes/java/io/Closeable.java
|
||||
@OPENJDK7@/jdk/src/share/classes/java/io/Closeable.java
|
||||
@OPENJDK6@/jdk/src/share/classes/java/io/Console.java
|
||||
@OPENJDK6@/jdk/src/share/classes/java/io/DataInput.java
|
||||
@OPENJDK6@/jdk/src/share/classes/java/io/DataInputStream.java
|
||||
|
@ -8520,6 +8520,7 @@ sun/security/jgss/wrapper/SunNativeProvider.java
|
|||
@OPENJDK6@/jdk/src/share/classes/java/lang/ArrayStoreException.java
|
||||
@OPENJDK6@/jdk/src/share/classes/java/lang/AssertionError.java
|
||||
@OPENJDK6@/jdk/src/share/classes/java/lang/AssertionStatusDirectives.java
|
||||
@OPENJDK7@/jdk/src/share/classes/java/lang/AutoCloseable.java
|
||||
@OPENJDK6@/jdk/src/share/classes/java/lang/Boolean.java
|
||||
@OPENJDK6@/jdk/src/share/classes/java/lang/Byte.java
|
||||
@OPENJDK6@/jdk/src/share/classes/java/lang/Character.java
|
||||
|
|
|
@ -1391,6 +1391,12 @@
|
|||
<override name="CompareTo" />
|
||||
</method>
|
||||
</class>
|
||||
<class name="java.lang.AutoCloseable" shadows="System.IDisposable" modifiers="public abstract interface">
|
||||
<method name="close" sig="()V" modifiers="public abstract">
|
||||
<throws class="java.lang.Exception" />
|
||||
<override name="Dispose" />
|
||||
</method>
|
||||
</class>
|
||||
<!-- Here we are adding/replacing methods to existing classes -->
|
||||
<class name="java.lang.Class">
|
||||
<implements class="cli.System.Runtime.Serialization.ISerializable" />
|
||||
|
|
|
@ -74,6 +74,7 @@ assembly.class
|
|||
@OPENJDK6@/jdk/src/share/classes/java/beans/PropertyChangeListenerProxy.class
|
||||
@OPENJDK6@/jdk/src/share/classes/java/beans/PropertyChangeSupport*.class
|
||||
@OPENJDK6@/jdk/src/share/classes/java/io/*.class
|
||||
@OPENJDK7@/jdk/src/share/classes/java/io/*.class
|
||||
@OPENJDK6@/jdk/src/share/classes/java/lang/*.class
|
||||
@OPENJDK7@/jdk/src/share/classes/java/lang/*.class
|
||||
@OPENJDK6@/jdk/src/share/classes/java/lang/annotation/*.class
|
||||
|
|
|
@ -4988,20 +4988,6 @@ namespace IKVM.Internal
|
|||
ilgen.DoEmit();
|
||||
}
|
||||
}
|
||||
else if (iface.Name == "java.io.Closeable"
|
||||
&& !wrapper.ImplementsInterface(ClassLoaderWrapper.GetWrapperFromType(JVM.Import(typeof(IDisposable)))))
|
||||
{
|
||||
typeBuilder.AddInterfaceImplementation(JVM.Import(typeof(IDisposable)));
|
||||
MethodBuilder mb = typeBuilder.DefineMethod("__<>Dispose", MethodAttributes.Private | MethodAttributes.Virtual | MethodAttributes.NewSlot | MethodAttributes.Final | MethodAttributes.SpecialName, Types.Void, Type.EmptyTypes);
|
||||
typeBuilder.DefineMethodOverride(mb, JVM.Import(typeof(IDisposable)).GetMethod("Dispose"));
|
||||
CodeEmitter ilgen = CodeEmitter.Create(mb);
|
||||
ilgen.Emit(OpCodes.Ldarg_0);
|
||||
MethodWrapper mw = iface.GetMethodWrapper("close", "()V", false);
|
||||
mw.Link();
|
||||
mw.EmitCallvirt(ilgen);
|
||||
ilgen.Emit(OpCodes.Ret);
|
||||
ilgen.DoEmit();
|
||||
}
|
||||
}
|
||||
// if we implement a ghost interface, add an implicit conversion to the ghost reference value type
|
||||
if (iface.IsGhost && wrapper.IsPublic)
|
||||
|
|
Загрузка…
Ссылка в новой задаче