/*******************************************************************************
* Copyright (c) 2012-2015 Codenvy, S.A.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Codenvy, S.A. - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.core.dom;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jdt.core.ICompilationUnit;
import java.util.Map;
/**
* @author Evgen Vidolob
*/
public class CheAST {
/**
* Internal method.
* <p>
* This method converts the given internal compiler AST for the given source string
* into a compilation unit. This method is not intended to be called by clients.
* </p>
*
* @param level
* the API level; one of the <code>JLS*</code> level constants
* @param compilationUnitDeclaration
* an internal AST node for a compilation unit declaration
* @param options
* compiler options
* @param workingCopy
* the working copy that the AST is created from
* @param monitor
* the progress monitor used to report progress and request cancellation,
* or <code>null</code> if none
* @param isResolved
* whether the given compilation unit declaration is resolved
* @return the compilation unit node
* @noreference This method is not intended to be referenced by clients.
* @since 3.4
*/
public static CompilationUnit convertCompilationUnit(
int level,
org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration compilationUnitDeclaration,
Map options,
boolean isResolved,
org.eclipse.jdt.internal.core.CompilationUnit workingCopy,
int reconcileFlags,
IProgressMonitor monitor) {
ASTConverter converter = new ASTConverter(options, isResolved, monitor);
AST ast = AST.newAST(level);
int savedDefaultNodeFlag = ast.getDefaultNodeFlag();
ast.setDefaultNodeFlag(ASTNode.ORIGINAL);
BindingResolver resolver = null;
if (isResolved) {
resolver = new DefaultBindingResolver(compilationUnitDeclaration.scope, workingCopy.owner,
new DefaultBindingResolver.BindingTables(), false, true);
((DefaultBindingResolver)resolver).isRecoveringBindings = (reconcileFlags & ICompilationUnit.ENABLE_BINDINGS_RECOVERY) != 0;
ast.setFlag(AST.RESOLVED_BINDINGS);
} else {
resolver = new BindingResolver();
}
ast.setFlag(reconcileFlags);
ast.setBindingResolver(resolver);
converter.setAST(ast);
CompilationUnit unit = converter.convert(compilationUnitDeclaration, workingCopy.getContents());
unit.setLineEndTable(compilationUnitDeclaration.compilationResult.getLineSeparatorPositions());
unit.setTypeRoot(workingCopy.originalFromClone());
ast.setDefaultNodeFlag(savedDefaultNodeFlag);
return unit;
}
}