自定义GroovyDocTool没有找到任何东西

时间:2016-01-26 22:59:36

标签: groovy groovydoc

我在使用GroovyDocTool时遇到了困难。

无论我传入哪条路径,我的rootDoc都不会解析为任何包,类或方法。我不得不假设我只是走错了路,但是对于我的生活来说,无法弄清楚要通过什么。

class TestGroovyDoclet extends GroovyDocTool{
    public TestGroovyDoclet() {
        super([
            '~/ ... /src/'
            ,'/home/ ... /src/ ... /Sample/'
            ,'/home/ ... /src/ ... /Sample/Results.groovy'
        ]);
    }
    public void Execute(){
        System.out.println('Begin Processing Javadoc');
        System.out.format(' p %d\n', rootDoc.specifiedPackages().length);
        System.out.format(' c %d\n', rootDoc.classes().length);
        System.out.println('Finished Processing Javadoc');
    }
    public static void main(String[] args){
        (new TestGroovyDoclet()).with{
            it.Execute();
        }
    }
}

什么被认为是传递到GroovyRootDocBuilder的有效参数?

1 个答案:

答案 0 :(得分:0)

GroovyDoc的作者似乎打算将其用于Ant。这意味着无法查找要处理的文件,因为您应该已经知道要处理的文件。使用者必须指定要处理的单个文件,调用query.exec(function(topicError, topicResult){ var answerCount = topicResult.answerRef.length; res.render('topic', { topic: topicResult }); }); 以实际处理文件。 (请参阅覆盖buildPath

对于那些只想与文档树进行交互的人来说,buildPath实际上没有任何价值,用户可能会更好地扩展实际包含处理内容的GroovyDocTool。如果你这样做,你也可以重新编写构造函数来完全隐藏GroovyRootDocBuilder。 (参见新的构造函数)

GroovyDocTool

以上代码并不完美,并不完全是我提出的;相反,代码旨在强调OP中包含的一些错误假设,以及解决它们的机制。由于它只是剪切/粘贴更大的重写元素,所以它不能编译。

怪诞:

  1. 有趣的是class TestGroovyDoclet extends GroovyRootDocBuilder{ protected def sourcepaths = []; public TestGroovyDoclet() { //HARDCODE: some test values for my testing this([ '~/ ... /src/' ,'/home/ ... /src/ ... /Sample/' ,'/home/ ... /src/ ... /Sample/Results.groovy' ]); } public TestGroovyDoclet(String[] sourcepaths) { //hide the unused GroovyDocTool super(new GroovyDocTool(), sourcepaths, new ArrayList<LinkArgument>(), new Properties()); this.sourcepaths = sourcepaths; } /** * Builds the tree by recursively searching for files * <p> * It is likely useful to override the original buildTree * method as well to put some safeties in place. The parsing * routines do not do a lot of validation. For those of us * inheritting, it would be a good idea to override build * tree ot sanitize the input list as much as possible. * </p> */ @Override public void buildTree(){ def list = []; // loop through the sourcepaths to recursively find the files for (String sourcepath : sourcepaths) { def root = new File(sourcepath); if(root.exists()){ if(root.isFile()){ list << root.absolutePath; } else{ root.eachFileRecurse (FileType.FILES) { file -> list << file.absolutePath; }; } } } buildTree(list); } /** * Method to actually do the processing. Sample only, does not demonstrate anything useful. */ public void Execute(){ buildTree(); System.out.println('Begin Processing GroovyDoc'); System.out.format(' p %d\n', rootDoc.specifiedPackages().length); //System.out.format(' c %d\n', rootDoc.classes().length); int count = 0; for(def p : rootDoc.specifiedPackages()){ count += p.allClasses().length; } System.out.format(' c %d\n', count); System.out.println('Finished Processing GroovyDoc'); } public static void main(String[] args){ (new TestGroovyDoclet()).with{ it.Execute(); } } } 始终返回GroovyRootDoc.classes(不确定原因)。有必要遍历每个包,并检查作为每个包的子集的类。这是令人惊讶的,但无论如何都是理想的用法。
  2. 上面的代码只适用于groovy文件,而不是java。我认为GroovyDoc在一些java1.8语法上窒息(但我不确定)。