代码重构 & JDT获取指定目录下Java文件对应的ICompilationUnit (可获取Binding)

Posted 同学少年

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了代码重构 & JDT获取指定目录下Java文件对应的ICompilationUnit (可获取Binding)相关的知识,希望对你有一定的参考价值。

/*
	 * javaFilePath 文件的绝对路径,比如: D:\\test\\javatp\\1B\\14638316\\14638316.java
	 * javaName   文件名,比如: 14638316.java
	 * fileDir    文件的所在文件夹路径,比如: D:\\test\\javatp\\1B\\14638316
	 */
	public static CompilationUnit getCompilationUnit(String javaFilePath, String javaName, String fileDir)
        byte[] input = null;  
        try   
            BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(javaFilePath));  
            input = new byte[bufferedInputStream.available()];  
                bufferedInputStream.read(input);  
                bufferedInputStream.close();  
         catch (FileNotFoundException e)   
            e.printStackTrace();  
         catch (IOException e)   
            e.printStackTrace();  
          
  
          
      
        
        Map<String, String> options = JavaCore.getOptions(); 
        options.put(JavaCore.COMPILER_COMPLIANCE, JavaCore.VERSION_1_8); 
        options.put(JavaCore.COMPILER_CODEGEN_TARGET_PLATFORM, 
        		JavaCore.VERSION_1_8); 
        options.put(JavaCore.COMPILER_SOURCE, JavaCore.VERSION_1_8); 
        
        ASTParser astParser = ASTParser.newParser(AST.JLS4);
        
        
        astParser.setSource(new String(input).toCharArray());
        astParser.setKind(ASTParser.K_COMPILATION_UNIT);
        astParser.setEnvironment( // apply classpath
                new String[]  "D:\\\\Program Files\\\\Java\\\\jdk1.8.0_181\\\\src.zip" , //
                new String[]fileDir, new String[]  "UTF-8" , true);
        
        astParser.setBindingsRecovery(true); 
        astParser.setResolveBindings(true); 
        astParser.setStatementsRecovery(true); 
        astParser.setBindingsRecovery(true); 
        astParser.setUnitName(javaName); 
        astParser.setCompilerOptions(options); 
        CompilationUnit compilationUnit = (CompilationUnit) (astParser.createAST(null));  
        List<?> types = compilationUnit.types(); 
       TypeDeclaration typeDeclaration  = (TypeDeclaration) types.get(0); 
        ITypeBinding binding = typeDeclaration.resolveBinding(); 
         
        //System.out.println("Analysing type: " + binding.getName());   
        return compilationUnit;  
      

这种方式可以获得Binding信息,但不可以获取IJavaElement。

以上是关于代码重构 & JDT获取指定目录下Java文件对应的ICompilationUnit (可获取Binding)的主要内容,如果未能解决你的问题,请参考以下文章

代码重构 & JDT遍历AST,获取每个节点的所有直接子节点

代码重构 & JDT遍历AST,获取每个节点的所有直接子节点

代码重构 & JDT修改Eclipse重构撤回的深度限制

代码重构 & JDT编程实现全部代码修改撤销(包括重构且不弹出确认框)

代码重构 & JDT判断一个类IType是否有子类

代码重构 & JDT判断一个方法是否是实现重写,继承重写和递归