public RefactoringStatus checkFinalConditions(IProgressMonitor pm) throws CoreException {
    pm.beginTask(RefactoringCoreMessages.ExtractConstantRefactoring_checking_preconditions, 4);

    /* Note: some checks are performed on change of input widget
     * values. (e.g. see ExtractConstantRefactoring.checkConstantNameOnChange())
     */

    // TODO: possibly add more checking for name conflicts that might
    //      lead to a change in behaviour

    try {
      RefactoringStatus result = new RefactoringStatus();
      fChange = createTextChange(new SubProgressMonitor(pm, 2));

      String newCuSource = fChange.getPreviewContent(new NullProgressMonitor());
      JavaScriptUnit newCUNode =
          new RefactoringASTParser(AST.JLS3).parse(newCuSource, fCu, true, true, null);

      IProblem[] newProblems =
          RefactoringAnalyzeUtil.getIntroducedCompileProblems(newCUNode, fCuRewrite.getRoot());
      for (int i = 0; i < newProblems.length; i++) {
        IProblem problem = newProblems[i];
        if (problem.isError())
          result.addEntry(
              new RefactoringStatusEntry(
                  (problem.isError() ? RefactoringStatus.ERROR : RefactoringStatus.WARNING),
                  problem.getMessage(),
                  new JavaStringStatusContext(newCuSource, new SourceRange(problem))));
      }

      fConstantTypeCache = null;
      fCuRewrite.clearASTAndImportRewrites();

      return result;
    } finally {
      pm.done();
    }
  }