Я все еще сталкиваюсь с проблемами при написании своего проекта Eclipse Java Parser. Я хочу написать парсер, который просматривает структуру одного из моих проектов рабочего пространства и возвращает все переменные. Я пробовал несколько подходов, но ни один из них не сработал.
Когда я перебираю массив IResource
, он распознает все java-классы и пакеты правильно. Но когда я пытаюсь получить доступ к соответствующему классу Java, он не работает. Он либо не находит ничего, либо выдает исключение.
Я импортировал проект, который я хочу проанализировать в моей тестовой рабочей области (он открывается автоматически при запуске проекта плагина eclipse), и я добавил проект как «настоящий» плагин в мою текущую рабочую область. Сообщения об ошибках были одинаковыми.
Может кто-нибудь, пожалуйста, скажите мне, что я делаю неправильно. Код может найти все проекты и IResources
моего рабочего пространства, но я не могу "получить доступ" к файлам.
Есть ли ошибка при преобразовании из IFile
в char[]
?
Пока мой код:
IWorkspaceRoot workspace = ResourcesPlugin.getWorkspace().getRoot();
IProject myProject = workspace.getProject("nameOfProject");
IResource[] members = myProject.getFolder ("/src/main/java/com/xy").members();
for (IResource member : members) {
if (member instanceof IContainer) {
}
if (member instanceof IFile) {
if (member != null) {
if (member.getFileExtension().equals("java")) {
//1st approach
for (Field field : member.getClass().getDeclaredFields()) {
//does not go into here
System.out.println("fields" + field.getName());
}
//2nd approach
ICompilationUnit cu = (ICompilationUnit) JavaCore.create(member);
//returns name of class
System.out.println(cu.getElementName());
//throws exception
System.out.println(cu.getTypes().length);
//3rd approach
for (TypeVariable<?> field: member.getClass().getTypeParameters()) {
//does not go into here
System.out.println(field.getName());
}
//4th approach
int i=0;
Inputstream is = ((IFile)member).getContents();
char [] buffer = new char [is.available()];
BufferedReader r = new BufferedReader(new InputStreamReader(is))
while ((i = r.read())!= -1) {
buffer[i++] = (char) i;
}
//throws exception Java Model Exception: Java Model Status [nameOfProject does not exist]
ASTParser parser = ASTParser.newParser(AST.JLS8);
parser.setSource(buffer);
parser.setKind(ASTParser.K_COMPILATION_UNIT);
parser.setResolveBindings(true);
final CompilationUnit comp = (CompilationUnit) parser.createAST(null);
comp.accept(new ASTVisitor() {
@Override
public boolean visit(VariableDeclarationFragment v) {
System.out.println(v.getName());
})
}
}
}
}