Skip to content

Commit e50a1cb

Browse files
committed
[Xamarin.Android.Tools.Bytecode-Tests] Update output for JDK8.
JDK 8 generates different output from JDK 7, which unfortunately breaks the unit tests (and thus prevents us from having a "green" build on our Jenkins server, which is bad). For JavaEnum.class, JDK 7's javac emitted an extra, *duplicate*, constant pool entry: NameAndType(nameIndex=27 descriptorIndex=28 Name="<init>" Descriptor="(Ljava/lang/String;I)V") I assume it was a JDK 7 bug fixed in JDK 8. For JavaType.class, JDK 8 is generating many more constant pool entries -- 183 vs. 177 -- which I haven't further explored. As important is that the JDK 8 compiler has changed the behavior for parameter names of synthetic methods. JDK 7 would emit *actual* names for these parameters when `javac -g` was used, using e.g. `x0` as the parameter name. JDK 8 doesn't emit parameter names for synthetic method parameters *at all*. In the interest of keeping the unit test framework simpler, bump the expected outputs to mirror that of JDK 8 `javac` output, because nobody should be using JDK 7 anymore... This should allow all Xamarin.Android.Tools.Bytecode tests to pass on Jenkins.
1 parent 9778381 commit e50a1cb

File tree

3 files changed

+7
-7
lines changed

3 files changed

+7
-7
lines changed

src/Xamarin.Android.Tools.Bytecode/Tests/JavaEnumTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public void ClassFileDescription ()
2222
new ExpectedTypeDeclaration {
2323
MajorVersion = 0x32,
2424
MinorVersion = 0,
25-
ConstantPoolCount = 51,
25+
ConstantPoolCount = 50,
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;>;"),

src/Xamarin.Android.Tools.Bytecode/Tests/JavaType.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@
110110
synthetic="true"
111111
jni-signature="(Ljava/lang/Object;)I">
112112
<parameter
113-
name="x0"
113+
name="p0"
114114
type="java.lang.Object"
115115
jni-type="Ljava/lang/Object;" />
116116
</method>
@@ -162,7 +162,7 @@
162162
synthetic="true"
163163
jni-signature="(Ljava/lang/CharSequence;)Ljava/lang/Object;">
164164
<parameter
165-
name="x0"
165+
name="p0"
166166
type="java.lang.CharSequence"
167167
jni-type="Ljava/lang/CharSequence;" />
168168
</method>

src/Xamarin.Android.Tools.Bytecode/Tests/JavaTypeTests.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public void ClassFile_WithJavaType_class ()
2020
new ExpectedTypeDeclaration {
2121
MajorVersion = 0x32,
2222
MinorVersion = 0,
23-
ConstantPoolCount = 177,
23+
ConstantPoolCount = 183,
2424
AccessFlags = ClassAccessFlags.Public | ClassAccessFlags.Super,
2525
FullName = "com/xamarin/JavaType",
2626
Superclass = new TypeInfo ("java/lang/Object", "Ljava/lang/Object;"),
@@ -132,7 +132,7 @@ public void ClassFile_WithJavaType_class ()
132132
Name = "STATIC_FINAL_STRING",
133133
Descriptor = "Ljava/lang/String;",
134134
AccessFlags = FieldAccessFlags.Public | FieldAccessFlags.Static | FieldAccessFlags.Final,
135-
ConstantValue = "String(stringIndex=168 Utf8=\"Hello, \\\"embedded\0Nulls\" and \ud83d\udca9!\")",
135+
ConstantValue = "String(stringIndex=175 Utf8=\"Hello, \\\"embedded\0Nulls\" and \ud83d\udca9!\")",
136136
},
137137
new ExpectedFieldDeclaration {
138138
Name = "STATIC_FINAL_BOOL_FALSE",
@@ -309,15 +309,15 @@ public void ClassFile_WithJavaType_class ()
309309
AccessFlags = MethodAccessFlags.Public | MethodAccessFlags.Bridge | MethodAccessFlags.Synthetic,
310310
ReturnDescriptor = "I",
311311
Parameters = {
312-
new ParameterInfo ("x0", "Ljava/lang/Object;", "Ljava/lang/Object;"),
312+
new ParameterInfo ("p0", "Ljava/lang/Object;", "Ljava/lang/Object;"),
313313
},
314314
},
315315
new ExpectedMethodDeclaration {
316316
Name = "func",
317317
AccessFlags = MethodAccessFlags.Public | MethodAccessFlags.Bridge | MethodAccessFlags.Synthetic,
318318
ReturnDescriptor = "Ljava/lang/Object;",
319319
Parameters = {
320-
new ParameterInfo ("x0", "Ljava/lang/CharSequence;", "Ljava/lang/CharSequence;"),
320+
new ParameterInfo ("p0", "Ljava/lang/CharSequence;", "Ljava/lang/CharSequence;"),
321321
},
322322
},
323323
new ExpectedMethodDeclaration {

0 commit comments

Comments
 (0)