public void test_performOperation_whenException() throws Exception {
   Logger oldLogger = AnalysisEngine.getInstance().getLogger();
   try {
     Error myException = new Error();
     when(unit.accept(isA(AngularHtmlIndexContributor.class))).thenThrow(myException);
     // set mock Logger
     Logger logger = mock(Logger.class);
     AnalysisEngine.getInstance().setLogger(logger);
     // run operation
     operation.performOperation();
     // verify that "myException" was logged
     verify(logger).logError(anyString(), same(myException));
   } finally {
     AnalysisEngine.getInstance().setLogger(oldLogger);
   }
 }
 /**
  * Ensure that the dart VM is executable. If it is not, make it executable and log that it was
  * necessary for us to do so.
  */
 @DartBlockBody({})
 private void ensureVmIsExecutable() {
   File dartVm = getVmExecutable();
   if (dartVm != null) {
     if (!dartVm.canExecute()) {
       FileUtilities.makeExecutable(dartVm);
       AnalysisEngine.getInstance().getLogger().logError(dartVm.getPath() + " was not executable");
     }
   }
 }
 @Override
 public Source fromFileUri(URI uri) {
   File file = new File(uri);
   String filePath = file.getAbsolutePath();
   String libPath = getLibraryDirectory().getAbsolutePath();
   if (!filePath.startsWith(libPath + File.separator)) {
     return null;
   }
   filePath = filePath.substring(libPath.length() + 1);
   for (SdkLibrary library : libraryMap.getSdkLibraries()) {
     String libraryPath = library.getPath();
     if (filePath.replace('\\', '/').equals(libraryPath)) {
       String path = library.getShortName();
       try {
         return new FileBasedSource(new URI(path), file);
       } catch (URISyntaxException exception) {
         AnalysisEngine.getInstance()
             .getLogger()
             .logInformation("Failed to create URI: " + path, exception);
         return null;
       }
     }
     libraryPath = new File(libraryPath).getParent();
     if (filePath.startsWith(libraryPath + File.separator)) {
       String path = library.getShortName() + "/" + filePath.substring(libraryPath.length() + 1);
       try {
         return new FileBasedSource(new URI(path), file);
       } catch (URISyntaxException exception) {
         AnalysisEngine.getInstance()
             .getLogger()
             .logInformation("Failed to create URI: " + path, exception);
         return null;
       }
     }
   }
   return null;
 }
  /**
   * Invoke the compiler to build all of the files passed on the command line
   *
   * @param analyzerOptions parsed command line arguments
   * @return {@code true} on success, {@code false} on failure.
   */
  protected static ErrorSeverity runAnalyzer(AnalyzerOptions options)
      throws IOException, AnalysisException {
    File sourceFile = new File(options.getSourceFile());

    if (!sourceFile.exists()) {
      System.out.println("File not found: " + sourceFile);
      System.out.println();
      showUsage(System.out);
      return ErrorSeverity.ERROR;
    }

    // TODO: also support analyzing html files (via AnalysisEngine.isHtmlFileName())
    if (!AnalysisEngine.isDartFileName(sourceFile.getName())) {
      System.out.println(sourceFile + " is not a Dart file");
      System.out.println();
      showUsage(System.out);
      return ErrorSeverity.ERROR;
    }

    ErrorFormatter formatter =
        new ErrorFormatter(options.getMachineFormat() ? System.err : System.out, options);

    List<AnalysisError> errors = new ArrayList<AnalysisError>();

    formatter.startAnalysis();

    long startTime = System.currentTimeMillis();
    AnalyzerImpl analyzer = new AnalyzerImpl(options);
    ErrorSeverity status = analyzer.analyze(sourceFile, errors);

    formatter.formatErrors(errors);

    if (status.equals(ErrorSeverity.WARNING) && options.getWarningsAreFatal()) {
      status = ErrorSeverity.ERROR;
    }

    if (options.getPerf()) {
      long totalTime = System.currentTimeMillis() - startTime;
      System.out.println("scan:" + PerformanceStatistics.scan.getResult());
      System.out.println("parse:" + PerformanceStatistics.parse.getResult());
      System.out.println("resolve:" + PerformanceStatistics.resolve.getResult());
      System.out.println("errors:" + PerformanceStatistics.errors.getResult());
      System.out.println("hints:" + PerformanceStatistics.hints.getResult());
      System.out.println("total:" + totalTime);
    }

    return status;
  }
  public void test_dartEngineAnalysis() throws AnalysisException {
    String svnRootName = System.getProperty("svnRoot");
    assertNotNull("Missing property value: set using -DsvnRoot=...", svnRootName);
    File svnRoot = new File(svnRootName);
    assertTrue("Invalid property value: svnRoot directory does not exist", svnRoot.exists());

    DartSdk sdk = DirectoryBasedDartSdk.getDefaultSdk();
    assertNotNull(
        "Missing or invalid property value: set using -Dcom.google.dart.sdk=...", svnRootName);
    SourceFactory sourceFactory =
        new SourceFactory(new DartUriResolver(sdk), new FileUriResolver());
    AnalysisContext context = AnalysisEngine.getInstance().createAnalysisContext();
    context.setSourceFactory(sourceFactory);

    FileBasedSource engineSource =
        new FileBasedSource(
            sourceFactory.getContentCache(),
            new File(svnRoot, "pkg/analyzer_experimental/lib/src/generated/engine.dart"));
    long startTime = System.currentTimeMillis();
    LibraryElement library = context.computeLibraryElement(engineSource);
    verify(library);
    long endTime = System.currentTimeMillis();
    //
    // Print out timing information.
    //
    System.out.print("Resolved Dart analysis engine in ");
    System.out.print(endTime - startTime);
    System.out.println(" ms");
    System.out.println();
    printStatistics();
    //
    // Print out memory usage information.
    //
    //    MemoryUsage usage = MemoryUtilities.measureMemoryUsage(library);
    //    PrintWriter writer = new PrintWriter(System.out);
    //    usage.writeSummary(writer);
    //    writer.flush();
    //
    // Validate that there were no errors.
    //
    assertValid();
  }
  /**
   * Read all of the configuration files to initialize the library maps.
   *
   * @param useDart2jsPaths {@code true} if the dart2js path should be used when it is available
   * @return the initialized library map
   */
  protected LibraryMap initialLibraryMap(boolean useDart2jsPaths) {

    File librariesFile =
        new File(
            new File(
                new File(new File(getLibraryDirectory(), INTERNAL_DIR), SDK_LIB_METADATA_DIR),
                SDK_LIB_METADATA_LIB_DIR),
            LIBRARIES_FILE);
    if (!librariesFile.exists()) {
      // Fall back to pre SDK reorg location.
      librariesFile = getLegacyLibrariesFile();
    }
    try {
      String contents = FileUtilities.getContents(librariesFile);
      return new SdkLibrariesReader(useDart2jsPaths).readFromFile(librariesFile, contents);
    } catch (Exception exception) {
      AnalysisEngine.getInstance()
          .getLogger()
          .logError(
              "Could not initialize the library map from " + librariesFile.getAbsolutePath(),
              exception);
      return new LibraryMap();
    }
  }
 public void validate() {
   StringBuilder builder = new StringBuilder();
   if (accessors != null) {
     builder.append(accessors.size());
     builder.append(" accessors");
   }
   if (constructors != null) {
     if (builder.length() > 0) {
       builder.append("; ");
     }
     builder.append(constructors.size());
     builder.append(" constructors");
   }
   if (fields != null) {
     if (builder.length() > 0) {
       builder.append("; ");
     }
     builder.append(fields.size());
     builder.append(" fields");
   }
   if (functions != null) {
     if (builder.length() > 0) {
       builder.append("; ");
     }
     builder.append(functions.size());
     builder.append(" functions");
   }
   if (labels != null) {
     if (builder.length() > 0) {
       builder.append("; ");
     }
     builder.append(labels.size());
     builder.append(" labels");
   }
   if (localVariables != null) {
     if (builder.length() > 0) {
       builder.append("; ");
     }
     builder.append(localVariables.size());
     builder.append(" local variables");
   }
   if (methods != null) {
     if (builder.length() > 0) {
       builder.append("; ");
     }
     builder.append(methods.size());
     builder.append(" methods");
   }
   if (parameters != null) {
     if (builder.length() > 0) {
       builder.append("; ");
     }
     builder.append(parameters.size());
     builder.append(" parameters");
   }
   if (topLevelVariables != null) {
     if (builder.length() > 0) {
       builder.append("; ");
     }
     builder.append(topLevelVariables.size());
     builder.append(" top-level variables");
   }
   if (types != null) {
     if (builder.length() > 0) {
       builder.append("; ");
     }
     builder.append(types.size());
     builder.append(" types");
   }
   if (typeAliases != null) {
     if (builder.length() > 0) {
       builder.append("; ");
     }
     builder.append(typeAliases.size());
     builder.append(" type aliases");
   }
   if (typeParameters != null) {
     if (builder.length() > 0) {
       builder.append("; ");
     }
     builder.append(typeParameters.size());
     builder.append(" type parameters");
   }
   if (builder.length() > 0) {
     AnalysisEngine.getInstance()
         .getLogger()
         .logError("Failed to capture elements: " + builder.toString());
   }
 }