Java JDT-如何从CompilationUnit获取ICompilationUnit

Java JDT-如何从CompilationUnit获取ICompilationUnit,java,abstract-syntax-tree,eclipse-jdt,Java,Abstract Syntax Tree,Eclipse Jdt,这是我的密码。 我在那里做一个编译单元 ASTParser parser = ASTParser.newParser(AST.JLS8); parser.setResolveBindings(true); parser.setStatementsRecovery(true); parser.setBindingsRecovery(true); parser.setKind(ASTParser.K_COMPILATION_UNIT); parser.setEnvironment(getProjec

这是我的密码。 我在那里做一个编译单元

ASTParser parser = ASTParser.newParser(AST.JLS8);
parser.setResolveBindings(true);
parser.setStatementsRecovery(true);
parser.setBindingsRecovery(true);
parser.setKind(ASTParser.K_COMPILATION_UNIT);
parser.setEnvironment(getProjectJars(), getSrcPaths(), null, true);

parser.setSource(IOUtils.toCharArray(new FileInputStream(MY_SRC_FILE)));
parser.setUnitName(MY_SRC_FILE.getAbsolutePath());

CompilationUnit cu = (CompilationUnit) parser.createAST(null);
如何从源代码生成的CompileUnit中获取ICompilationUnit?谢谢

我找到了解决方案:

IWorkspace workspace = ResourcesPlugin.getWorkspace();
IPath path = Path.fromOSString(source.getAbsolutePath());
IFile file = workspace.getRoot().getFileForLocation(path);
ICompilationUnit compilationUnit = (ICompilationUnit) JavaCore.create(file);

我试过这个,它成功了:

ICompilationUnit cu= (ICompilationUnit)compilationUnit.getJavaElement();

第一种选择如下:

ICompilationUnit compilationUnit = JavaCore.createCompilationUnitFrom(javaFile);  
types = compilationUnit.getAllTypes();
IProject project = javaFile.getProject(); 
IJavaProject jProject = JavaCore.create(project); 
if (jProject == null || !jProject.exists()) 
{   
   return null; 
} 
IPackageFragment packageFragment = null; 
try {   
   packageFragment = jProject.findPackageFragment(
                         javaFile.getFullPath().removeLastSegments(1));     
   String unitName = javaFile.getName();    
   ICompilationUnit cu = packageFragment.getCompilationUnit(unitName);  
   return cu; 
} catch (JavaModelException e) {    
return null; 
}
第二种选择如下:

ICompilationUnit compilationUnit = JavaCore.createCompilationUnitFrom(javaFile);  
types = compilationUnit.getAllTypes();
IProject project = javaFile.getProject(); 
IJavaProject jProject = JavaCore.create(project); 
if (jProject == null || !jProject.exists()) 
{   
   return null; 
} 
IPackageFragment packageFragment = null; 
try {   
   packageFragment = jProject.findPackageFragment(
                         javaFile.getFullPath().removeLastSegments(1));     
   String unitName = javaFile.getName();    
   ICompilationUnit cu = packageFragment.getCompilationUnit(unitName);  
   return cu; 
} catch (JavaModelException e) {    
return null; 
}