X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/CompilationUnitProblemFinder.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/CompilationUnitProblemFinder.java index 243ddc2..a2a534e 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/CompilationUnitProblemFinder.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/CompilationUnitProblemFinder.java @@ -49,46 +49,53 @@ import org.eclipse.core.runtime.IProgressMonitor; public class CompilationUnitProblemFinder extends Compiler { /** - * Answer a new CompilationUnitVisitor using the given name environment and compiler options. - * The environment and options will be in effect for the lifetime of the compiler. - * When the compiler is run, compilation results are sent to the given requestor. - * - * @param environment org.eclipse.jdt.internal.compiler.api.env.INameEnvironment - * Environment used by the compiler in order to resolve type and package - * names. The name environment implements the actual connection of the compiler - * to the outside world (e.g. in batch mode the name environment is performing - * pure file accesses, reuse previous build state or connection to repositories). - * Note: the name environment is responsible for implementing the actual classpath - * rules. - * - * @param policy org.eclipse.jdt.internal.compiler.api.problem.IErrorHandlingPolicy - * Configurable part for problem handling, allowing the compiler client to - * specify the rules for handling problems (stop on first error or accumulate - * them all) and at the same time perform some actions such as opening a dialog - * in UI when compiling interactively. - * @see org.eclipse.jdt.internal.compiler.api.problem.DefaultErrorHandlingPolicies + * Answer a new CompilationUnitVisitor using the given name environment and + * compiler options. The environment and options will be in effect for the + * lifetime of the compiler. When the compiler is run, compilation results + * are sent to the given requestor. * - * @param settings The settings to use for the resolution. - * - * @param requestor org.eclipse.jdt.internal.compiler.api.ICompilerRequestor - * Component which will receive and persist all compilation results and is intended - * to consume them as they are produced. Typically, in a batch compiler, it is - * responsible for writing out the actual .class files to the file system. - * @see org.eclipse.jdt.internal.compiler.api.CompilationResult - * - * @param problemFactory org.eclipse.jdt.internal.compiler.api.problem.IProblemFactory - * Factory used inside the compiler to create problem descriptors. It allows the - * compiler client to supply its own representation of compilation problems in - * order to avoid object conversions. Note that the factory is not supposed - * to accumulate the created problems, the compiler will gather them all and hand - * them back as part of the compilation unit result. + * @param environment + * org.eclipse.jdt.internal.compiler.api.env.INameEnvironment + * Environment used by the compiler in order to resolve type and + * package names. The name environment implements the actual + * connection of the compiler to the outside world (e.g. in batch + * mode the name environment is performing pure file accesses, + * reuse previous build state or connection to repositories). + * Note: the name environment is responsible for implementing the + * actual classpath rules. + * + * @param policy + * org.eclipse.jdt.internal.compiler.api.problem.IErrorHandlingPolicy + * Configurable part for problem handling, allowing the compiler + * client to specify the rules for handling problems (stop on + * first error or accumulate them all) and at the same time + * perform some actions such as opening a dialog in UI when + * compiling interactively. + * @see org.eclipse.jdt.internal.compiler.api.problem.DefaultErrorHandlingPolicies + * + * @param settings + * The settings to use for the resolution. + * + * @param requestor + * org.eclipse.jdt.internal.compiler.api.ICompilerRequestor + * Component which will receive and persist all compilation + * results and is intended to consume them as they are produced. + * Typically, in a batch compiler, it is responsible for writing + * out the actual .class files to the file system. + * @see org.eclipse.jdt.internal.compiler.api.CompilationResult + * + * @param problemFactory + * org.eclipse.jdt.internal.compiler.api.problem.IProblemFactory + * Factory used inside the compiler to create problem + * descriptors. It allows the compiler client to supply its own + * representation of compilation problems in order to avoid + * object conversions. Note that the factory is not supposed to + * accumulate the created problems, the compiler will gather them + * all and hand them back as part of the compilation unit result. */ - protected CompilationUnitProblemFinder( - INameEnvironment environment, - IErrorHandlingPolicy policy, - Map settings, - ICompilerRequestor requestor, - IProblemFactory problemFactory) { + protected CompilationUnitProblemFinder(INameEnvironment environment, + IErrorHandlingPolicy policy, Map settings, + ICompilerRequestor requestor, IProblemFactory problemFactory) { super(environment, policy, settings, requestor, problemFactory, true); } @@ -97,22 +104,22 @@ public class CompilationUnitProblemFinder extends Compiler { * Add additional source types */ public void accept(ISourceType[] sourceTypes, PackageBinding packageBinding) { - // ensure to jump back to toplevel type for first one (could be a member) -// while (sourceTypes[0].getEnclosingType() != null) -// sourceTypes[0] = sourceTypes[0].getEnclosingType(); + // ensure to jump back to toplevel type for first one (could be a + // member) + // while (sourceTypes[0].getEnclosingType() != null) + // sourceTypes[0] = sourceTypes[0].getEnclosingType(); - CompilationResult result = - new CompilationResult(sourceTypes[0].getFileName(), 1, 1, 10); //this.options.maxProblemsPerUnit); + CompilationResult result = new CompilationResult(sourceTypes[0] + .getFileName(), 1, 1, 10); // this.options.maxProblemsPerUnit); // need to hold onto this - CompilationUnitDeclaration unit = - SourceTypeConverter.buildCompilationUnit( - sourceTypes,//sourceTypes[0] is always toplevel here - true, // need field and methods - true, // need member types - true, // need field initialization - lookupEnvironment.problemReporter, - result); + CompilationUnitDeclaration unit = SourceTypeConverter + .buildCompilationUnit(sourceTypes,// sourceTypes[0] is always + // toplevel here + true, // need field and methods + true, // need member types + true, // need field initialization + lookupEnvironment.problemReporter, result); if (unit != null) { this.lookupEnvironment.buildTypeBindings(unit); @@ -121,20 +128,21 @@ public class CompilationUnitProblemFinder extends Compiler { } /* - * Low-level API performing the actual compilation + * Low-level API performing the actual compilation */ protected static IErrorHandlingPolicy getHandlingPolicy() { return DefaultErrorHandlingPolicies.proceedWithAllProblems(); } - protected static INameEnvironment getNameEnvironment(ICompilationUnit sourceUnit) - throws JavaModelException { - return (SearchableEnvironment) ((JavaProject) sourceUnit.getJavaProject()) - .getSearchableNameEnvironment(); - } + protected static INameEnvironment getNameEnvironment( + ICompilationUnit sourceUnit) throws JavaModelException { + return (SearchableEnvironment) ((JavaProject) sourceUnit + .getJavaProject()).getSearchableNameEnvironment(); + } /* - * Answer the component to which will be handed back compilation results from the compiler + * Answer the component to which will be handed back compilation results + * from the compiler */ protected static ICompilerRequestor getRequestor() { return new ICompilerRequestor() { @@ -143,44 +151,32 @@ public class CompilationUnitProblemFinder extends Compiler { }; } - protected static IProblemFactory getProblemFactory( - final char[] fileName, - final IProblemRequestor problemRequestor, - final IProgressMonitor monitor) { + protected static IProblemFactory getProblemFactory(final char[] fileName, + final IProblemRequestor problemRequestor, + final IProgressMonitor monitor) { return new DefaultProblemFactory(Locale.getDefault()) { - public IProblem createProblem( - char[] originatingFileName, - int problemId, - String[] problemArguments, - String[] messageArguments, - int severity, - int startPosition, - int endPosition, - int lineNumber) { - - if (monitor != null && monitor.isCanceled()){ + public IProblem createProblem(char[] originatingFileName, + int problemId, String[] problemArguments, + String[] messageArguments, int severity, int startPosition, + int endPosition, int lineNumber) { + + if (monitor != null && monitor.isCanceled()) { throw new AbortCompilation(true, null); // silent abort } - - IProblem problem = - super.createProblem( - originatingFileName, - problemId, - problemArguments, - messageArguments, - severity, - startPosition, - endPosition, - lineNumber); + + IProblem problem = super.createProblem(originatingFileName, + problemId, problemArguments, messageArguments, + severity, startPosition, endPosition, lineNumber); // only report local problems - if (CharOperation.equals(originatingFileName, fileName)){ - if (JavaModelManager.VERBOSE){ - System.out.println("PROBLEM FOUND while reconciling : "+problem.getMessage());//$NON-NLS-1$ + if (CharOperation.equals(originatingFileName, fileName)) { + if (JavaModelManager.VERBOSE) { + System.out + .println("PROBLEM FOUND while reconciling : " + problem.getMessage());//$NON-NLS-1$ } problemRequestor.acceptProblem(problem); } - if (monitor != null && monitor.isCanceled()){ + if (monitor != null && monitor.isCanceled()) { throw new AbortCompilation(true, null); // silent abort } @@ -190,134 +186,124 @@ public class CompilationUnitProblemFinder extends Compiler { } public static CompilationUnitDeclaration process( - CompilationUnitDeclaration unit, - ICompilationUnit unitElement, - char[] contents, - UnitParser parser, + CompilationUnitDeclaration unit, ICompilationUnit unitElement, + char[] contents, UnitParser parser, WorkingCopyOwner workingCopyOwner, - IProblemRequestor problemRequestor, - IProblemFactory problemFactory, - boolean cleanupCU, - IProgressMonitor monitor) + IProblemRequestor problemRequestor, IProblemFactory problemFactory, + boolean cleanupCU, IProgressMonitor monitor) throws JavaModelException { - char[] fileName = unitElement.getElementName().toCharArray(); - - JavaProject project = (JavaProject) unitElement.getJavaProject(); - CompilationUnitProblemFinder problemFinder = - new CompilationUnitProblemFinder( - project.newSearchableNameEnvironment(workingCopyOwner), - getHandlingPolicy(), - project.getOptions(true), - getRequestor(), - problemFactory); - if (parser != null) { - problemFinder.parser = parser; - } + char[] fileName = unitElement.getElementName().toCharArray(); - try { - - IPackageFragment packageFragment = (IPackageFragment)unitElement.getAncestor(IJavaElement.PACKAGE_FRAGMENT); - char[][] expectedPackageName = null; - if (packageFragment != null){ - expectedPackageName = CharOperation.splitOn('.', packageFragment.getElementName().toCharArray()); - } - if (unit == null) { - unit = problemFinder.resolve( - new BasicCompilationUnit( - contents, - expectedPackageName, - new String(fileName), - unitElement), - true, // verify methods - true); //, // analyze code - //true); // generate code - } else { - problemFinder.resolve( - unit, - null, // no need for source + JavaProject project = (JavaProject) unitElement.getJavaProject(); + CompilationUnitProblemFinder problemFinder = new CompilationUnitProblemFinder( + project.newSearchableNameEnvironment(workingCopyOwner), + getHandlingPolicy(), project.getOptions(true), getRequestor(), + problemFactory); + if (parser != null) { + problemFinder.parser = parser; + } + + try { + + IPackageFragment packageFragment = (IPackageFragment) unitElement + .getAncestor(IJavaElement.PACKAGE_FRAGMENT); + char[][] expectedPackageName = null; + if (packageFragment != null) { + expectedPackageName = CharOperation.splitOn('.', + packageFragment.getElementName().toCharArray()); + } + if (unit == null) { + unit = problemFinder.resolve( + new BasicCompilationUnit(contents, expectedPackageName, + new String(fileName), unitElement), true, // verify + // methods + true); // , // analyze code + // true); // generate code + } else { + problemFinder.resolve(unit, null, // no need for source true, // verify methods - true); //, // analyze code - // true); // generate code - } - reportProblems(unit, problemRequestor, monitor); - return unit; - } catch(RuntimeException e) { - // avoid breaking other tools due to internal compiler failure (40334) - Util.log(e, "Exception occurred during problem detection: "); //$NON-NLS-1$ - throw new JavaModelException(e, IJavaModelStatusConstants.COMPILER_FAILURE); - } finally { - if (cleanupCU && unit != null) { - unit.cleanUp(); - } - problemFinder.lookupEnvironment.reset(); + true); // , // analyze code + // true); // generate code + } + reportProblems(unit, problemRequestor, monitor); + return unit; + } catch (RuntimeException e) { + // avoid breaking other tools due to internal compiler failure + // (40334) + Util.log(e, "Exception occurred during problem detection: "); //$NON-NLS-1$ + throw new JavaModelException(e, + IJavaModelStatusConstants.COMPILER_FAILURE); + } finally { + if (cleanupCU && unit != null) { + unit.cleanUp(); } + problemFinder.lookupEnvironment.reset(); } + } + public static CompilationUnitDeclaration process( - ICompilationUnit unitElement, - char[] contents, + ICompilationUnit unitElement, char[] contents, WorkingCopyOwner workingCopyOwner, - IProblemRequestor problemRequestor, - boolean cleanupCU, - IProgressMonitor monitor) - throws JavaModelException { - - return process(null/*no CompilationUnitDeclaration*/, unitElement, contents, null/*use default Parser*/, workingCopyOwner, problemRequestor, new DefaultProblemFactory(), cleanupCU, monitor); - } + IProblemRequestor problemRequestor, boolean cleanupCU, + IProgressMonitor monitor) throws JavaModelException { + + return process(null/* no CompilationUnitDeclaration */, unitElement, + contents, null/* use default Parser */, workingCopyOwner, + problemRequestor, new DefaultProblemFactory(), cleanupCU, + monitor); + } + public static CompilationUnitDeclaration process( - ICompilationUnit unitElement, - IProblemRequestor problemRequestor, - IProgressMonitor monitor) - throws JavaModelException { + ICompilationUnit unitElement, IProblemRequestor problemRequestor, + IProgressMonitor monitor) throws JavaModelException { char[] fileName = unitElement.getElementName().toCharArray(); - + IJavaProject project = unitElement.getJavaProject(); - CompilationUnitProblemFinder problemFinder = - new CompilationUnitProblemFinder( - getNameEnvironment(unitElement), - getHandlingPolicy(), - project.getOptions(true), - getRequestor(), - getProblemFactory(fileName, problemRequestor, monitor)); + CompilationUnitProblemFinder problemFinder = new CompilationUnitProblemFinder( + getNameEnvironment(unitElement), getHandlingPolicy(), project + .getOptions(true), getRequestor(), getProblemFactory( + fileName, problemRequestor, monitor)); CompilationUnitDeclaration unit = null; try { String encoding = project.getOption(JavaCore.CORE_ENCODING, true); - - IPackageFragment packageFragment = (IPackageFragment)unitElement.getAncestor(IJavaElement.PACKAGE_FRAGMENT); + + IPackageFragment packageFragment = (IPackageFragment) unitElement + .getAncestor(IJavaElement.PACKAGE_FRAGMENT); char[][] expectedPackageName = null; - if (packageFragment != null){ - expectedPackageName = CharOperation.splitOn('.', packageFragment.getElementName().toCharArray()); + if (packageFragment != null) { + expectedPackageName = CharOperation.splitOn('.', + packageFragment.getElementName().toCharArray()); } - unit = problemFinder.resolve( - new BasicCompilationUnit( - unitElement.getSource().toCharArray(), - expectedPackageName, - new String(fileName), - encoding), - true, // verify methods + unit = problemFinder.resolve(new BasicCompilationUnit(unitElement + .getSource().toCharArray(), expectedPackageName, + new String(fileName), encoding), true, // verify methods true); // analyze code -// true); // generate code + // true); // generate code return unit; } finally { if (unit != null) { unit.cleanUp(); } - problemFinder.lookupEnvironment.reset(); + problemFinder.lookupEnvironment.reset(); } } - private static void reportProblems(CompilationUnitDeclaration unit, IProblemRequestor problemRequestor, IProgressMonitor monitor) { + + private static void reportProblems(CompilationUnitDeclaration unit, + IProblemRequestor problemRequestor, IProgressMonitor monitor) { CompilationResult unitResult = unit.compilationResult; IProblem[] problems = unitResult.getAllProblems(); for (int i = 0, problemLength = problems == null ? 0 : problems.length; i < problemLength; i++) { - if (JavaModelManager.VERBOSE){ - System.out.println("PROBLEM FOUND while reconciling : "+problems[i].getMessage());//$NON-NLS-1$ + if (JavaModelManager.VERBOSE) { + System.out + .println("PROBLEM FOUND while reconciling : " + problems[i].getMessage());//$NON-NLS-1$ } - if (monitor != null && monitor.isCanceled()) break; - - problemRequestor.acceptProblem(problems[i]); + if (monitor != null && monitor.isCanceled()) + break; + + problemRequestor.acceptProblem(problems[i]); } } -} - +}