From 3ce65a4912140908b4d26529829c0fa955ef74a7 Mon Sep 17 00:00:00 2001 From: Steve Hannah Date: Mon, 10 Sep 2018 10:14:16 -0700 Subject: [PATCH] Added detection for the name of the generated VALUES static field in enums that seems to vary for different java compilers. Previously assumed that the field is named _VALUES but it seems that some compilers emit ENUM_VALUES. --- .../tools/translator/ByteCodeClass.java | 28 +++++++++++++------ 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/vm/ByteCodeTranslator/src/com/codename1/tools/translator/ByteCodeClass.java b/vm/ByteCodeTranslator/src/com/codename1/tools/translator/ByteCodeClass.java index b41a358592..495f65f29c 100644 --- a/vm/ByteCodeTranslator/src/com/codename1/tools/translator/ByteCodeClass.java +++ b/vm/ByteCodeTranslator/src/com/codename1/tools/translator/ByteCodeClass.java @@ -336,6 +336,7 @@ public String generateCCode(List allClasses) { StringBuilder b = new StringBuilder(); b.append("#include \""); b.append(clsName); + b.append(".h\"\n"); for(String s : dependsClassesInterfaces) { @@ -480,10 +481,13 @@ public String generateCCode(List allClasses) { staticFieldList = new ArrayList(); buildStaticFieldList(staticFieldList); - + String enumValuesField = null; // static fields for the class for(ByteCodeField bf : staticFieldList) { if(bf.isStaticField() && bf.getClsName().equals(clsName)) { + if (isEnum && ("_VALUES".equals(bf.getFieldName().replace('$','_')) || "ENUM_VALUES".equals(bf.getFieldName().replace('$','_')))) { + enumValuesField = bf.getFieldName(); + } if(bf.isFinal() && bf.getValue() != null && !writableFields.contains(bf.getFieldName())) { // static getter b.append(bf.getCDefinition()); @@ -830,15 +834,21 @@ public String generateCCode(List allClasses) { } if (isEnum) { + b.append("JAVA_OBJECT __VALUE_OF_").append(clsName).append("(CODENAME_ONE_THREAD_STATE, JAVA_OBJECT value) {\n "); - b.append(" JAVA_ARRAY values = (JAVA_ARRAY)get_static_").append(clsName).append("__VALUES(threadStateData);\n"); - b.append(" JAVA_ARRAY_OBJECT* data = (JAVA_ARRAY_OBJECT*)values->data;\n"); - b.append(" int len = values->length;\n"); - b.append(" for (int i=0; idata;\n"); + b.append(" int len = values->length;\n"); + b.append(" for (int i=0; i