5

Wie kann ich eine .java-Datei in eine CompilationUnit laden? Nehmen wir zum Beispiel an, dass ich in meinem aktuellen Projekt eine A.java-Datei habe. Ich möchte es in eine CompilationUnit laden und dann an den ASTParser übergeben. Es ist nicht eine Option, es einfach als Klartext zu laden, da es in diesem Fall scheint, dass ich die verbindlichen Informationen im AST nicht bekommen werde.Eclipse erstellen CompilationUnit von .java Datei

Antwort

9

Sie können die Projekte mit den Bibliotheken jdt und eclipse core laden.

Mit dem folgenden Code können Sie alle Projekte im Arbeitsbereich laden.

IWorkspace workspace = ResourcesPlugin.getWorkspace(); 
IWorkspaceRoot root = workspace.getRoot(); 
// Get all projects in the workspace 
IProject[] projects = root.getProjects(); 

Dann können Sie Pakete und wiederum die Java-Dateien erhalten.

IPackageFragment[] packages = JavaCore.create(project).getPackageFragments(); 
IPackageFragment mypackage = packages.get(0); // implement your own logic to select package 
ICompilationUnit unit = mypackage.getCompilationUnits(); 

Dann können Sie diese ICompilationUnit Objekt verwenden, für das Erhalten der Compilation

ASTParser parser = ASTParser.newParser(AST.JLS3); 
parser.setKind(ASTParser.K_COMPILATION_UNIT); 
parser.setSource(unit); 
parser.setResolveBindings(true); 
CompilationUnit cUnit = parser.createAST(null); 

Dieses Compilation Objekt kann auf das ASTParser weitergegeben werden.

+0

Dies funktioniert nur für Eclipse-Projekte? Das heißt, es wird nicht für Java-Projekte funktionieren. – bellpeace

+0

Sie können JDT nicht in Java-Projekten verwenden, indem Sie JAR-Dateien verwenden. Um JDT zu verwenden, muss das Programm als Plug-in (oder zumindest als OSGi-fähige Anwendung) ausgeführt werden. –

+0

Ok, also kann ich die .java-Datei über diesen Ansatz nur für Eclipse-Projekte in CompilationUnit laden. Zu guter Letzt ist es möglich, JDT außerhalb der Eclipse-Projekte zu verwenden, indem Sie setSource (char []) und setEnvironment-Methoden verwenden. (ab Version 3.6) – bellpeace