Search in sources :

Example 6 with Parser

use of com.google.devtools.j2objc.util.Parser in project j2objc by google.

the class J2ObjC method createParser.

@VisibleForTesting
public static Parser createParser(Options options) {
    Parser parser = Parser.newParser(options);
    parser.addClasspathEntries(options.fileUtil().getClassPathEntries());
    parser.addClasspathEntries(options.getBootClasspath());
    parser.addSourcepathEntries(options.fileUtil().getSourcePathEntries());
    parser.setIncludeRunningVMBootclasspath(false);
    parser.setEnableDocComments(options.docCommentsEnabled());
    return parser;
}
Also used : ProGuardUsageParser(com.google.devtools.j2objc.util.ProGuardUsageParser) Parser(com.google.devtools.j2objc.util.Parser) VisibleForTesting(com.google.common.annotations.VisibleForTesting)

Example 7 with Parser

use of com.google.devtools.j2objc.util.Parser in project j2objc by google.

the class TreeShaker method getUnusedCode.

public CodeReferenceMap getUnusedCode(CodeReferenceMap inputRootSet) throws IOException {
    Parser parser = createParser(options);
    final HashMap<String, ReferenceNode> elementReferenceMap = new HashMap<>();
    final Set<String> staticSet = new HashSet<>();
    final HashMap<String, Set<String>> overrideMap = new HashMap<>();
    List<String> sourceFiles = options.getSourceFiles();
    File strippedDir = stripIncompatible(sourceFiles, parser);
    Parser.Handler handler = new Parser.Handler() {

        @Override
        public void handleParsedUnit(String path, CompilationUnit unit) {
            if (env == null) {
                env = unit.getEnv();
            } else {
            //TODO(malvania): Assertion fails! Remove this once we're sure all env utils are the same.
            //assert(unit.getEnv() == env);
            }
            new ElementReferenceMapper(unit, elementReferenceMap, staticSet, overrideMap).run();
        }
    };
    parser.parseFiles(sourceFiles, handler, options.sourceVersion());
    FileUtil.deleteTempDir(strippedDir);
    if (ErrorUtil.errorCount() > 0) {
        return null;
    }
    UnusedCodeTracker tracker = new UnusedCodeTracker(env, elementReferenceMap, staticSet, overrideMap);
    tracker.mapOverridingMethods();
    tracker.markUsedElements(inputRootSet);
    CodeReferenceMap codeMap = tracker.buildTreeShakerMap();
    return codeMap;
}
Also used : CompilationUnit(com.google.devtools.j2objc.ast.CompilationUnit) ImmutableSet(com.google.common.collect.ImmutableSet) Set(java.util.Set) HashSet(java.util.HashSet) HashMap(java.util.HashMap) ReferenceNode(com.google.devtools.treeshaker.ElementReferenceMapper.ReferenceNode) CodeReferenceMap(com.google.devtools.j2objc.util.CodeReferenceMap) ProGuardUsageParser(com.google.devtools.j2objc.util.ProGuardUsageParser) Parser(com.google.devtools.j2objc.util.Parser) RegularInputFile(com.google.devtools.j2objc.file.RegularInputFile) File(java.io.File) HashSet(java.util.HashSet)

Example 8 with Parser

use of com.google.devtools.j2objc.util.Parser in project j2objc by google.

the class TreeShaker method createParser.

private Parser createParser(Options options) throws IOException {
    Parser parser = Parser.newParser(j2objcOptions);
    parser.addSourcepathEntries(j2objcOptions.fileUtil().getSourcePathEntries());
    parser.addClasspathEntries(Strings.nullToEmpty(options.getBootclasspath()));
    parser.addClasspathEntries(j2objcOptions.fileUtil().getClassPathEntries());
    return parser;
}
Also used : ProGuardUsageParser(com.google.devtools.j2objc.util.ProGuardUsageParser) Parser(com.google.devtools.j2objc.util.Parser)

Example 9 with Parser

use of com.google.devtools.j2objc.util.Parser in project j2objc by google.

the class CycleFinder method createParser.

private Parser createParser() {
    Parser parser = Parser.newParser(j2objcOptions);
    parser.addSourcepathEntries(Strings.nullToEmpty(options.getSourcepath()));
    parser.addClasspathEntries(Strings.nullToEmpty(options.getBootclasspath()));
    parser.addClasspathEntries(Strings.nullToEmpty(options.getClasspath()));
    return parser;
}
Also used : Parser(com.google.devtools.j2objc.util.Parser)

Example 10 with Parser

use of com.google.devtools.j2objc.util.Parser in project j2objc by google.

the class CycleFinder method findCycles.

public List<List<Edge>> findCycles() throws IOException {
    Parser parser = createParser();
    NameList whitelist = NameList.createFromFiles(options.getWhitelistFiles(), options.fileEncoding());
    final GraphBuilder graphBuilder = new GraphBuilder(whitelist);
    List<String> sourceFiles = options.getSourceFiles();
    File strippedDir = stripIncompatible(sourceFiles, parser);
    Parser.Handler handler = new Parser.Handler() {

        @Override
        public void handleParsedUnit(String path, CompilationUnit unit) {
            new LambdaTypeElementAdder(unit).run();
            new OuterReferenceResolver(unit).run();
            graphBuilder.visitAST(unit);
        }
    };
    parser.parseFiles(sourceFiles, handler, options.sourceVersion());
    FileUtil.deleteTempDir(strippedDir);
    if (ErrorUtil.errorCount() > 0) {
        return null;
    }
    // Construct the graph and find cycles.
    ReferenceGraph graph = graphBuilder.constructGraph().getGraph();
    for (ReferenceGraph component : graph.getStronglyConnectedComponents(getSeedNodes(graph))) {
        handleStronglyConnectedComponent(component);
    }
    return cycles;
}
Also used : CompilationUnit(com.google.devtools.j2objc.ast.CompilationUnit) LambdaTypeElementAdder(com.google.devtools.j2objc.translate.LambdaTypeElementAdder) OuterReferenceResolver(com.google.devtools.j2objc.translate.OuterReferenceResolver) RegularInputFile(com.google.devtools.j2objc.file.RegularInputFile) File(java.io.File) Parser(com.google.devtools.j2objc.util.Parser)

Aggregations

Parser (com.google.devtools.j2objc.util.Parser)10 File (java.io.File)6 RegularInputFile (com.google.devtools.j2objc.file.RegularInputFile)5 ProGuardUsageParser (com.google.devtools.j2objc.util.ProGuardUsageParser)5 CompilationUnit (com.google.devtools.j2objc.ast.CompilationUnit)2 VisibleForTesting (com.google.common.annotations.VisibleForTesting)1 ImmutableSet (com.google.common.collect.ImmutableSet)1 InputFile (com.google.devtools.j2objc.file.InputFile)1 GenerationBatch (com.google.devtools.j2objc.pipeline.GenerationBatch)1 InputFilePreprocessor (com.google.devtools.j2objc.pipeline.InputFilePreprocessor)1 ProcessingContext (com.google.devtools.j2objc.pipeline.ProcessingContext)1 TranslationProcessor (com.google.devtools.j2objc.pipeline.TranslationProcessor)1 LambdaTypeElementAdder (com.google.devtools.j2objc.translate.LambdaTypeElementAdder)1 OuterReferenceResolver (com.google.devtools.j2objc.translate.OuterReferenceResolver)1 CodeReferenceMap (com.google.devtools.j2objc.util.CodeReferenceMap)1 ReferenceNode (com.google.devtools.treeshaker.ElementReferenceMapper.ReferenceNode)1 IOException (java.io.IOException)1 HashMap (java.util.HashMap)1 HashSet (java.util.HashSet)1 Set (java.util.Set)1