自定义 GroovyDocTool 没有找到任何东西
Custom GroovyDocTool not finding anything
我在使用 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
的有效参数?
GroovyDoc 的作者似乎打算在 Ant 中使用它。这意味着无法查找要处理的文件,因为您应该已经知道正在处理的文件。消费者必须指定要处理的单个文件,和调用buildPath
来实际处理文件。 (参见覆盖 buildPath
)
对于那些只想与文档树交互的人来说,GroovyDocTool
确实没有任何价值,用户最好扩展 GroovyRootDocBuilder
,它实际上包含处理的内容。如果你这样做,你还不如重写构造函数来完全隐藏 GroovyDocTool
。 (见新的构造函数)
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();
}
}
}
上面的代码并不完美,也不完全是我想出的;相反,该代码旨在强调 OP 中包含的一些错误假设,以及解决这些假设的机制。不能保证编译,因为它只是 cut/pastes 个较大重写的元素。
怪异:
- 有趣的是
GroovyRootDoc.classes
总是 returns null
(不确定为什么)。有必要遍历每个包,并检查作为每个包的子集的 类。这令人惊讶,但无论如何都是所需的用法。
- 以上代码仅适用于 groovy 个文件,不适用于 java。我认为 GroovyDoc 对某些 java1.8 语法感到窒息(但我不确定)。
我在使用 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
的有效参数?
GroovyDoc 的作者似乎打算在 Ant 中使用它。这意味着无法查找要处理的文件,因为您应该已经知道正在处理的文件。消费者必须指定要处理的单个文件,和调用buildPath
来实际处理文件。 (参见覆盖 buildPath
)
对于那些只想与文档树交互的人来说,GroovyDocTool
确实没有任何价值,用户最好扩展 GroovyRootDocBuilder
,它实际上包含处理的内容。如果你这样做,你还不如重写构造函数来完全隐藏 GroovyDocTool
。 (见新的构造函数)
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();
}
}
}
上面的代码并不完美,也不完全是我想出的;相反,该代码旨在强调 OP 中包含的一些错误假设,以及解决这些假设的机制。不能保证编译,因为它只是 cut/pastes 个较大重写的元素。
怪异:
- 有趣的是
GroovyRootDoc.classes
总是 returnsnull
(不确定为什么)。有必要遍历每个包,并检查作为每个包的子集的 类。这令人惊讶,但无论如何都是所需的用法。 - 以上代码仅适用于 groovy 个文件,不适用于 java。我认为 GroovyDoc 对某些 java1.8 语法感到窒息(但我不确定)。