diff --git a/src/main/java/io/yooksi/pz/zdoc/compile/JavaCompiler.java b/src/main/java/io/yooksi/pz/zdoc/compile/JavaCompiler.java index 9d90d60..33d84c1 100644 --- a/src/main/java/io/yooksi/pz/zdoc/compile/JavaCompiler.java +++ b/src/main/java/io/yooksi/pz/zdoc/compile/JavaCompiler.java @@ -51,6 +51,7 @@ public class JavaCompiler implements ICompiler { + public static final String GLOBAL_OBJECT_CLASS = "zombie.Lua.LuaManager.GlobalObject"; private static final File SERIALIZE_LUA = new File("serialize.lua"); private final Set> exposedJavaClasses; @@ -240,7 +241,7 @@ static HashSet> getExposedJava() throws ReflectiveOperationException { exposer, "exposed", true ); // class containing global exposed methods - result.add(Utils.getClassForName("zombie.Lua.LuaManager.GlobalObject")); + result.add(Utils.getClassForName(GLOBAL_OBJECT_CLASS)); return result; } diff --git a/src/main/java/io/yooksi/pz/zdoc/doc/ZomboidLuaDoc.java b/src/main/java/io/yooksi/pz/zdoc/doc/ZomboidLuaDoc.java index 13ab5ff..8609f62 100644 --- a/src/main/java/io/yooksi/pz/zdoc/doc/ZomboidLuaDoc.java +++ b/src/main/java/io/yooksi/pz/zdoc/doc/ZomboidLuaDoc.java @@ -27,6 +27,7 @@ import org.jetbrains.annotations.UnmodifiableView; import io.yooksi.pz.zdoc.Main; +import io.yooksi.pz.zdoc.compile.JavaCompiler; import io.yooksi.pz.zdoc.compile.LuaCompiler; import io.yooksi.pz.zdoc.element.IMember; import io.yooksi.pz.zdoc.element.lua.Annotated; @@ -112,9 +113,14 @@ public void writeToFile(File file) throws IOException { ZomboidLuaDoc.appendComments(sb, method); ZomboidLuaDoc.appendAnnotations(sb, method); - sb.append("function ").append(clazz.getConventionalName()); - sb.append(':').append(method.getName()).append('('); + sb.append("function "); + // global methods need to be declared outside tables + String parentType = clazz.getParentType(); + if (parentType == null || !parentType.equals(JavaCompiler.GLOBAL_OBJECT_CLASS)) { + sb.append(clazz.getConventionalName()).append(':'); + } + sb.append(method.getName()).append('('); method.appendParameterSignature(sb); sb.append(") end\n\n"); } diff --git a/src/test/java/io/yooksi/pz/zdoc/doc/ZomboidLuaDocTest.java b/src/test/java/io/yooksi/pz/zdoc/doc/ZomboidLuaDocTest.java index efae8d0..0522070 100644 --- a/src/test/java/io/yooksi/pz/zdoc/doc/ZomboidLuaDocTest.java +++ b/src/test/java/io/yooksi/pz/zdoc/doc/ZomboidLuaDocTest.java @@ -27,6 +27,7 @@ import com.google.common.collect.ImmutableList; import io.yooksi.pz.zdoc.TestWorkspace; +import io.yooksi.pz.zdoc.compile.JavaCompiler; import io.yooksi.pz.zdoc.element.lua.*; import io.yooksi.pz.zdoc.element.mod.AccessModifierKey; import io.yooksi.pz.zdoc.element.mod.MemberModifier; @@ -389,6 +390,53 @@ void shouldWriteZomboidLuaDocMethodsWithVariadicArgumentsToFile() throws IOExcep Assertions.assertEquals(expectedResult, writeToFileAndRead(zDoc)); } + @Test + void shouldNotWriteGlobalZomboidLuaDocMethodsAsPartOfTableToFile() throws IOException { + + Set luaMethods = new LinkedHashSet<>(); + luaMethods.add(LuaMethod.Builder.create("firstMethod").build() + ); + luaMethods.add(LuaMethod.Builder.create("secondMethod") + .withModifier(new MemberModifier(AccessModifierKey.PUBLIC)).build() + ); + luaMethods.add(LuaMethod.Builder.create("thirdMethod") + .withModifier(new MemberModifier(AccessModifierKey.PRIVATE)) + .withReturnType(new LuaType("String")).build() + ); + luaMethods.add(LuaMethod.Builder.create("fourthMethod").withOwner(TEST_LUA_CLASS) + .withModifier(new MemberModifier(AccessModifierKey.DEFAULT)) + .withReturnType(new LuaType("Object")).withParams(ImmutableList.of( + new LuaParameter(new LuaType("int"), "param1"), + new LuaParameter(new LuaType("boolean"), "param2"))).build() + ); + ZomboidLuaDoc zDoc = new ZomboidLuaDoc( + new LuaClass("LuaManager_GlobalObject", JavaCompiler.GLOBAL_OBJECT_CLASS), + new ArrayList<>(), luaMethods + ); + + List expectedResult = ImmutableList.of( + "---@class LuaManager_GlobalObject : " + JavaCompiler.GLOBAL_OBJECT_CLASS, + "LuaManager_GlobalObject = {}", + "", + "---@return void", + "function firstMethod() end", + "", + "---@public", + "---@return void", + "function secondMethod() end", + "", + "---@private", + "---@return String", + "function thirdMethod() end", + "", + "---@param param1 int", + "---@param param2 boolean", + "---@return Object", + "function fourthMethod(param1, param2) end" + ); + Assertions.assertEquals(expectedResult, writeToFileAndRead(zDoc)); + } + @Test @SuppressWarnings("ConstantConditions") void shouldThrowExceptionWhenModifyingImmutableFields() {