2011-07-20 55 views
0

我倾向于在我的代码中使用大量换行符来保持大部分内容都在80个字符的行宽内。虽然有些人可能会发现这完全无用,但我喜欢在垂直旋转的屏幕上编辑代码,并且在做差异时也喜欢这种狭窄的布局。无论如何,在生成JavaDoc时,这确实给了我一个意想不到的结果,更具体地说是方法签名。JavaDoc方法签名缩进

假设我有以下几点:

public static 
     <C extends AcmeConstants, 
     B extends AcmeBundle<C>, 
     R extends AcmeBundleProvider<C, B>> //Type params 
     R //Return type 
     newInstance(final Class<R> spiClass, final String implementationClassName) 
     throws AcmeException { 

    return newInstance(spiClass, 
         implementationClassName, 
         Thread.currentThread().getContextClassLoader()); 
} 

疯狂的类型参数不谈,你可以看到我对齐类型参数,可以返回类型,方法声明和throws子句使事情有所不同。再次,您可能会发现这种迷人或彻底的迟钝,但是在​​生成JavaDoc时会出现问题。我所得到的是文档,其中方法参数分别放在一个新行上并对齐,即使我没有这样做。不是一个真正的问题,但奇怪的是它将类型参数声明转换为一行。然而,真正的踢球者是,它然后将投掷条款放在一个新的线上,并带有原始缩进!

看一看,看看我的意思是:

public static <C extends AcmeConstants,B extends AcmeBundle<C>,R extends AcmeBundleProvider<C,B>> R newInstance(Class<R> spiClass, 
                               String implementationClassName) 
                   throws AcmeException 

这几乎是完全一样,它看起来在生成的Javadoc。有没有办法让它停止这样做并使空白区域正常化?现在我必须选择更改我的代码格式或具有奇怪的JavaDoc。

顺便说一句,我使用Maven JavaDoc插件生成,但使用不同方法时结果相同。

+3

我相信你可以编辑javadoc创建页面将使用的CSS。这可能会让你得到一些你想要的东西。但说实话?我会放弃它。虽然它可能会让你感到不适,但这实际上是一种标准。把你的强迫症放在一边,专注于完成实际工作。 (我总是与自己斗争,所以我知道你来自哪里。) – Marvo

+0

@Marvo哈哈,它的OCD好吧:D可能花太多时间格式化代码。至少我已经停止分解在多行的异常抛出字符串文字。关于CSS,恐怕在这里无济于事。生成的HTML使用“PRE”标签,这会导致所有空白区域与文件中的完全相同。 –

+0

是的,在Javadoc中处理long类型的参数声明并不是最优的。虽然(如jackrabbit所说),但与源代码格式无关。 –

回答

4

Javadoc由Doclet生成,它只能看到代码的解析版本。它将throws子句与您的原始源相似对齐是巧合。您看到的签名实际上是从框架交给Doclet的MethodDoc生成的。在更改Doclet代码之后,您无法更改输出格式。没有什么能够阻止你对它进行后期处理,但我怀疑这是值得的。

顺便说一句,在互联网上替代doclets是available,这可能更适合定制。

+0

确实,刚刚尝试过,它的代码对输出格式没有任何影响。这似乎从一开始就有意义,但这是一个巧合,我没有看到它。奇怪的是,由此产生的格式看起来很奇怪,在观看JavaDocs之前从未真正注意过。 感谢您的澄清!由于缺少自定义功能,因此无法完成,因此我会将其保留原样。 –