Skip to content

Commit

Permalink
Type generation
Browse files Browse the repository at this point in the history
  • Loading branch information
Anuken committed Nov 29, 2020
1 parent 2ed2c16 commit fb8cb07
Show file tree
Hide file tree
Showing 4 changed files with 74 additions and 2 deletions.
2 changes: 2 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ task run(dependsOn: classes, type: JavaExec){
dependencies{
//desktop files required for natives, server required for command list
implementation files("../Mindustry/desktop/build/libs/Mindustry.jar")
implementation files("lib/javaparser.jar")
implementation files("../Mindustry/server/build/libs/server-release.jar")
//implementation 'com.github.javaparser:javaparser-symbol-solver-core:3.17.0'
implementation "org.reflections:reflections:0.9.11"
}
Binary file added lib/javaparser.jar
Binary file not shown.
1 change: 1 addition & 0 deletions src/wikigen/Config.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ public class Config{
public static final String repo = "wiki";
public static final Fi outDirectory = Core.files.local("../../../Mindustry-Wiki-Generator/output/");
public static final Fi rootDirectory = Core.files.local("../../../Mindustry-Wiki-Generator/");
public static final Fi srcDirectory = Core.files.local("../../../Mindustry/core/src");
public static final Fi docsDirectory = Core.files.local("../../../" + repo + "/docs");
public static final Fi docsOutDirectory = Core.files.local("../../../" + repo + "/docs_out");
public static final Fi imageDirectory = outDirectory.child("images");
Expand Down
73 changes: 71 additions & 2 deletions src/wikigen/VarGenerator.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,14 @@
import arc.struct.*;
import arc.util.*;
import arc.util.serialization.*;
import com.github.javaparser.*;
import com.github.javaparser.ast.body.*;
import mindustry.ctype.*;
import mindustry.gen.*;
import mindustry.net.*;
import mindustry.server.*;
import mindustry.world.*;
import org.reflections.*;

/** Generates and replaces variables in markdown files. */
public class VarGenerator{
Expand All @@ -19,7 +23,7 @@ public class VarGenerator{
net.setBlock(true);
}

public ObjectMap<String, Object> makeVariables(){
public ObjectMap<String, Object> makeVariables() throws Exception{
var out = new ObjectMap<String, Object>();

out.put("sounds", Seq.with(Sounds.class.getFields()).toString(" ", f -> "`" + f.getName() + "`"));
Expand All @@ -45,10 +49,75 @@ public void setup(String[] args){
}
}, Log::err);

out.put("blockTypes", genTypes());

return out;
}

public void generate(){
public String genTypes() throws Exception{
var out = new StringBuilder();
var reflections = new Reflections("mindustry.world.blocks");
var allClasses = reflections.getSubTypesOf(Block.class);
var parser = new JavaParser();

for(var c : allClasses){
var path = c.getCanonicalName().replace('.', '/') + ".java";
Log.info("Parse @", path);

out.append("## ").append(c.getSimpleName()).append("\n\n");

out.append("*extends ").append(c.getSuperclass().getSimpleName()).append("*\n\n");

var result = parser.parse(Config.srcDirectory.child(path).file());

if(result.getProblems().size() > 0){
Log.info(result.getProblems().toString());
}

var cu = result.getResult().orElseThrow();
var typeDec = cu.getTypes().getFirst().orElseThrow();

if(typeDec.getJavadoc().isPresent()){
out.append(typeDec.getJavadoc().get().toText()).append("\n");
}

boolean anyFields = false;

var outf = new StringBuilder();

outf.append("""
|field|type|default|notes|
|---|---|---|---|
""");

var members = typeDec.getMembers();
if(members != null){
for(var member : members){
if(member instanceof FieldDeclaration field){
for(var variable : field.getVariables()){
anyFields = true;
outf.append("|").append(variable.getName())
.append("|").append(variable.getTypeAsString())
.append("|").append(variable.getInitializer().isEmpty() ? " " : variable.getInitializer().get().toFieldAccessExpr().toString())
.append("|").append(field.getJavadoc().isPresent() ? field.getJavadoc().get().toText().replace("\n", " ") : " ").append("|\n");
}
}
}
}

if(anyFields){
out.append(outf);
}

out.append("\n\n");
}

//Log.info(out.toString());

return out.toString();
}

public void generate() throws Exception{
var values = makeVariables();

Config.docsOutDirectory.deleteDirectory();
Expand Down

0 comments on commit fb8cb07

Please sign in to comment.