Example usage for org.eclipse.jdt.core.dom CompilationUnit setTypeRoot

List of usage examples for org.eclipse.jdt.core.dom CompilationUnit setTypeRoot

Introduction

In this page you can find the example usage for org.eclipse.jdt.core.dom CompilationUnit setTypeRoot.

Prototype

void setTypeRoot(ITypeRoot typeRoot) 

Source Link

Document

Sets the Java type root (a org.eclipse.jdt.core.ICompilationUnit compilation unit or a org.eclipse.jdt.core.IClassFile class file ) this compilation unit was created from, or null if it was not created from a Java type root.

Usage

From source file:org.eclipse.jdt.core.dom.CompilationUnitResolver.java

License:Open Source License

public static void parse(ICompilationUnit[] compilationUnits, ASTRequestor astRequestor, int apiLevel,
        Map options, int flags, IProgressMonitor monitor) {
    try {/*  www. j  a  v  a 2 s .  c o  m*/
        CompilerOptions compilerOptions = new CompilerOptions(options);
        compilerOptions.ignoreMethodBodies = (flags & ICompilationUnit.IGNORE_METHOD_BODIES) != 0;
        Parser parser = new CommentRecorderParser(
                new ProblemReporter(DefaultErrorHandlingPolicies.proceedWithAllProblems(), compilerOptions,
                        new DefaultProblemFactory()),
                false);
        int unitLength = compilationUnits.length;
        if (monitor != null)
            monitor.beginTask("", unitLength); //$NON-NLS-1$
        for (int i = 0; i < unitLength; i++) {
            org.eclipse.jdt.internal.compiler.env.ICompilationUnit sourceUnit = (org.eclipse.jdt.internal.compiler.env.ICompilationUnit) compilationUnits[i];
            CompilationResult compilationResult = new CompilationResult(sourceUnit, 0, 0,
                    compilerOptions.maxProblemsPerUnit);
            CompilationUnitDeclaration compilationUnitDeclaration = parser.dietParse(sourceUnit,
                    compilationResult);

            if (compilationUnitDeclaration.ignoreMethodBodies) {
                compilationUnitDeclaration.ignoreFurtherInvestigation = true;
                // if initial diet parse did not work, no need to dig into method bodies.
                continue;
            }

            //fill the methods bodies in order for the code to be generated
            //real parse of the method....
            org.eclipse.jdt.internal.compiler.ast.TypeDeclaration[] types = compilationUnitDeclaration.types;
            if (types != null) {
                for (int j = 0, typeLength = types.length; j < typeLength; j++) {
                    types[j].parseMethods(parser, compilationUnitDeclaration);
                }
            }

            // convert AST
            CompilationUnit node = convert(compilationUnitDeclaration, parser.scanner.getSource(), apiLevel,
                    options, false/*don't resolve binding*/, null/*no owner needed*/,
                    null/*no binding table needed*/, flags /* flags */, monitor, true);
            node.setTypeRoot(compilationUnits[i]);

            // accept AST
            astRequestor.acceptAST(compilationUnits[i], node);

            if (monitor != null)
                monitor.worked(1);
        }
    } finally {
        if (monitor != null)
            monitor.done();
    }
}

From source file:org.eclipse.jdt.core.dom.CompilationUnitResolver.java

License:Open Source License

public static void parse(String[] sourceUnits, String[] encodings, FileASTRequestor astRequestor, int apiLevel,
        Map options, int flags, IProgressMonitor monitor) {
    try {//  w  w w. j av a2 s . co  m
        CompilerOptions compilerOptions = new CompilerOptions(options);
        compilerOptions.ignoreMethodBodies = (flags & ICompilationUnit.IGNORE_METHOD_BODIES) != 0;
        Parser parser = new CommentRecorderParser(
                new ProblemReporter(DefaultErrorHandlingPolicies.proceedWithAllProblems(), compilerOptions,
                        new DefaultProblemFactory()),
                false);
        int unitLength = sourceUnits.length;
        if (monitor != null)
            monitor.beginTask("", unitLength); //$NON-NLS-1$
        for (int i = 0; i < unitLength; i++) {
            char[] contents = null;
            String encoding = encodings != null ? encodings[i] : null;
            try {
                contents = Util.getFileCharContent(new File(sourceUnits[i]), encoding);
            } catch (IOException e) {
                // go to the next unit
                continue;
            }
            if (contents == null) {
                // go to the next unit
                continue;
            }
            org.eclipse.jdt.internal.compiler.batch.CompilationUnit compilationUnit = new org.eclipse.jdt.internal.compiler.batch.CompilationUnit(
                    contents, sourceUnits[i], encoding);
            org.eclipse.jdt.internal.compiler.env.ICompilationUnit sourceUnit = compilationUnit;
            CompilationResult compilationResult = new CompilationResult(sourceUnit, 0, 0,
                    compilerOptions.maxProblemsPerUnit);
            CompilationUnitDeclaration compilationUnitDeclaration = parser.dietParse(sourceUnit,
                    compilationResult);

            if (compilationUnitDeclaration.ignoreMethodBodies) {
                compilationUnitDeclaration.ignoreFurtherInvestigation = true;
                // if initial diet parse did not work, no need to dig into method bodies.
                continue;
            }

            //fill the methods bodies in order for the code to be generated
            //real parse of the method....
            org.eclipse.jdt.internal.compiler.ast.TypeDeclaration[] types = compilationUnitDeclaration.types;
            if (types != null) {
                for (int j = 0, typeLength = types.length; j < typeLength; j++) {
                    types[j].parseMethods(parser, compilationUnitDeclaration);
                }
            }

            // convert AST
            CompilationUnit node = convert(compilationUnitDeclaration, parser.scanner.getSource(), apiLevel,
                    options, false/*don't resolve binding*/, null/*no owner needed*/,
                    null/*no binding table needed*/, flags /* flags */, monitor, true);
            node.setTypeRoot(null);

            // accept AST
            astRequestor.acceptAST(sourceUnits[i], node);

            if (monitor != null)
                monitor.worked(1);
        }
    } finally {
        if (monitor != null)
            monitor.done();
    }
}

From source file:org.eclipse.jdt.core.dom.CompilationUnitResolver.java

License:Open Source License

private void resolve(ICompilationUnit[] compilationUnits, String[] bindingKeys, ASTRequestor astRequestor,
        int apiLevel, Map compilerOptions, WorkingCopyOwner owner, int flags) {

    // temporarily connect ourselves to the ASTResolver - must disconnect when done
    astRequestor.compilationUnitResolver = this;
    this.bindingTables = new DefaultBindingResolver.BindingTables();
    CompilationUnitDeclaration unit = null;
    try {/*w w  w .  j  a  v  a 2 s .co  m*/
        int length = compilationUnits.length;
        org.eclipse.jdt.internal.compiler.env.ICompilationUnit[] sourceUnits = new org.eclipse.jdt.internal.compiler.env.ICompilationUnit[length];
        System.arraycopy(compilationUnits, 0, sourceUnits, 0, length);
        beginToCompile(sourceUnits, bindingKeys);
        // process all units (some more could be injected in the loop by the lookup environment)
        for (int i = 0; i < this.totalUnits; i++) {
            if (resolvedRequestedSourcesAndKeys(i)) {
                // no need to keep resolving if no more ASTs and no more binding keys are needed
                // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=114935
                // cleanup remaining units
                for (; i < this.totalUnits; i++) {
                    this.unitsToProcess[i].cleanUp();
                    this.unitsToProcess[i] = null;
                }
                break;
            }
            unit = this.unitsToProcess[i];
            try {
                super.process(unit, i); // this.process(...) is optimized to not process already known units

                // requested AST
                char[] fileName = unit.compilationResult.getFileName();
                ICompilationUnit source = (ICompilationUnit) this.requestedSources.get(fileName);
                if (source != null) {
                    // convert AST
                    CompilationResult compilationResult = unit.compilationResult;
                    org.eclipse.jdt.internal.compiler.env.ICompilationUnit sourceUnit = compilationResult.compilationUnit;
                    char[] contents = sourceUnit.getContents();
                    AST ast = AST.newAST(apiLevel);
                    ast.setFlag(flags | AST.RESOLVED_BINDINGS);
                    ast.setDefaultNodeFlag(ASTNode.ORIGINAL);
                    ASTConverter converter = new ASTConverter(compilerOptions, true/*need to resolve bindings*/,
                            this.monitor);
                    BindingResolver resolver = new DefaultBindingResolver(unit.scope, owner, this.bindingTables,
                            (flags & ICompilationUnit.ENABLE_BINDINGS_RECOVERY) != 0, this.fromJavaProject);
                    ast.setBindingResolver(resolver);
                    converter.setAST(ast);
                    CompilationUnit compilationUnit = converter.convert(unit, contents);
                    compilationUnit.setTypeRoot(source);
                    compilationUnit.setLineEndTable(compilationResult.getLineSeparatorPositions());
                    ast.setDefaultNodeFlag(0);
                    ast.setOriginalModificationCount(ast.modificationCount());

                    // pass it to requestor
                    astRequestor.acceptAST(source, compilationUnit);

                    worked(1);

                    // remove at the end so that we don't resolve twice if a source and a key for the same file name have been requested
                    this.requestedSources.put(fileName, null); // mark it as removed
                }

                // requested binding
                Object key = this.requestedKeys.get(fileName);
                if (key != null) {
                    if (key instanceof BindingKeyResolver) {
                        reportBinding(key, astRequestor, owner, unit);
                        worked(1);
                    } else if (key instanceof ArrayList) {
                        Iterator iterator = ((ArrayList) key).iterator();
                        while (iterator.hasNext()) {
                            reportBinding(iterator.next(), astRequestor, owner, unit);
                            worked(1);
                        }
                    }

                    // remove at the end so that we don't resolve twice if a source and a key for the same file name have been requested
                    this.requestedKeys.put(fileName, null); // mark it as removed
                }
            } finally {
                // cleanup compilation unit result
                unit.cleanUp();
            }
            this.unitsToProcess[i] = null; // release reference to processed unit declaration
            this.requestor.acceptResult(unit.compilationResult.tagAsAccepted());
        }

        // remaining binding keys
        DefaultBindingResolver resolver = new DefaultBindingResolver(this.lookupEnvironment, owner,
                this.bindingTables, (flags & ICompilationUnit.ENABLE_BINDINGS_RECOVERY) != 0, true);
        Object[] keys = this.requestedKeys.valueTable;
        for (int j = 0, keysLength = keys.length; j < keysLength; j++) {
            BindingKeyResolver keyResolver = (BindingKeyResolver) keys[j];
            if (keyResolver == null)
                continue;
            Binding compilerBinding = keyResolver.getCompilerBinding();
            IBinding binding = compilerBinding == null ? null : resolver.getBinding(compilerBinding);
            // pass it to requestor
            astRequestor.acceptBinding(((BindingKeyResolver) this.requestedKeys.valueTable[j]).getKey(),
                    binding);
            worked(1);
        }
    } catch (OperationCanceledException e) {
        throw e;
    } catch (AbortCompilation e) {
        this.handleInternalException(e, unit);
    } catch (Error e) {
        this.handleInternalException(e, unit, null);
        throw e; // rethrow
    } catch (RuntimeException e) {
        this.handleInternalException(e, unit, null);
        throw e; // rethrow
    } finally {
        // disconnect ourselves from ast requestor
        astRequestor.compilationUnitResolver = null;
    }
}

From source file:org.eclipse.jdt.core.dom.CompilationUnitResolver.java

License:Open Source License

private void resolve(String[] sourceCompilationUnits, String[] encodings, String[] bindingKeys,
        FileASTRequestor astRequestor, int apiLevel, Map compilerOptions, int flags) {

    // temporarily connect ourselves to the ASTResolver - must disconnect when done
    astRequestor.compilationUnitResolver = this;
    this.bindingTables = new DefaultBindingResolver.BindingTables();
    CompilationUnitDeclaration unit = null;
    try {//from   ww  w  .j  a v  a 2 s .  co  m
        int length = sourceCompilationUnits.length;
        org.eclipse.jdt.internal.compiler.env.ICompilationUnit[] sourceUnits = new org.eclipse.jdt.internal.compiler.env.ICompilationUnit[length];
        int count = 0;
        for (int i = 0; i < length; i++) {
            char[] contents = null;
            String encoding = encodings != null ? encodings[i] : null;
            String sourceUnitPath = sourceCompilationUnits[i];
            try {
                contents = Util.getFileCharContent(new File(sourceUnitPath), encoding);
            } catch (IOException e) {
                // go to the next unit
                continue;
            }
            if (contents == null) {
                // go to the next unit
                continue;
            }
            sourceUnits[count++] = new org.eclipse.jdt.internal.compiler.batch.CompilationUnit(contents,
                    sourceUnitPath, encoding);
        }
        beginToCompile(sourceUnits, bindingKeys);
        // process all units (some more could be injected in the loop by the lookup environment)
        for (int i = 0; i < this.totalUnits; i++) {
            if (resolvedRequestedSourcesAndKeys(i)) {
                // no need to keep resolving if no more ASTs and no more binding keys are needed
                // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=114935
                // cleanup remaining units
                for (; i < this.totalUnits; i++) {
                    this.unitsToProcess[i].cleanUp();
                    this.unitsToProcess[i] = null;
                }
                break;
            }
            unit = this.unitsToProcess[i];
            try {
                super.process(unit, i); // this.process(...) is optimized to not process already known units

                // requested AST
                char[] fileName = unit.compilationResult.getFileName();
                org.eclipse.jdt.internal.compiler.env.ICompilationUnit source = (org.eclipse.jdt.internal.compiler.env.ICompilationUnit) this.requestedSources
                        .get(fileName);
                if (source != null) {
                    // convert AST
                    CompilationResult compilationResult = unit.compilationResult;
                    org.eclipse.jdt.internal.compiler.env.ICompilationUnit sourceUnit = compilationResult.compilationUnit;
                    char[] contents = sourceUnit.getContents();
                    AST ast = AST.newAST(apiLevel);
                    ast.setFlag(flags | AST.RESOLVED_BINDINGS);
                    ast.setDefaultNodeFlag(ASTNode.ORIGINAL);
                    ASTConverter converter = new ASTConverter(compilerOptions, true/*need to resolve bindings*/,
                            this.monitor);
                    BindingResolver resolver = new DefaultBindingResolver(unit.scope, null, this.bindingTables,
                            (flags & ICompilationUnit.ENABLE_BINDINGS_RECOVERY) != 0, this.fromJavaProject);
                    ast.setBindingResolver(resolver);
                    converter.setAST(ast);
                    CompilationUnit compilationUnit = converter.convert(unit, contents);
                    compilationUnit.setTypeRoot(null);
                    compilationUnit.setLineEndTable(compilationResult.getLineSeparatorPositions());
                    ast.setDefaultNodeFlag(0);
                    ast.setOriginalModificationCount(ast.modificationCount());

                    // pass it to requestor
                    astRequestor.acceptAST(new String(source.getFileName()), compilationUnit);

                    worked(1);

                    // remove at the end so that we don't resolve twice if a source and a key for the same file name have been requested
                    this.requestedSources.put(fileName, null); // mark it as removed
                }

                // requested binding
                Object key = this.requestedKeys.get(fileName);
                if (key != null) {
                    if (key instanceof BindingKeyResolver) {
                        reportBinding(key, astRequestor, unit);
                        worked(1);
                    } else if (key instanceof ArrayList) {
                        Iterator iterator = ((ArrayList) key).iterator();
                        while (iterator.hasNext()) {
                            reportBinding(iterator.next(), astRequestor, unit);
                            worked(1);
                        }
                    }

                    // remove at the end so that we don't resolve twice if a source and a key for the same file name have been requested
                    this.requestedKeys.put(fileName, null); // mark it as removed
                }
            } finally {
                // cleanup compilation unit result
                unit.cleanUp();
            }
            this.unitsToProcess[i] = null; // release reference to processed unit declaration
            this.requestor.acceptResult(unit.compilationResult.tagAsAccepted());
        }

        // remaining binding keys
        DefaultBindingResolver resolver = new DefaultBindingResolver(this.lookupEnvironment, null,
                this.bindingTables, (flags & ICompilationUnit.ENABLE_BINDINGS_RECOVERY) != 0, true);
        Object[] keys = this.requestedKeys.valueTable;
        for (int j = 0, keysLength = keys.length; j < keysLength; j++) {
            BindingKeyResolver keyResolver = (BindingKeyResolver) keys[j];
            if (keyResolver == null)
                continue;
            Binding compilerBinding = keyResolver.getCompilerBinding();
            IBinding binding = compilerBinding == null ? null : resolver.getBinding(compilerBinding);
            // pass it to requestor
            astRequestor.acceptBinding(((BindingKeyResolver) this.requestedKeys.valueTable[j]).getKey(),
                    binding);
            worked(1);
        }
    } catch (OperationCanceledException e) {
        throw e;
    } catch (AbortCompilation e) {
        this.handleInternalException(e, unit);
    } catch (Error e) {
        this.handleInternalException(e, unit, null);
        throw e; // rethrow
    } catch (RuntimeException e) {
        this.handleInternalException(e, unit, null);
        throw e; // rethrow
    } finally {
        // disconnect ourselves from ast requestor
        astRequestor.compilationUnitResolver = null;
    }
}