Eclipse JDT AST: problemas al analizar una clase con miembros anidados
Frecuentes
Visto 421 veces
0
Me gustaría hacer un análisis de código estático para el código fuente de Java. Para analizar, uso Eclipse JDT (3.6) ASTParser
fuera de Eclipse con el siguiente código:
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;
}
Para las clases Java "normales", este enfoque funciona perfectamente bien. Sin embargo, si analizo la siguiente clase (ValidUnrestrictedComponent
), el analizador se encuentra con problemas.
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
}
}
Recibo un objeto de tipo CompilationUnit
, sin embargo, solo contiene el miembro anidado Implementation
y su método. El resto de la clase, como
getInstance
or doNothing
no se encuentra.
El obtenido CompilationUnit
contiene un campo problems
con los siguientes tres problemas:
- DefaultProblem (id=141): Pb(240) Error de sintaxis, inserte "}" para completar ClassBody
- DefaultProblem (id=143): Pb(240) Error de sintaxis, inserte "}" para completar ClassBody
- DefaultProblem (id=164): Pb(240) Error de sintaxis, inserte "}" para completar MethodBody
No puedo ver ningún error de sintaxis en la clase mencionada anteriormente
ValidUnrestrictedComponent
.
1 Respuestas
0
¿Puedes verificar dos veces el contenido de 'readSourceFile'? Supongo que no hay '\n' o caracteres de nueva línea en eso. Si faltan caracteres de nueva línea, todas las líneas posteriores al primer comentario se convertirán en parte del propio comentario.
Respondido el 13 de junio de 12 a las 09:06
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas java eclipse eclipse-plugin abstract-syntax-tree eclipse-jdt or haz tu propia pregunta.
¡Gracias Deepak Azad! Eran los separadores de línea que faltaban. - JFFF