Skip to content

Commit 4f06201

Browse files
authored
[build] Prefer JDK-17 (#1291)
Context: dotnet/android@df68c20 Context: 7a32bb9 Context: https://bugs.openjdk.org/browse/JDK-8223291 dotnet/android requires JDK-17, as of dotnet/android@df68c208. Update the dotnet/java-interop build to prefer JDK-17, for consistency. Additionally, *replace* use of `javac -source X -target X` with `javac --release X`, as this removes a build warning: EXEC : warning : [options] system modules path not set in conjunction with -source 11 Unfortunately, using a new JDK version invariably breaks the `Xamarin.Android.Tools.Bytecode-Tests` -- despite `javac` targeting the same JDK version! -- so update the tests accordingly. (What is this new `Enum.$values()` method? Why reorder `JavaType$1` and `JavaType$ASC`?) Finally, update the expected XML output in `tests/java-source-utils`. JDK-8223291, which was a change in XML output between JDK-8 and JDK-9, which we worked around in 7a32bb9, has been fixed. The fix apparently means that XML output now matches JDK-8 (yay?), but also means XML output differs from JDK-11 (boo!). Unfortunately, this means that `tests/java-source-utils` tests will now only pass on JDK 14+, i.e. JDK-17+…
1 parent b966c15 commit 4f06201

File tree

11 files changed

+104
-238
lines changed

11 files changed

+104
-238
lines changed

Directory.Build.props

+1-1
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@
6262
<JavacSourceVersion Condition=" '$(JavacSourceVersion)' == '' ">11</JavacSourceVersion>
6363
<JavacTargetVersion Condition=" '$(JavacTargetVersion)' == '' ">11</JavacTargetVersion>
6464
<_BootClassPath Condition=" '$(JreRtJarPath)' != '' ">-bootclasspath "$(JreRtJarPath)"</_BootClassPath>
65-
<_JavacSourceOptions>-source $(JavacSourceVersion) -target $(JavacTargetVersion) $(_BootClassPath)</_JavacSourceOptions>
65+
<_JavacSourceOptions>--release $(JavacTargetVersion) $(_BootClassPath)</_JavacSourceOptions>
6666
</PropertyGroup>
6767
<PropertyGroup>
6868
<XamarinAndroidToolsFullPath>$([System.IO.Path]::GetFullPath ('$(XamarinAndroidToolsDirectory)'))</XamarinAndroidToolsFullPath>

build-tools/scripts/Prepare.targets

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@
1515
<PropertyGroup>
1616
<_MaxJdk>$(MaxJdkVersion)</_MaxJdk>
1717
<_MaxJdk Condition=" '$(_MaxJdk)' == '' ">$(JI_MAX_JDK)</_MaxJdk>
18-
<JdksRoot Condition=" '$(JdksRoot)' == '' And '$(JAVA_HOME_11_X64)' != '' And Exists($(JAVA_HOME_11_X64)) ">$(JAVA_HOME_11_X64)</JdksRoot>
1918
<JdksRoot Condition=" '$(JdksRoot)' == '' And '$(JAVA_HOME_17_X64)' != '' And Exists($(JAVA_HOME_17_X64)) ">$(JAVA_HOME_17_X64)</JdksRoot>
19+
<JdksRoot Condition=" '$(JdksRoot)' == '' And '$(JAVA_HOME_11_X64)' != '' And Exists($(JAVA_HOME_11_X64)) ">$(JAVA_HOME_11_X64)</JdksRoot>
2020
</PropertyGroup>
2121
<JdkInfo
2222
JdksRoot="$(JdksRoot)"

tests/Xamarin.Android.Tools.Bytecode-Tests/JavaEnumTests.cs

+6-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public void ClassFileDescription ()
2222
new ExpectedTypeDeclaration {
2323
MajorVersion = 0x37,
2424
MinorVersion = 0,
25-
ConstantPoolCount = 53,
25+
ConstantPoolCount = 55,
2626
AccessFlags = ClassAccessFlags.Final | ClassAccessFlags.Super | ClassAccessFlags.Enum,
2727
FullName = "com/xamarin/JavaEnum",
2828
Superclass = new TypeInfo ("java/lang/Enum", "Ljava/lang/Enum<Lcom/xamarin/JavaEnum;>;"),
@@ -71,6 +71,11 @@ public void ClassFileDescription ()
7171
AccessFlags = MethodAccessFlags.Public,
7272
ReturnDescriptor = "I",
7373
},
74+
new ExpectedMethodDeclaration {
75+
Name = "$values",
76+
AccessFlags = MethodAccessFlags.Private | MethodAccessFlags.Static | MethodAccessFlags.Synthetic,
77+
ReturnDescriptor = "[Lcom/xamarin/JavaEnum;",
78+
},
7479
new ExpectedMethodDeclaration {
7580
Name = "<clinit>",
7681
AccessFlags = MethodAccessFlags.Static,

tests/Xamarin.Android.Tools.Bytecode-Tests/JavaTypeTests.cs

+7-7
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,12 @@ public void ClassFile_WithJavaType_class ()
3535
new TypeInfo ("com/xamarin/IJavaInterface", "Lcom/xamarin/IJavaInterface<Ljava/lang/StringBuilder;Ljava/util/ArrayList<Ljava/lang/StringBuilder;>;Ljava/util/List<Ljava/lang/String;>;>;"),
3636
},
3737
InnerClasses = {
38+
new ExpectedInnerClassInfo {
39+
InnerClassName = "com/xamarin/JavaType$1",
40+
OuterClassName = null,
41+
InnerName = null,
42+
AccessFlags = 0,
43+
},
3844
new ExpectedInnerClassInfo {
3945
InnerClassName = "com/xamarin/JavaType$ASC",
4046
OuterClassName = "com/xamarin/JavaType",
@@ -59,12 +65,6 @@ public void ClassFile_WithJavaType_class ()
5965
InnerName = "MyStringList",
6066
AccessFlags = 0,
6167
},
62-
new ExpectedInnerClassInfo {
63-
InnerClassName = "com/xamarin/JavaType$1",
64-
OuterClassName = null,
65-
InnerName = null,
66-
AccessFlags = 0,
67-
},
6868
new ExpectedInnerClassInfo {
6969
InnerClassName = "com/xamarin/JavaType$RNC$RPNC",
7070
OuterClassName = "com/xamarin/JavaType$RNC",
@@ -149,7 +149,7 @@ public void ClassFile_WithJavaType_class ()
149149
Name = "STATIC_FINAL_STRING",
150150
Descriptor = "Ljava/lang/String;",
151151
AccessFlags = FieldAccessFlags.Public | FieldAccessFlags.Static | FieldAccessFlags.Final,
152-
ConstantValue = "String(stringIndex=190 Utf8=\"Hello, \\\"embedded\0Nulls\" and \ud83d\udca9!\")",
152+
ConstantValue = "String(stringIndex=101 Utf8=\"Hello, \\\"embedded\0Nulls\" and \ud83d\udca9!\")",
153153
},
154154
new ExpectedFieldDeclaration {
155155
Name = "STATIC_FINAL_BOOL_FALSE",

tests/Xamarin.Android.Tools.Bytecode-Tests/ModuleInfoTests.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public void ClassFile ()
1818
new ExpectedTypeDeclaration {
1919
MajorVersion = 0x37,
2020
MinorVersion = 0,
21-
ConstantPoolCount = 13,
21+
ConstantPoolCount = 12,
2222
AccessFlags = ClassAccessFlags.Module,
2323
FullName = "module-info",
2424
}.Assert (c);

tools/java-source-utils/src/test/java/com/microsoft/android/JavaSourceUtilsOptionsTest.java

-2
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@
99

1010
import org.junit.Test;
1111

12-
import jdk.nashorn.internal.AssertsEnabled;
13-
1412
import static org.junit.Assert.*;
1513

1614
public class JavaSourceUtilsOptionsTest {

tools/java-source-utils/src/test/java/com/microsoft/android/JavadocXmlGeneratorTest.java

+6-3
Original file line numberDiff line numberDiff line change
@@ -99,9 +99,12 @@ private static void testWritePackages(final JniPackagesInfo packagesInfo, final
9999

100100
generator.writePackages(packagesInfo);
101101
generator.close();
102-
// try (FileOutputStream o = new FileOutputStream(assertDescription + "-jonp.xml")) {
103-
// bytes.writeTo(o);
104-
// }
102+
103+
final File actual = new File(assertDescription + "-jonp.xml");
104+
try (FileOutputStream o = new FileOutputStream(actual)) {
105+
bytes.writeTo(o);
106+
}
105107
assertEquals(assertDescription, expected, bytes.toString());
108+
actual.delete();
106109
}
107110
}

tools/java-source-utils/src/test/resources/UnresolvedTypes.xml

+2-4
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,9 @@
44
<class jni-signature="Lexample/UnresolvedTypes;" name="UnresolvedTypes">
55
<method jni-return="L.*UnresolvedReturnType;" jni-signature="([L.*example.name.UnresolvedParameterType;)L.*UnresolvedReturnType;" name="method" return=".*UnresolvedReturnType">
66
<parameter jni-type="[L.*example.name.UnresolvedParameterType;" name="parameter" type=".*example.name.UnresolvedParameterType..."/>
7-
<javadoc>
8-
<![CDATA[Method using unresolvable types. As such, we make do.
7+
<javadoc><![CDATA[Method using unresolvable types. As such, we make do.
98
10-
JNI Sig: method.([L.*example.name.UnresolvedParameterType;)L.*UnresolvedReturnType;]]>
11-
</javadoc>
9+
JNI Sig: method.([L.*example.name.UnresolvedParameterType;)L.*UnresolvedReturnType;]]></javadoc>
1210
</method>
1311
</class>
1412
</package>

tools/java-source-utils/src/test/resources/com/microsoft/android/DemoInfo.xml

+9-27
Original file line numberDiff line numberDiff line change
@@ -2,57 +2,39 @@
22
<api api-source="java-source-utils">
33
<package jni-name="" name="">
44
<class jni-signature="LA;" name="A">
5-
<javadoc>
6-
<![CDATA[jni-sig=LA;]]>
7-
</javadoc>
5+
<javadoc><![CDATA[jni-sig=LA;]]></javadoc>
86
<constructor jni-signature="(ILjava/lang/String;)V">
97
<parameter jni-type="I" name="one" type="int"/>
108
<parameter jni-type="Ljava/lang/String;" name="two" type="java.lang.String"/>
11-
<javadoc>
12-
<![CDATA[jni-sig=<init>.(ILjava/lang/String;)V]]>
13-
</javadoc>
9+
<javadoc><![CDATA[jni-sig=<init>.(ILjava/lang/String;)V]]></javadoc>
1410
</constructor>
1511
<field jni-signature="I" name="field">
16-
<javadoc>
17-
<![CDATA[jni-sig=field.I]]>
18-
</javadoc>
12+
<javadoc><![CDATA[jni-sig=field.I]]></javadoc>
1913
</field>
2014
<method jni-return="V" jni-signature="(Ljava/lang/Object;J)V" name="m" return="void">
2115
<parameter jni-type="Ljava/lang/Object;" name="value" type="T"/>
2216
<parameter jni-type="J" name="x" type="long"/>
23-
<javadoc>
24-
<![CDATA[jni-sig=m.(Ljava/lang/Object;J)V]]>
25-
</javadoc>
17+
<javadoc><![CDATA[jni-sig=m.(Ljava/lang/Object;J)V]]></javadoc>
2618
</method>
2719
</class>
2820
<interface jni-signature="LI;" name="I">
29-
<javadoc>
30-
<![CDATA[jni-sig=LI;]]>
31-
</javadoc>
21+
<javadoc><![CDATA[jni-sig=LI;]]></javadoc>
3222
<method jni-return="Ljava/lang/Object;" jni-signature="(Ljava/util/List;)Ljava/lang/Object;" name="m" return="T">
3323
<parameter jni-type="Ljava/util/List;" name="x" type="java.util.List&lt;T&gt;"/>
34-
<javadoc>
35-
<![CDATA[jni-sig=m.(Ljava/util/List;)Ljava/lang/Object;]]>
36-
</javadoc>
24+
<javadoc><![CDATA[jni-sig=m.(Ljava/util/List;)Ljava/lang/Object;]]></javadoc>
3725
</method>
3826
</interface>
3927
</package>
4028
<package jni-name="before/example" name="before.example"/>
4129
<package jni-name="example" name="example">
4230
<interface jni-signature="Lexample/Exampleable;" name="Exampleable">
43-
<javadoc>
44-
<![CDATA[jni-sig=Lexample/Exampleable;]]>
45-
</javadoc>
31+
<javadoc><![CDATA[jni-sig=Lexample/Exampleable;]]></javadoc>
4632
<method jni-return="V" jni-signature="(Ljava/lang/String;)V" name="example" return="void">
4733
<parameter jni-type="Ljava/lang/String;" name="e" type="java.lang.String"/>
48-
<javadoc>
49-
<![CDATA[jni-sig=example.(Ljava/lang/String;)V]]>
50-
</javadoc>
34+
<javadoc><![CDATA[jni-sig=example.(Ljava/lang/String;)V]]></javadoc>
5135
</method>
5236
<method jni-return="V" jni-signature="()V" name="noParameters" return="void">
53-
<javadoc>
54-
<![CDATA[jni-sig=noParameters.()V]]>
55-
</javadoc>
37+
<javadoc><![CDATA[jni-sig=noParameters.()V]]></javadoc>
5638
</method>
5739
</interface>
5840
</package>

0 commit comments

Comments
 (0)