From 1e3a90329d5a70d4ba9f9a0cce56bb33baad5aea Mon Sep 17 00:00:00 2001 From: jfrijters Date: Mon, 27 Jun 2011 15:15:32 +0000 Subject: [PATCH] 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). --- ikvmstub/ikvmstub.cs | 3 +++ openjdk/allsources.lst | 3 ++- openjdk/map.xml | 6 ++++++ openjdk/response.txt | 1 + runtime/DynamicTypeWrapper.cs | 14 -------------- 5 files changed, 12 insertions(+), 15 deletions(-) diff --git a/ikvmstub/ikvmstub.cs b/ikvmstub/ikvmstub.cs index 63dd2692..395c3385 100644 --- a/ikvmstub/ikvmstub.cs +++ b/ikvmstub/ikvmstub.cs @@ -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)); diff --git a/openjdk/allsources.lst b/openjdk/allsources.lst index 6516b527..76bbb6db 100644 --- a/openjdk/allsources.lst +++ b/openjdk/allsources.lst @@ -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 diff --git a/openjdk/map.xml b/openjdk/map.xml index 27fdb0ed..c1adbc6d 100644 --- a/openjdk/map.xml +++ b/openjdk/map.xml @@ -1391,6 +1391,12 @@ + + + + + + diff --git a/openjdk/response.txt b/openjdk/response.txt index f879a355..db5577c8 100644 --- a/openjdk/response.txt +++ b/openjdk/response.txt @@ -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 diff --git a/runtime/DynamicTypeWrapper.cs b/runtime/DynamicTypeWrapper.cs index 4ad8503c..1ca771c6 100644 --- a/runtime/DynamicTypeWrapper.cs +++ b/runtime/DynamicTypeWrapper.cs @@ -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)