diff --git a/src/main/java/org/extendj/ragdoc/JsonBuilder.java b/src/main/java/org/extendj/ragdoc/JsonBuilder.java index 07f98502c9d029c9bfe2c6228d49e9c0072a672c..772c4edd6835e48888e197c9d1b07ee965296b91 100644 --- a/src/main/java/org/extendj/ragdoc/JsonBuilder.java +++ b/src/main/java/org/extendj/ragdoc/JsonBuilder.java @@ -78,11 +78,13 @@ public class JsonBuilder { private static final String[] MEMBER_KINDS = { "constr", "attr", "rel", "field", "method" }; private final File rootDir; + private final boolean excludeGenerated; private java.util.List<String> ragRoot = new java.util.LinkedList<>(); public Map<String, File> sourceFiles = new HashMap<>(); - public JsonBuilder(File rootDir) { + public JsonBuilder(File rootDir, boolean excludeGenerated) { this.rootDir = rootDir; + this.excludeGenerated = excludeGenerated; ragRoot = RelativePath.buildPathList(rootDir); typenames.add("packages"); // Reserve packages as JSON filename. } @@ -111,6 +113,9 @@ public class JsonBuilder { JsonArray array = new JsonArray(); do { ParameterDeclaration param = iter.next(); + if (matchesGenerated(param.name())) { + continue; + } JsonObject pobj = new JsonObject(); pobj.add("t", typeRef(param.type())); pobj.add("n", param.name()); @@ -135,7 +140,7 @@ public class JsonBuilder { JsonObject doc = method.jsonDocObject(); // System.out.println("" + method.type() + ": " + method + ", kind=" + method.objectKind()); // System.out.println("`-> doc=" + doc + " doc.get(relation)=" + (doc != null ? doc.get("relation") : "/")); - if (shouldDocument(method, doc)) { + if (shouldDocument(method, doc) && !matchesGenerated(method.name())) { JsonObject obj = new JsonObject(); obj.add("name", Json.of(method.name())); JsonArray modifiers = method.getModifiers().toJson(); @@ -220,6 +225,13 @@ public class JsonBuilder { && !typeDecl.isTypeVariable() && typeDecl.compilationUnit().fromSource(); } + /** + * Check if name contains "_internal_" or "_impl_" and if it should be excluded (based on constructor argument) + */ + private boolean matchesGenerated(String name) { + return this.excludeGenerated && (name.contains("_internal_") || name.contains("_impl_") || name.contains("$")); + } + // TODO: inner class names. /** @@ -255,6 +267,9 @@ public class JsonBuilder { JsonObject doc = field.jsonDocObject(); if (shouldDocument(field, doc)) { for (Declarator declarator : field.getDeclaratorList()) { + if (!matchesGenerated(declarator.name())) { + continue; + } JsonObject obj = new JsonObject(); obj.add("name", Json.of(declarator.name())); obj.add("type", typeRef(declarator.type())); @@ -404,13 +419,29 @@ public class JsonBuilder { } doc.set("astdecl", decl); JsonArray array = decl.get("c").array(); + // objects to keep are non-generated parameters + List<JsonObject> objectsToKeep = new ArrayList<>(); + boolean removeSomeObjects = false; for (JsonValue c : array) { JsonObject comp = c.object(); + if (matchesGenerated(comp.get("n").stringValue(""))) { + removeSomeObjects = true; + } else { + objectsToKeep.add(comp); + } if (!comp.get("e").stringValue("").isEmpty()) { comp.set("e", typeRef(safeLookupType(type, stripGenericPart(comp.get("e").stringValue(""))))); } } + // recreate the array with only those object to keep + if (removeSomeObjects) { + array = new JsonArray(); + for (JsonObject comp : objectsToKeep) { + array.add(comp); + } + decl.set("c", array); + } } catch (IOException e) { e.printStackTrace(); } catch (JsonParser.SyntaxError syntaxError) { @@ -439,6 +470,10 @@ public class JsonBuilder { return obj; } + private void excludeGeneratedFromProduction(JsonObject decl) { + + } + private TypeDecl safeLookupType(TypeDecl parent, String name) { SimpleSet<TypeDecl> types = parent.lookupType(name); if (types.isEmpty()) { diff --git a/src/main/java/org/extendj/ragdoc/RagDocBuilder.java b/src/main/java/org/extendj/ragdoc/RagDocBuilder.java index bef16cd9a0b12f426b232a597fcbf47972fd55ad..55945cc14410b6473c38de0b69395643dde23a0e 100644 --- a/src/main/java/org/extendj/ragdoc/RagDocBuilder.java +++ b/src/main/java/org/extendj/ragdoc/RagDocBuilder.java @@ -187,6 +187,7 @@ public class RagDocBuilder extends Frontend { @Override protected void initOptions() { super.initOptions(); program.options().addKeyValueOption("-ragroot"); + program.options().addKeyOption("-excludeGenerated"); } @Override protected int processArgs(String[] args) { @@ -206,7 +207,8 @@ public class RagDocBuilder extends Frontend { } } System.out.println("Using ragroot directory: " + ragRoot.getAbsolutePath()); - jsonBuilder = new JsonBuilder(ragRoot); + boolean excludeGenerated = program.options().hasOption("-excludeGenerated"); + jsonBuilder = new JsonBuilder(ragRoot, excludeGenerated); ASTNode.jsonBuilder = jsonBuilder; } return result;