我想对Java源代码进行一些静态代码分析。对于解析,我使用Eclipse之外的Eclipse JDT(3.6)ASTParser
,代码如下:
private static final Map<String, String> COMPILER_OPTIONS;
static {
COMPILER_OPTIONS = new HashMap<String, String>(JavaCore.getOptions());
COMPILER_OPTIONS.put(JavaCore.COMPILER_COMPLIANCE, JavaCore.VERSION_1_6);
COMPILER_OPTIONS.put(JavaCore.COMPILER_CODEGEN_TARGET_PLATFORM, JavaCore.VERSION_1_6);
COMPILER_OPTIONS.put(JavaCore.COMPILER_SOURCE, JavaCore.VERSION_1_6);
}
private CompilationUnit parseReadSourceFileIfPossible(String readSourceFile) {
CompilationUnit result = null;
if (isPossibleToParse(readSourceFile)) {
final ASTParser parser = createAndConfigureParser();
parser.setSource(readSourceFile.toCharArray());
result = (CompilationUnit) parser.createAST(null);
}
return result;
}
private ASTParser createAndConfigureParser() {
final ASTParser result = ASTParser.newParser(AST.JLS3);
result.setKind(ASTParser.K_COMPILATION_UNIT);
result.setCompilerOptions(COMPILER_OPTIONS); return result;
}
对于“普通”Java类,这种方法非常好。但是,如果我
解析以下类(ValidUnrestrictedComponent
),解析器运行
陷入困境。
package valid;
import de.htwg_konstanz.joi.annotations.JoiComponten;
@JoiComponent
public final class ValidUnrestrictedComponent {
private static final class Implementation implements TestInterface {
@Override
public int doSomething() {
// TODO Auto-generated method stub
return 0;
}
}
private ValidUnrestrictedComponent() {
throw new AssertionError();
}
public static Implementation getInstance() {
return new Implementation();
}
private static void getNothing() {
// Nothing to do here
}
private void doNothing() {
// Nothing to do here
}
}
我确实收到CompilationUnit
类型的对象,但它只包含。{
嵌套成员Implementation
及其方法。其余的课 - 就像
<{1}}或getInstance
遗失。
获得的doNothing
包含字段CompilationUnit
,其中包含以下内容
三个问题:
我在上面提到的类中看不到任何语法错误
problems
。
答案 0 :(得分:0)
你能仔细检查'readSourceFile'的内容吗?我的猜测是没有'\ n'或新行字符。缺少新行字符会导致第一条评论后的所有行成为评论本身的一部分。