- changed status to resolved
Enum initializer fails when a static initializer uses the values() method
Issue #291
resolved
ExtendJ 8.1.0-52-gddbdc64 Java SE 8
ExtendJ generates nonexecutable code for this test:
// Test that static initializers for fields in an enum type are run // after the enum $VALUES field has been initialized. public class Test { public static void main(String[] args) { for (EnumInitTest v : EnumInitTest.values) { System.out.println(v); } } } enum EnumInitTest { HI, MOM; static EnumInitTest[] values = values(); }
Expected result: should print "HI MOM"
Actual result: fails to run with this error:
[junit] [FAIL] runTest[enum/static_03p](tests.extendj.TestJava7) [junit] Error output files differ expected:<[]> but was:<[Exception in thread "main" java.lang.ExceptionInInitializerError [junit] at Test.main(Test.java) [junit] Caused by: java.lang.NullPointerException [junit] at EnumInitTest.values(Test.java) [junit] at EnumInitTest.<clinit>(Test.java) [junit] ... 1 more]>
Comments (1)
-
reporter - Log in to comment
Reorder enum initializer code generation
This fixes an enum initialization error where static initializers that depended on the implicit $VALUES field were generated before the $VALUES field initializer.
To fix the error we now always generate the $VALUES initializer first, before other static initializers.
fixes
#291(bitbucket)→ <<cset 027b9c763847>>