Java 类org.eclipse.jdt.core.dom.FileASTRequestor 实例源码

项目:sahagin-java    文件:SrcTreeGenerator.java   
private static void parseAST(String[] srcFiles, Charset srcCharset,
        String[] classPathEntries, FileASTRequestor requestor) {
    ASTParser parser = ASTParser.newParser(AST.JLS8);
    Map<String, String> options = JavaCore.getOptions();
    JavaCore.setComplianceOptions(JavaCore.VERSION_1_8, options);
    parser.setCompilerOptions(options);
    parser.setKind(ASTParser.K_COMPILATION_UNIT);
    parser.setResolveBindings(true);
    parser.setBindingsRecovery(true);
    parser.setEnvironment(classPathEntries, null, null, true);
    String[] srcEncodings = new String[srcFiles.length];
    for (int i = 0; i < srcEncodings.length; i++) {
        srcEncodings[i] = srcCharset.name();
    }
    parser.createASTs(
            srcFiles, srcEncodings, new String[]{}, requestor, null);
}
项目:j2objc    文件:JdtParser.java   
public void parseFiles(List<InputFile> files, final Handler handler) {
  // We need the whole SourceFile to correctly handle a parsed ADT, so we keep track of it here.
  final Map<String, InputFile> reverseMap = new LinkedHashMap<String, InputFile>();
  for (InputFile file: files) {
    reverseMap.put(file.getPath(), file);
  }

  ASTParser parser = newASTParser();
  FileASTRequestor astRequestor = new FileASTRequestor() {
    @Override
    public void acceptAST(String sourceFilePath, CompilationUnit ast) {
      logger.fine("acceptAST: " + sourceFilePath);
      int errors = ErrorUtil.errorCount();
      checkCompilationErrors(sourceFilePath, ast);
      if (errors == ErrorUtil.errorCount()) {
        handler.handleParsedUnit(reverseMap.get(sourceFilePath), ast);
      }
    }
  };
  // JDT fails to resolve all secondary bindings unless there are the same
  // number of "binding key" strings as source files. It doesn't appear to
  // matter what the binding key strings should be (as long as they're non-
  // null), so the paths array is reused.
  String[] paths = reverseMap.keySet().toArray(new String[reverseMap.size()]);
  parser.createASTs(paths, getEncodings(paths.length), paths, astRequestor, null);
}
项目:Java-RSRepair    文件:ParserContext.java   
/**
 * Create the ASTParser with the source files to generate ASTs for, and set up the
    * environment using ASTParser.setEnvironment.
    * 
    * NOTE: This MUST be called before anything else in JRSRepair.
 */
public void buildASTs() throws Exception{

    /* setEnvironment(
     * String[] classpathEntries,
     * String[] sourcepathEntries, 
     * String[] encodings,
     * boolean includeRunningVMBootclasspath) */
    parser.setEnvironment(this.classpaths, this.sourcepaths, null, true); 
    parser.setResolveBindings(true);

    /* Set up the AST handler. We need to create LineCoverage and Statements classes to store 
     * and filter the statements from the ASTs. */
    FileASTRequestor fileASTRequestor = new MutationASTRequestor(sourceFileContents, scope, faultyLineCoverage, seedLineCoverage, faultyStatements, seedStatements);

    /* createASTs(
     * String[] sourceFilePaths, 
     * String[] encodings, - the source file encodings (e.g., "ASCII", "UTF8", "UTF-16"). Can be set to null if platform encoding is sufficient.
     * String[] bindingKeys, 
     * FileASTRequestor requestor, 
     * IProgressMonitor monitor) */
    parser.createASTs(sourceFilesArray, null, new String[] {}, fileASTRequestor, null);
}
项目:RefDiff    文件:SDModelBuilder.java   
public void analyze(File rootFolder, List<String> javaFiles, final SDModel model) {
    postProcessReferences = new HashMap<RastNode, List<String>>();
    postProcessSupertypes = new HashMap<RastNode, List<String>>();
    final String projectRoot = rootFolder.getPath();
    final String[] emptyArray = new String[0];

    String[] filesArray = new String[javaFiles.size()];
    for (int i = 0; i < filesArray.length; i++) {
        filesArray[i] = rootFolder + File.separator + javaFiles.get(i).replaceAll("/", systemFileSeparator);
    }
    final String[] sourceFolders = this.inferSourceFolders(filesArray);
    final ASTParser parser = buildAstParser(sourceFolders);

    FileASTRequestor fileASTRequestor = new FileASTRequestor() {
        @Override
        public void acceptAST(String sourceFilePath, CompilationUnit ast) {
            String relativePath = sourceFilePath.substring(projectRoot.length() + 1).replaceAll(systemFileSeparator, "/");
            // IProblem[] problems = ast.getProblems();
            // if (problems.length > 0) {
            // System.out.println("problems");
            // }
            //
            try {
                char[] charArray = Util.getFileCharContent(new File(sourceFilePath), null);
                processCompilationUnit(relativePath, charArray, ast, model);
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
            // catch (DuplicateEntityException e) {
            // debug e;
            // }
        }
    };
    parser.createASTs((String[]) filesArray, null, emptyArray, fileASTRequestor, null);

    postProcessReferences(model, postProcessReferences);
    postProcessReferences = null;
    postProcessSupertypes(model);
    postProcessSupertypes = null;
}
项目:SnowGraph    文件:APIUsageExtractor.java   
private Set<Slice> generateExamples() {
    Set<Slice> slices = new HashSet<>();

    File srcFile = new File(srcPath);
    String[] testPaths = getTestFiles(srcFile).parallelStream().map(File::getAbsolutePath).toArray(String[]::new);
    String[] folderPaths = getAllFiles(srcFile).parallelStream().map(File::getParentFile).map(File::getAbsolutePath).toArray(String[]::new);

    ASTParser parser = ASTParser.newParser(AST.JLS8);
    parser.setKind(ASTParser.K_COMPILATION_UNIT);
    parser.setEnvironment(null, folderPaths, null, true);
    parser.setResolveBindings(true);
    Map<String, String> options = new Hashtable<>();
    options.put(JavaCore.COMPILER_CODEGEN_TARGET_PLATFORM, JavaCore.VERSION_1_8);
    options.put(JavaCore.COMPILER_SOURCE, JavaCore.VERSION_1_8);
    options.put(JavaCore.COMPILER_DOC_COMMENT_SUPPORT, JavaCore.ENABLED);
    parser.setCompilerOptions(options);
    parser.setBindingsRecovery(true);
    parser.createASTs(testPaths, null, new String[]{}, new FileASTRequestor() {
        @Override
        public void acceptAST(String sourceFilePath, CompilationUnit javaUnit) {
            APIMethodVisitor visitor = new APIMethodVisitor();
            javaUnit.accept(visitor);
            slices.addAll(visitor.getSlices());
        }
    }, null);
    return slices;
}
项目:java2csharp    文件:Java2CsharpMojo.java   
private void createCompilationUnitsForJavaFiles(final File inputFolder) {
    // first process input folder to find java file
    processFolderToFindJavaClass(inputFolder);

    // now prepare ASTParser to process al java file found
    ASTParser parser = ASTParser.newParser(AST.JLS8);
    parser.setKind(ASTParser.K_COMPILATION_UNIT);
    parser.setResolveBindings(true);
    parser.setBindingsRecovery(true);
    parser.setStatementsRecovery(true);
    parser.setEnvironment(new String[] {
                                        inputFolder.getAbsolutePath()
    }, new String[] {
                     inputFolder.getAbsolutePath()
    }, new String[] {
                     "UTF-8"
    }, true);

    // add compiler compliance rules to convert enums
    @SuppressWarnings("unchecked")
    Hashtable<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);

    parser.setCompilerOptions(options);
    FileASTRequestor requestor = new CustomFileASTRequestor(getLog(), inputFolder.getAbsolutePath(),
                                                            sourcePathEntry);
    parser.createASTs(sourcePathEntry.keySet().toArray(new String[0]),
                      charsetEntry.toArray(new String[0]), new String[] {
                                                                         ""
                      }, requestor, null);
}
项目:RefDiff    文件:SDModelBuilder.java   
private void analyze(File rootFolder, List<String> javaFiles, final SDModel.Snapshot model) {
        postProcessReferences = new HashMap<SDEntity, List<String>>();
        postProcessSupertypes = new HashMap<SDType, List<String>>();
        postProcessClientCode = new HashMap<String, List<SourceRepresentation>>();
        final String projectRoot = rootFolder.getPath();
        final String[] emptyArray = new String[0];

        String[] filesArray = new String[javaFiles.size()];
        for (int i = 0; i < filesArray.length; i++) {
            filesArray[i] = rootFolder + File.separator + javaFiles.get(i).replaceAll("/", systemFileSeparator);
        }
        final String[] sourceFolders = this.inferSourceFolders(filesArray);
        final ASTParser parser = buildAstParser(sourceFolders);

        FileASTRequestor fileASTRequestor = new FileASTRequestor() { 
            @Override
            public void acceptAST(String sourceFilePath, CompilationUnit ast) {
                String relativePath = sourceFilePath.substring(projectRoot.length() + 1).replaceAll(systemFileSeparator, "/");
//              IProblem[] problems = ast.getProblems();
//              if (problems.length > 0) {
//                  System.out.println("problems");
//              }
                //
                try {
                    char[] charArray = Util.getFileCharContent(new File(sourceFilePath), null);
                    processCompilationUnit(relativePath, charArray, ast, model);
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
//              catch (DuplicateEntityException e) {
                    // debug e;
//              }
            }
        };
        parser.createASTs((String[]) filesArray, null, emptyArray, fileASTRequestor, null);

        postProcessReferences(model, postProcessReferences);
        postProcessReferences = null;
        postProcessSupertypes(model);
        postProcessSupertypes = null;
        postProcessClientCode(model);
        postProcessClientCode = null;
    }
项目:SnowGraph    文件:JavaParser.java   
public static ElementInfoPool parse(String srcDir) {
    ElementInfoPool elementInfoPool = new ElementInfoPool(srcDir);

    Collection<File> javaFiles = FileUtils.listFiles(new File(srcDir), new String[]{"java"}, true);
    Set<String> srcPathSet = new HashSet<>();
    Set<String> srcFolderSet = new HashSet<>();
    for (File javaFile : javaFiles) {
        String srcPath = javaFile.getAbsolutePath();
        String srcFolderPath = javaFile.getParentFile().getAbsolutePath();
        srcPathSet.add(srcPath);
        srcFolderSet.add(srcFolderPath);
    }
    String[] srcPaths = new String[srcPathSet.size()];
    srcPathSet.toArray(srcPaths);
    NameResolver.setSrcPathSet(srcPathSet);
    String[] srcFolderPaths = new String[srcFolderSet.size()];
    srcFolderSet.toArray(srcFolderPaths);

    ASTParser parser = ASTParser.newParser(AST.JLS8);
    parser.setKind(ASTParser.K_COMPILATION_UNIT);
    parser.setEnvironment(null, srcFolderPaths, null, true);
    parser.setResolveBindings(true);
    Map<String, String> options = new Hashtable<>();
    options.put(JavaCore.COMPILER_CODEGEN_TARGET_PLATFORM, JavaCore.VERSION_1_8);
    options.put(JavaCore.COMPILER_SOURCE, JavaCore.VERSION_1_8);
    options.put(JavaCore.COMPILER_DOC_COMMENT_SUPPORT, JavaCore.ENABLED);
    parser.setCompilerOptions(options);
    parser.setBindingsRecovery(true);
    System.out.println(javaFiles.size());
    parser.createASTs(srcPaths, null, new String[]{}, new FileASTRequestor() {
        @Override
        public void acceptAST(String sourceFilePath, CompilationUnit javaUnit) {
            try {
                javaUnit.accept(new JavaASTVisitor(elementInfoPool, FileUtils.readFileToString(new File(sourceFilePath))));
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }, null);

    return elementInfoPool;
}
项目:jdt2famix    文件:InJavaImporter.java   
@Override
protected FileASTRequestor getRequestor(JavaFiles allJavaFiles) {
    return new AstRequestor(this, allJavaFiles);
}
项目:jdt2famix    文件:Importer.java   
protected abstract FileASTRequestor getRequestor(JavaFiles allJavaFiles);