package net.sourceforge.phpdt.internal.core;
import java.util.Locale;
+import java.util.Map;
import net.sourceforge.phpdt.core.ICompilationUnit;
import net.sourceforge.phpdt.core.IJavaElement;
+import net.sourceforge.phpdt.core.IJavaModelStatusConstants;
import net.sourceforge.phpdt.core.IJavaProject;
import net.sourceforge.phpdt.core.IPackageFragment;
import net.sourceforge.phpdt.core.IProblemRequestor;
+import net.sourceforge.phpdt.core.JavaCore;
import net.sourceforge.phpdt.core.JavaModelException;
+import net.sourceforge.phpdt.core.WorkingCopyOwner;
import net.sourceforge.phpdt.core.compiler.CharOperation;
import net.sourceforge.phpdt.core.compiler.IProblem;
import net.sourceforge.phpdt.internal.compiler.CompilationResult;
import net.sourceforge.phpdt.internal.compiler.env.ISourceType;
import net.sourceforge.phpdt.internal.compiler.lookup.PackageBinding;
import net.sourceforge.phpdt.internal.compiler.parser.SourceTypeConverter;
+import net.sourceforge.phpdt.internal.compiler.parser.UnitParser;
import net.sourceforge.phpdt.internal.compiler.problem.AbortCompilation;
import net.sourceforge.phpdt.internal.compiler.problem.DefaultProblemFactory;
-import net.sourceforge.phpeclipse.PHPCore;
+import net.sourceforge.phpdt.internal.core.util.Util;
import net.sourceforge.phpeclipse.internal.compiler.ast.CompilationUnitDeclaration;
import org.eclipse.core.runtime.IProgressMonitor;
+import net.sourceforge.phpdt.internal.core.JavaModelManager;
/**
* Responsible for resolving types inside a compilation unit being reconciled,
protected CompilationUnitProblemFinder(
INameEnvironment environment,
IErrorHandlingPolicy policy,
-// Map settings,
+ Map settings,
ICompilerRequestor requestor,
IProblemFactory problemFactory) {
- super(environment, policy, requestor, problemFactory, true);//settings, requestor, problemFactory, true);
+ super(environment, policy, settings, requestor, problemFactory, true);
}
/**
}
public static CompilationUnitDeclaration process(
+ CompilationUnitDeclaration unit,
+ ICompilationUnit unitElement,
+ char[] contents,
+ UnitParser parser,
+ WorkingCopyOwner workingCopyOwner,
+ 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;
+ }
+
+ 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();
+ }
+ }
+ public static CompilationUnitDeclaration process(
+ 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);
+ }
+ public static CompilationUnitDeclaration process(
ICompilationUnit unitElement,
IProblemRequestor problemRequestor,
IProgressMonitor monitor)
new CompilationUnitProblemFinder(
getNameEnvironment(unitElement),
getHandlingPolicy(),
- getRequestor(),
- getProblemFactory(fileName, problemRequestor, monitor));
-// project.getOptions(true),
-// getRequestor(),
-// getProblemFactory(fileName, problemRequestor, monitor));
+ project.getOptions(true),
+ getRequestor(),
+ getProblemFactory(fileName, problemRequestor, monitor));
CompilationUnitDeclaration unit = null;
try {
- String encoding = project.getOption(PHPCore.CORE_ENCODING, true);
+ String encoding = project.getOption(JavaCore.CORE_ENCODING, true);
IPackageFragment packageFragment = (IPackageFragment)unitElement.getAncestor(IJavaElement.PACKAGE_FRAGMENT);
char[][] expectedPackageName = null;
problemFinder.lookupEnvironment.reset();
}
}
+ 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 (monitor != null && monitor.isCanceled()) break;
+ problemRequestor.acceptProblem(problems[i]);
+ }
+ }
}