Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
import com.github.xpenatan.jparser.example.testlib.DefaultCallbackClass;
import com.github.xpenatan.jparser.example.testlib.TestCallbackClass;
import com.github.xpenatan.jparser.example.testlib.TestConstructorClass;
import com.github.xpenatan.jparser.example.testlib.TestEnumClassWithinClass;
import com.github.xpenatan.jparser.example.testlib.TestEnumLib;
import com.github.xpenatan.jparser.example.testlib.TestMethodClass;
import com.github.xpenatan.jparser.example.testlib.TestObjectClass;
import com.github.xpenatan.jparser.example.testlib.TestObjectClassArray;
Expand All @@ -16,7 +18,7 @@
public class TestLib {

public static boolean test() {
int eVal = TestEnumWithinClass.e_val;
boolean enumTest = testEnum();
boolean constructorTest = testConstructorClass();
boolean stringConstructorTest = testStringConstructorClass();
boolean attributeTest = testAttributeClass();
Expand All @@ -29,6 +31,7 @@ public static boolean test() {
boolean namespaceTest = testNamespaceClass();
boolean operatorTest = testOperatorClass();

System.out.println("enumTest: " + enumTest);
System.out.println("constructorTest: " + constructorTest);
System.out.println("stringConstructorTest: " + stringConstructorTest);
System.out.println("attributeTest: " + attributeTest);
Expand All @@ -40,11 +43,48 @@ public static boolean test() {
System.out.println("namespaceTest: " + namespaceTest);
System.out.println("operatorTest: " + operatorTest);

return constructorTest && stringConstructorTest && attributeTest && staticAttributeTest
return enumTest && constructorTest && stringConstructorTest && attributeTest && staticAttributeTest
&& attributeArrayTest && methodTest && staticMethodTest && callbackTest
&& callbackTestManual && namespaceTest && operatorTest;
}

private static boolean testEnum() {
{
int testEnum = TestEnumClassWithinClass.testEnum;
try {
if(!(testEnum == 35)) {
throw new RuntimeException("testEnum Error: !(testEnum == 35)");
}
} catch(Throwable e) {
e.printStackTrace();
return false;
}
}
{
int testDefault = TestEnumLib.TEST_DEFAULT;
try {
if(!(testDefault == 7)) {
throw new RuntimeException("testEnum Error: !(testDefault == 7)");
}
} catch(Throwable e) {
e.printStackTrace();
return false;
}
}
{
int eVal = TestEnumWithinClass.e_val_renamed;
try {
if(!(eVal == 34)) {
throw new RuntimeException("testEnum Error: !(eVal == 34)");
}
} catch(Throwable e) {
e.printStackTrace();
return false;
}
}
return true;
}

private static boolean testConstructorClass() {
{
int intValue01 = 40;
Expand Down
2 changes: 1 addition & 1 deletion example/lib/lib-build/src/main/cpp/TestLib.idl
Original file line number Diff line number Diff line change
Expand Up @@ -233,7 +233,7 @@ interface TestOperatorClass { //[-SUB_PACKAGE=core.op]
};

enum TestEnumWithinClass { //[-SUB_PACKAGE=core.enums]
"TestEnumClass::e_val"
"TestEnumClass::e_val" //[-RENAME=e_val_renamed]
};

enum TestEnumClassWithinClass {
Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
android.useAndroidX=true
version=1.0.0-b6
version=1.0.0-b7
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import com.github.xpenatan.jparser.idl.IDLAttribute;
import com.github.xpenatan.jparser.idl.IDLConstructor;
import com.github.xpenatan.jparser.idl.IDLEnum;
import com.github.xpenatan.jparser.idl.IDLEnumItem;
import com.github.xpenatan.jparser.idl.IDLFile;
import com.github.xpenatan.jparser.idl.IDLHelper;
import com.github.xpenatan.jparser.idl.parser.IDLAttributeOperation;
Expand Down Expand Up @@ -394,7 +395,8 @@ public void onIDLAttributeGenerated(JParser jParser, IDLAttribute idlAttribute,
}

@Override
public void onIDLEnumMethodGenerated(JParser jParser, IDLEnum idlEnum, ClassOrInterfaceDeclaration classDeclaration, String enumStr, FieldDeclaration fieldDeclaration, MethodDeclaration nativeMethodDeclaration) {
public void onIDLEnumMethodGenerated(JParser jParser, IDLEnum idlEnum, ClassOrInterfaceDeclaration classDeclaration, IDLEnumItem enumItem, FieldDeclaration fieldDeclaration, MethodDeclaration nativeMethodDeclaration) {
String enumStr = enumItem.name;
String content = "";
content = ENUM_GET_INT_TEMPLATE.replace(TEMPLATE_TAG_ENUM, enumStr);
String header = "[-" + HEADER_CMD + ";" + CMD_NATIVE + "]";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
public class IDLEnum extends IDLClassOrEnum {
public final IDLFile idlFile;

public final ArrayList<String> enums = new ArrayList<>();
public final ArrayList<IDLEnumItem> enums = new ArrayList<>();
public ArrayList<String> settings = new ArrayList<>();

public boolean isNameSpace;
Expand Down Expand Up @@ -51,7 +51,8 @@ private void setupEnumValues() {
if(typePrefix.isEmpty() && enumLine.contains("::")) {
typePrefix = enumLine.split("::")[0];
}
enums.add(enumLine);
IDLEnumItem item = new IDLEnumItem(this, enumLine, idlLine);
enums.add(item);
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.github.xpenatan.jparser.idl;

public class IDLEnumItem {
public IDLEnum idlEnum;
public String name;
public IDLLine idlLine;

public IDLEnumItem(IDLEnum idlEnum, String name, IDLLine idlLine) {
this.idlEnum = idlEnum;
this.name = name;
this.idlLine = idlLine;
}

public String getRenamedName() {
if(idlLine.containsCommand(IDLLine.CMD_RENAME)) {
String commandValue = idlLine.getCommandValue(IDLLine.CMD_RENAME);
return commandValue;
}
return null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ public class IDLLine {
public static final String CMD_MEM_OWN = "MEM_OWN";
public static final String CMD_NOT_MEM_OWN = "NOT_MEM_OWN";
public static final String CMD_SUB_PACKAGE = "SUB_PACKAGE";
public static final String CMD_RENAME = "RENAME";

public final String line;
public final String comment;
Expand Down Expand Up @@ -39,6 +40,14 @@ public IDLLine copy() {
}

public boolean containsCommand(String command) {
return containsCommand(commands, command);
}

public String getCommandValue(String command) {
return getCommandValue(commands, command);
}

public static boolean containsCommand(ArrayList<String> commands, String command) {
for(int i = 0; i < commands.size(); i++) {
String cmd = commands.get(i);
if(cmd.startsWith(command)) {
Expand All @@ -48,7 +57,7 @@ public boolean containsCommand(String command) {
return false;
}

public String getCommandValue(String command) {
public static String getCommandValue(ArrayList<String> commands, String command) {
for(int i = 0; i < commands.size(); i++) {
String cmd = commands.get(i);
if(cmd.startsWith(command)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import com.github.xpenatan.jparser.idl.IDLClass;
import com.github.xpenatan.jparser.idl.IDLConstructor;
import com.github.xpenatan.jparser.idl.IDLEnum;
import com.github.xpenatan.jparser.idl.IDLEnumItem;
import com.github.xpenatan.jparser.idl.IDLMethod;
import com.github.xpenatan.jparser.idl.IDLReader;
import java.util.ArrayList;
Expand Down Expand Up @@ -163,7 +164,7 @@ public void onIDLMethodGenerated(JParser jParser, IDLMethod idlMethod, ClassOrIn
public void onIDLAttributeGenerated(JParser jParser, IDLAttribute idlAttribute, boolean isSet, ClassOrInterfaceDeclaration classDeclaration, MethodDeclaration methodDeclaration, MethodDeclaration nativeMethodDeclaration) {
}

public void onIDLEnumMethodGenerated(JParser jParser, IDLEnum idlEnum, ClassOrInterfaceDeclaration classDeclaration, String enumStr, FieldDeclaration fieldDeclaration, MethodDeclaration nativeMethodDeclaration) {
public void onIDLEnumMethodGenerated(JParser jParser, IDLEnum idlEnum, ClassOrInterfaceDeclaration classDeclaration, IDLEnumItem enumItem, FieldDeclaration fieldDeclaration, MethodDeclaration nativeMethodDeclaration) {
}

public void onIDLCallbackGenerated(JParser jParser, IDLClass idlClass, ClassOrInterfaceDeclaration classDeclaration, MethodDeclaration callbackDeclaration, ArrayList<Pair<IDLMethod, Pair<MethodDeclaration, MethodDeclaration>>> methods) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,19 @@
import com.github.javaparser.ast.type.Type;
import com.github.xpenatan.jparser.core.JParser;
import com.github.xpenatan.jparser.idl.IDLEnum;
import com.github.xpenatan.jparser.idl.IDLEnumItem;
import java.util.Optional;

public class IDLEnumParser {

public static void generateEnum(IDLDefaultCodeParser idlParser, JParser jParser, CompilationUnit unit, ClassOrInterfaceDeclaration classDeclaration, IDLEnum idlEnum) {
for(String anEnum : idlEnum.enums) {
generateField(idlParser, jParser, idlEnum, unit, classDeclaration, anEnum);
for(IDLEnumItem enumItem : idlEnum.enums) {
generateField(idlParser, jParser, idlEnum, unit, classDeclaration, enumItem);
}
}

private static void generateField(IDLDefaultCodeParser idlParser, JParser jParser, IDLEnum idlEnum, CompilationUnit unit, ClassOrInterfaceDeclaration classDeclaration, String enumStr) {
String enumVar = enumStr;
private static void generateField(IDLDefaultCodeParser idlParser, JParser jParser, IDLEnum idlEnum, CompilationUnit unit, ClassOrInterfaceDeclaration classDeclaration, IDLEnumItem enumItem) {
String enumVar = enumItem.name;
if(enumVar.contains("::")) {
enumVar = enumVar.split("::")[1];
}
Expand All @@ -34,6 +35,11 @@ private static void generateField(IDLDefaultCodeParser idlParser, JParser jParse
String nativeMethodName = enumVar + "_NATIVE";

expression.setName(nativeMethodName);

String name = enumItem.getRenamedName();
if(name != null) {
enumVar = name;
}
FieldDeclaration fieldDeclaration = classDeclaration.addFieldWithInitializer(intType, enumVar, expression, Modifier.Keyword.PUBLIC, Modifier.Keyword.STATIC, Modifier.Keyword.FINAL);

MethodDeclaration nativeMethod = new MethodDeclaration();
Expand All @@ -42,7 +48,7 @@ private static void generateField(IDLDefaultCodeParser idlParser, JParser jParse
nativeMethod.removeBody();
nativeMethod.setType(intType);
classDeclaration.getMembers().add(nativeMethod);
idlParser.onIDLEnumMethodGenerated(jParser, idlEnum, classDeclaration, enumStr, fieldDeclaration, nativeMethod);
idlParser.onIDLEnumMethodGenerated(jParser, idlEnum, classDeclaration, enumItem, fieldDeclaration, nativeMethod);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
import com.github.xpenatan.jparser.idl.IDLClass;
import com.github.xpenatan.jparser.idl.IDLConstructor;
import com.github.xpenatan.jparser.idl.IDLEnum;
import com.github.xpenatan.jparser.idl.IDLEnumItem;
import com.github.xpenatan.jparser.idl.IDLFile;
import com.github.xpenatan.jparser.idl.IDLMethod;
import com.github.xpenatan.jparser.idl.IDLParameter;
Expand Down Expand Up @@ -560,7 +561,8 @@ public void onIDLAttributeGenerated(JParser jParser, IDLAttribute idlAttribute,
}

@Override
public void onIDLEnumMethodGenerated(JParser jParser, IDLEnum idlEnum, ClassOrInterfaceDeclaration classDeclaration, String enumStr, FieldDeclaration fieldDeclaration, MethodDeclaration nativeMethodDeclaration) {
public void onIDLEnumMethodGenerated(JParser jParser, IDLEnum idlEnum, ClassOrInterfaceDeclaration classDeclaration, IDLEnumItem enumItem, FieldDeclaration fieldDeclaration, MethodDeclaration nativeMethodDeclaration) {
String enumStr = enumItem.name;
String content = "";
if(enumStr.contains("::")) {
String[] split = enumStr.split("::");
Expand All @@ -571,13 +573,8 @@ public void onIDLEnumMethodGenerated(JParser jParser, IDLEnum idlEnum, ClassOrIn
enumStr = rightName;
}
else {
if(leftName.equals(idlEnum.name)) {
// enum class cannot have child class name
enumStr = rightName;
}
else {
enumStr = enumStr.replace("::", ".");
}
// enum class cannot have child class name
enumStr = rightName;
}
}
content = ENUM_GET_INT_TEMPLATE.replace(TEMPLATE_TAG_ENUM, enumStr).replace(TEMPLATE_TAG_MODULE, module);
Expand Down