diff --git a/build-tools/Java.Interop.BootstrapTasks/Java.Interop.BootstrapTasks/JdkInfo.cs b/build-tools/Java.Interop.BootstrapTasks/Java.Interop.BootstrapTasks/JdkInfo.cs index 4022755b7..2abf3a6a4 100644 --- a/build-tools/Java.Interop.BootstrapTasks/Java.Interop.BootstrapTasks/JdkInfo.cs +++ b/build-tools/Java.Interop.BootstrapTasks/Java.Interop.BootstrapTasks/JdkInfo.cs @@ -61,11 +61,11 @@ public override bool Execute () JavaHomePath = jdk.HomePath; Directory.CreateDirectory (Path.GetDirectoryName (PropertyFile.ItemSpec)); - WritePropertyFile (jdk.JavaPath, jdk.JarPath, jdk.JavacPath, jdk.JdkJvmPath, rtJarPath, jdk.IncludePath); + WritePropertyFile (jdk, rtJarPath); if (MakeFragmentFile != null) { Directory.CreateDirectory (Path.GetDirectoryName (MakeFragmentFile.ItemSpec)); - WriteMakeFragmentFile (jdk.JavaPath, jdk.JarPath, jdk.JavacPath, jdk.JdkJvmPath, rtJarPath, jdk.IncludePath); + WriteMakeFragmentFile (jdk, rtJarPath); } return !Log.HasLoggedErrors; @@ -117,8 +117,14 @@ Action CreateLogger () return logger; } - void WritePropertyFile (string javaPath, string jarPath, string javacPath, string jdkJvmPath, string rtJarPath, IEnumerable includes) + void WritePropertyFile (XATInfo jdk, string rtJarPath) { + var jarPath = jdk.JarPath; + var javacPath = jdk.JavacPath; + var javaPath = jdk.JavaPath; + var jdkJvmPath = jdk.JdkJvmPath; + var includes = jdk.IncludePath; + var msbuild = XNamespace.Get ("http://schemas.microsoft.com/developer/msbuild/2003"); var jdkJvmP = $"JdkJvm{PropertyNameModifier}Path"; var project = new XElement (msbuild + "Project", @@ -129,6 +135,9 @@ void WritePropertyFile (string javaPath, string jarPath, string javacPath, strin new XElement (msbuild + "ItemGroup", includes.Select (i => new XElement (msbuild + $"Jdk{PropertyNameModifier}IncludePath", new XAttribute ("Include", i)))))), new XElement (msbuild + "PropertyGroup", + CreateProperty (msbuild, $"JavaApi{PropertyNameModifier}DefineConstants", + string.Join (";", Enumerable.Range (11, jdk.Version.Major-11+1).Select (v => $"JAVA_API_{v}"))), + CreateProperty (msbuild, $"Java{PropertyNameModifier}MajorVersion", jdk.Version.Major.ToString ()), CreateProperty (msbuild, $"Java{PropertyNameModifier}SdkDirectory", JavaHomePath), CreateProperty (msbuild, $"Java{PropertyNameModifier}Path", javaPath), CreateProperty (msbuild, $"JavaC{PropertyNameModifier}Path", javacPath), @@ -148,8 +157,15 @@ XElement CreateProperty (XNamespace msbuild, string propertyName, string propert new XAttribute ("Condition", $" '$({propertyName})' == '' "), propertyValue); } - void WriteMakeFragmentFile (string javaPath, string jarPath, string javacPath, string jdkJvmPath, string rtJarPath, IEnumerable includes) + + void WriteMakeFragmentFile (XATInfo jdk, string rtJarPath) { + var jarPath = jdk.JarPath; + var javacPath = jdk.JavacPath; + var javaPath = jdk.JavaPath; + var jdkJvmPath = jdk.JdkJvmPath; + var includes = jdk.IncludePath; + using (var o = new StreamWriter (MakeFragmentFile.ItemSpec)) { o.WriteLine ($"export JI_JAR_PATH := {jarPath}"); o.WriteLine ($"export JI_JAVA_PATH := {javaPath}"); diff --git a/build-tools/scripts/Prepare.targets b/build-tools/scripts/Prepare.targets index cc0b095bf..2618d81e3 100644 --- a/build-tools/scripts/Prepare.targets +++ b/build-tools/scripts/Prepare.targets @@ -16,6 +16,7 @@ <_MaxJdk>$(MaxJdkVersion) <_MaxJdk Condition=" '$(_MaxJdk)' == '' ">$(JI_MAX_JDK) $(JAVA_HOME_11_X64) + $(JAVA_HOME_17_X64) $(UtilityOutputFullPath)generator.dll + $(JavaApiDefineConstants);$(DefineConstants); diff --git a/src/Java.Base/Java.Lang/Class.cs b/src/Java.Base/Java.Lang/Class.cs new file mode 100644 index 000000000..ef3a2f7dc --- /dev/null +++ b/src/Java.Base/Java.Lang/Class.cs @@ -0,0 +1,14 @@ +using System; +using Java.Interop; + +#if JAVA_API_17 +using Java.Lang.Invoke; +using Java.Lang.Constants; + +namespace Java.Lang { + public partial class Class { + + } +} + +#endif // JAVA_API_17 diff --git a/src/Java.Base/Java.Lang/Double.cs b/src/Java.Base/Java.Lang/Double.cs new file mode 100644 index 000000000..6ad5cac72 --- /dev/null +++ b/src/Java.Base/Java.Lang/Double.cs @@ -0,0 +1,16 @@ +using System; +using Java.Interop; + +#if JAVA_API_17 +using Java.Lang.Invoke; +using Java.Lang.Constants; + +namespace Java.Lang { + public partial class Double { + + Java.Lang.Object? IConstantDesc.ResolveConstantDesc (MethodHandles.Lookup? lookup) => + ResolveConstantDesc (lookup); + } +} + +#endif // JAVA_API_17 diff --git a/src/Java.Base/Java.Lang/Float.cs b/src/Java.Base/Java.Lang/Float.cs new file mode 100644 index 000000000..1c9be19a9 --- /dev/null +++ b/src/Java.Base/Java.Lang/Float.cs @@ -0,0 +1,16 @@ +using System; +using Java.Interop; + +#if JAVA_API_17 +using Java.Lang.Invoke; +using Java.Lang.Constants; + +namespace Java.Lang { + public partial class Float { + + Java.Lang.Object? IConstantDesc.ResolveConstantDesc (MethodHandles.Lookup? lookup) => + ResolveConstantDesc (lookup); + } +} + +#endif // JAVA_API_17 diff --git a/src/Java.Base/Java.Lang/Integer.cs b/src/Java.Base/Java.Lang/Integer.cs new file mode 100644 index 000000000..4e0906a51 --- /dev/null +++ b/src/Java.Base/Java.Lang/Integer.cs @@ -0,0 +1,16 @@ +using System; +using Java.Interop; + +#if JAVA_API_17 +using Java.Lang.Invoke; +using Java.Lang.Constants; + +namespace Java.Lang { + public partial class Integer { + + Java.Lang.Object? IConstantDesc.ResolveConstantDesc (MethodHandles.Lookup? lookup) => + ResolveConstantDesc (lookup); + } +} + +#endif // JAVA_API_17 diff --git a/src/Java.Base/Java.Lang/Long.cs b/src/Java.Base/Java.Lang/Long.cs new file mode 100644 index 000000000..a83d030a9 --- /dev/null +++ b/src/Java.Base/Java.Lang/Long.cs @@ -0,0 +1,16 @@ +using System; +using Java.Interop; + +#if JAVA_API_17 +using Java.Lang.Invoke; +using Java.Lang.Constants; + +namespace Java.Lang { + public partial class Long { + + Java.Lang.Object? IConstantDesc.ResolveConstantDesc (MethodHandles.Lookup? lookup) => + ResolveConstantDesc (lookup); + } +} + +#endif // JAVA_API_17 diff --git a/src/Java.Base/Java.Lang/String.cs b/src/Java.Base/Java.Lang/String.cs index bc580cfb4..22ccee3ff 100644 --- a/src/Java.Base/Java.Lang/String.cs +++ b/src/Java.Base/Java.Lang/String.cs @@ -3,7 +3,27 @@ using System.Collections.Generic; using Java.Interop; +#if JAVA_API_17 +using Java.Lang.Invoke; +using Java.Lang.Constants; +#endif // JAVA_API_17 + namespace Java.Lang { public partial class String : IEnumerable, IEnumerable { + +#if JAVA_API_17 + unsafe Java.Lang.Object? IConstantDesc.ResolveConstantDesc (MethodHandles.Lookup? lookup) + { + const string __id = "resolveConstantDesc.(Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/String;"; + try { + JniArgumentValue* __args = stackalloc JniArgumentValue [1]; + __args [0] = new JniArgumentValue (lookup); + var __rm = _members.InstanceMethods.InvokeAbstractObjectMethod (__id, this, __args); + return JniEnvironment.Runtime.ValueManager.GetValue(ref __rm, JniObjectReferenceOptions.CopyAndDispose); + } finally { + global::System.GC.KeepAlive (lookup); + } + } +#endif // JAVA_API_17 } } diff --git a/src/Java.Base/Transforms/Metadata.xml b/src/Java.Base/Transforms/Metadata.xml index ced7d892c..3c140ca5a 100644 --- a/src/Java.Base/Transforms/Metadata.xml +++ b/src/Java.Base/Transforms/Metadata.xml @@ -6,6 +6,8 @@ + + JavaFinalize @@ -62,4 +64,21 @@ java.lang.Object + + + + override + reabstract + IAnnotatedElement + reabstract + IAnnotatedElement + reabstract + IAnnotatedElement