Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(424)

Unified Diff: pkg/analyzer/lib/src/analyzer_impl.dart

Issue 725143004: Format and sort analyzer and analysis_server packages. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/analyzer/lib/source/pub_package_map_provider.dart ('k') | pkg/analyzer/lib/src/error.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analyzer/lib/src/analyzer_impl.dart
diff --git a/pkg/analyzer/lib/src/analyzer_impl.dart b/pkg/analyzer/lib/src/analyzer_impl.dart
index 25bac6ec833330acd646510f10e4c2a464036a81..879a7d9a8f6111d1ff3403602713a7fce8bf38c3 100644
--- a/pkg/analyzer/lib/src/analyzer_impl.dart
+++ b/pkg/analyzer/lib/src/analyzer_impl.dart
@@ -5,59 +5,44 @@
library analyzer_impl;
import 'dart:async';
+import 'dart:collection';
import 'dart:io';
+import 'package:analyzer/file_system/physical_file_system.dart';
+import 'package:analyzer/source/package_map_provider.dart';
+import 'package:analyzer/source/package_map_resolver.dart';
+import 'package:analyzer/source/pub_package_map_provider.dart';
+import 'package:analyzer/src/error_formatter.dart';
+import 'package:analyzer/src/generated/java_core.dart' show JavaSystem;
+import 'package:analyzer/src/generated/java_engine.dart';
+
+import '../options.dart';
import 'generated/constant.dart';
-import 'generated/engine.dart';
import 'generated/element.dart';
+import 'generated/engine.dart';
import 'generated/error.dart';
import 'generated/java_io.dart';
import 'generated/sdk_io.dart';
import 'generated/source_io.dart';
-import '../options.dart';
-import 'dart:collection';
-
-import 'package:analyzer/src/generated/java_core.dart' show JavaSystem;
-import 'package:analyzer/src/error_formatter.dart';
-import 'package:analyzer/file_system/physical_file_system.dart';
-import 'package:analyzer/source/package_map_resolver.dart';
-import 'package:analyzer/source/package_map_provider.dart';
-import 'package:analyzer/source/pub_package_map_provider.dart';
-import 'package:analyzer/src/generated/java_engine.dart';
+DirectoryBasedDartSdk sdk;
/**
* The maximum number of sources for which AST structures should be kept in the cache.
*/
const int _MAX_CACHE_SIZE = 512;
-DirectoryBasedDartSdk sdk;
-
/// Analyzes single library [File].
class AnalyzerImpl {
- /**
- * Compute the severity of the error; however, if
- * [enableTypeChecks] is false, then de-escalate checked-mode compile time
- * errors to a severity of [ErrorSeverity.INFO].
- */
- static ErrorSeverity computeSeverity(
- AnalysisError error, bool enableTypeChecks) {
- if (!enableTypeChecks
- && error.errorCode.type == ErrorType.CHECKED_MODE_COMPILE_TIME_ERROR) {
- return ErrorSeverity.INFO;
- }
- return error.errorCode.errorSeverity;
- }
-
final String sourcePath;
+
final CommandLineOptions options;
final int startTime;
-
ContentCache contentCache = new ContentCache();
+
SourceFactory sourceFactory;
AnalysisContext context;
Source librarySource;
-
/// All [Source]s references by the analyzed library.
final Set<Source> sources = new Set<Source>();
@@ -75,6 +60,70 @@ class AnalyzerImpl {
}
}
+ /// Returns the maximal [ErrorSeverity] of the recorded errors.
+ ErrorSeverity get maxErrorSeverity {
+ var status = ErrorSeverity.NONE;
+ for (AnalysisErrorInfo errorInfo in errorInfos) {
+ for (AnalysisError error in errorInfo.errors) {
+ if (!_isDesiredError(error)) {
+ continue;
+ }
+ var severity = computeSeverity(error, options.enableTypeChecks);
+ status = status.max(severity);
+ }
+ }
+ return status;
+ }
+
+ void addCompilationUnitSource(CompilationUnitElement unit,
+ Set<LibraryElement> libraries, Set<CompilationUnitElement> units) {
+ if (unit == null || units.contains(unit)) {
+ return;
+ }
+ units.add(unit);
+ sources.add(unit.source);
+ }
+
+ void addLibrarySources(LibraryElement library, Set<LibraryElement> libraries,
+ Set<CompilationUnitElement> units) {
+ if (library == null || !libraries.add(library)) {
+ return;
+ }
+ // may be skip library
+ {
+ UriKind uriKind = library.source.uriKind;
+ // Optionally skip package: libraries.
+ if (!options.showPackageWarnings && uriKind == UriKind.PACKAGE_URI) {
+ return;
+ }
+ // Optionally skip SDK libraries.
+ if (!options.showSdkWarnings && uriKind == UriKind.DART_URI) {
+ return;
+ }
+ }
+ // add compilation units
+ addCompilationUnitSource(library.definingCompilationUnit, libraries, units);
+ for (CompilationUnitElement child in library.parts) {
+ addCompilationUnitSource(child, libraries, units);
+ }
+ // add referenced libraries
+ for (LibraryElement child in library.importedLibraries) {
+ addLibrarySources(child, libraries, units);
+ }
+ for (LibraryElement child in library.exportedLibraries) {
+ addLibrarySources(child, libraries, units);
+ }
+ }
+
+ /**
+ * Treats the [sourcePath] as the top level library and analyzes it using a
+ * asynchronous algorithm over the analysis engine.
+ */
+ void analyzeAsync() {
+ setupForAnalysis();
+ _analyzeAsync();
+ }
+
/**
* Treats the [sourcePath] as the top level library and analyzes it using a
* synchronous algorithm over the analysis engine. If [printMode] is `0`,
@@ -87,13 +136,68 @@ class AnalyzerImpl {
return _analyzeSync(printMode);
}
- /**
- * Treats the [sourcePath] as the top level library and analyzes it using a
- * asynchronous algorithm over the analysis engine.
- */
- void analyzeAsync() {
- setupForAnalysis();
- _analyzeAsync();
+ void prepareAnalysisContext(JavaFile sourceFile, Source source) {
+ List<UriResolver> resolvers = [
+ new DartUriResolver(sdk),
+ new FileUriResolver()];
+ // may be add package resolver
+ {
+ JavaFile packageDirectory;
+ if (options.packageRootPath != null) {
+ packageDirectory = new JavaFile(options.packageRootPath);
+ resolvers.add(new PackageUriResolver([packageDirectory]));
+ } else {
+ PubPackageMapProvider pubPackageMapProvider =
+ new PubPackageMapProvider(PhysicalResourceProvider.INSTANCE, sdk);
+ PackageMapInfo packageMapInfo = pubPackageMapProvider.computePackageMap(
+ PhysicalResourceProvider.INSTANCE.getResource('.'));
+ resolvers.add(
+ new PackageMapUriResolver(
+ PhysicalResourceProvider.INSTANCE,
+ packageMapInfo.packageMap));
+ }
+ }
+ sourceFactory = new SourceFactory(resolvers);
+ context = AnalysisEngine.instance.createAnalysisContext();
+ context.sourceFactory = sourceFactory;
+ Map<String, String> definedVariables = options.definedVariables;
+ if (!definedVariables.isEmpty) {
+ DeclaredVariables declaredVariables = context.declaredVariables;
+ definedVariables.forEach((String variableName, String value) {
+ declaredVariables.define(variableName, value);
+ });
+ }
+ // Uncomment the following to have errors reported on stdout and stderr
+ AnalysisEngine.instance.logger = new StdLogger(options.log);
+
+ // set options for context
+ AnalysisOptionsImpl contextOptions = new AnalysisOptionsImpl();
+ contextOptions.cacheSize = _MAX_CACHE_SIZE;
+ contextOptions.hint = !options.disableHints;
+ contextOptions.enableAsync = options.enableAsync;
+ contextOptions.enableEnum = options.enableEnum;
+ context.analysisOptions = contextOptions;
+
+ // Create and add a ChangeSet
+ ChangeSet changeSet = new ChangeSet();
+ changeSet.addedSource(source);
+ context.applyChanges(changeSet);
+ }
+
+ /// Fills [errorInfos] using [sources].
+ void prepareErrors() {
+ for (Source source in sources) {
+ context.computeErrors(source);
+ var sourceErrors = context.getErrors(source);
+ errorInfos.add(sourceErrors);
+ }
+ }
+
+ /// Fills [sources].
+ void prepareSources(LibraryElement library) {
+ var units = new Set<CompilationUnitElement>();
+ var libraries = new Set<LibraryElement>();
+ addLibrarySources(library, libraries, units);
}
/**
@@ -113,42 +217,6 @@ class AnalyzerImpl {
prepareAnalysisContext(sourceFile, librarySource);
}
- /**
- * Convert [sourcePath] into an absolute path.
- */
- static String _normalizeSourcePath(String sourcePath) {
- return new File(sourcePath).absolute.path;
- }
-
- /// The sync version of analysis.
- ErrorSeverity _analyzeSync(int printMode) {
- // don't try to analyze parts
- if (context.computeKindOf(librarySource) == SourceKind.PART) {
- print("Only libraries can be analyzed.");
- print("$sourcePath is a part and can not be analyzed.");
- return ErrorSeverity.ERROR;
- }
- // resolve library
- var libraryElement = context.computeLibraryElement(librarySource);
- // prepare source and errors
- prepareSources(libraryElement);
- prepareErrors();
-
- // print errors and performance numbers
- if (printMode == 1) {
- _printErrorsAndPerf();
- } else if (printMode == 2) {
- _printColdPerf();
- }
-
- // compute max severity and set exitCode
- ErrorSeverity status = maxErrorSeverity;
- if (status == ErrorSeverity.WARNING && options.warningsAreFatal) {
- status = ErrorSeverity.ERROR;
- }
- return status;
- }
-
/// The async version of the analysis
void _analyzeAsync() {
new Future(context.performAnalysisTask).then((AnalysisResult result) {
@@ -185,17 +253,70 @@ class AnalyzerImpl {
});
}
+ /// The sync version of analysis.
+ ErrorSeverity _analyzeSync(int printMode) {
+ // don't try to analyze parts
+ if (context.computeKindOf(librarySource) == SourceKind.PART) {
+ print("Only libraries can be analyzed.");
+ print("$sourcePath is a part and can not be analyzed.");
+ return ErrorSeverity.ERROR;
+ }
+ // resolve library
+ var libraryElement = context.computeLibraryElement(librarySource);
+ // prepare source and errors
+ prepareSources(libraryElement);
+ prepareErrors();
+
+ // print errors and performance numbers
+ if (printMode == 1) {
+ _printErrorsAndPerf();
+ } else if (printMode == 2) {
+ _printColdPerf();
+ }
+
+ // compute max severity and set exitCode
+ ErrorSeverity status = maxErrorSeverity;
+ if (status == ErrorSeverity.WARNING && options.warningsAreFatal) {
+ status = ErrorSeverity.ERROR;
+ }
+ return status;
+ }
+
bool _isDesiredError(AnalysisError error) {
if (error.errorCode.type == ErrorType.TODO) {
return false;
}
- if (computeSeverity(error, options.enableTypeChecks) == ErrorSeverity.INFO
- && options.disableHints) {
+ if (computeSeverity(error, options.enableTypeChecks) ==
+ ErrorSeverity.INFO &&
+ options.disableHints) {
return false;
}
return true;
}
+ _printColdPerf() {
+ // print cold VM performance numbers
+ int totalTime = JavaSystem.currentTimeMillis() - startTime;
+ int ioTime = PerformanceStatistics.io.result;
+ int scanTime = PerformanceStatistics.scan.result;
+ int parseTime = PerformanceStatistics.parse.result;
+ int resolveTime = PerformanceStatistics.resolve.result;
+ int errorsTime = PerformanceStatistics.errors.result;
+ int hintsTime = PerformanceStatistics.hints.result;
+ int angularTime = PerformanceStatistics.angular.result;
+ stdout.writeln("io-cold:$ioTime");
+ stdout.writeln("scan-cold:$scanTime");
+ stdout.writeln("parse-cold:$parseTime");
+ stdout.writeln("resolve-cold:$resolveTime");
+ stdout.writeln("errors-cold:$errorsTime");
+ stdout.writeln("hints-cold:$hintsTime");
+ stdout.writeln("angular-cold:$angularTime");
+ stdout.writeln("other-cold:${totalTime
+ - (ioTime + scanTime + parseTime + resolveTime + errorsTime + hintsTime
+ + angularTime)}");
+ stdout.writeln("total-cold:$totalTime");
+ }
+
_printErrorsAndPerf() {
// The following is a hack. We currently print out to stderr to ensure that
// when in batch mode we print to stderr, this is because the prints from
@@ -206,7 +327,8 @@ class AnalyzerImpl {
IOSink sink = options.machineFormat ? stderr : stdout;
// print errors
- ErrorFormatter formatter = new ErrorFormatter(sink, options, _isDesiredError);
+ ErrorFormatter formatter =
+ new ErrorFormatter(sink, options, _isDesiredError);
formatter.formatErrors(errorInfos);
// print performance numbers
@@ -233,146 +355,18 @@ class AnalyzerImpl {
}
}
- _printColdPerf() {
- // print cold VM performance numbers
- int totalTime = JavaSystem.currentTimeMillis() - startTime;
- int ioTime = PerformanceStatistics.io.result;
- int scanTime = PerformanceStatistics.scan.result;
- int parseTime = PerformanceStatistics.parse.result;
- int resolveTime = PerformanceStatistics.resolve.result;
- int errorsTime = PerformanceStatistics.errors.result;
- int hintsTime = PerformanceStatistics.hints.result;
- int angularTime = PerformanceStatistics.angular.result;
- stdout.writeln("io-cold:$ioTime");
- stdout.writeln("scan-cold:$scanTime");
- stdout.writeln("parse-cold:$parseTime");
- stdout.writeln("resolve-cold:$resolveTime");
- stdout.writeln("errors-cold:$errorsTime");
- stdout.writeln("hints-cold:$hintsTime");
- stdout.writeln("angular-cold:$angularTime");
- stdout.writeln("other-cold:${totalTime
- - (ioTime + scanTime + parseTime + resolveTime + errorsTime + hintsTime
- + angularTime)}");
- stdout.writeln("total-cold:$totalTime");
- }
-
- /// Returns the maximal [ErrorSeverity] of the recorded errors.
- ErrorSeverity get maxErrorSeverity {
- var status = ErrorSeverity.NONE;
- for (AnalysisErrorInfo errorInfo in errorInfos) {
- for (AnalysisError error in errorInfo.errors) {
- if (!_isDesiredError(error)) {
- continue;
- }
- var severity = computeSeverity(error, options.enableTypeChecks);
- status = status.max(severity);
- }
- }
- return status;
- }
-
- void prepareAnalysisContext(JavaFile sourceFile, Source source) {
- List<UriResolver> resolvers = [
- new DartUriResolver(sdk),
- new FileUriResolver()];
- // may be add package resolver
- {
- JavaFile packageDirectory;
- if (options.packageRootPath != null) {
- packageDirectory = new JavaFile(options.packageRootPath);
- resolvers.add(new PackageUriResolver([packageDirectory]));
- } else {
- PubPackageMapProvider pubPackageMapProvider =
- new PubPackageMapProvider(PhysicalResourceProvider.INSTANCE, sdk);
- PackageMapInfo packageMapInfo = pubPackageMapProvider.computePackageMap(
- PhysicalResourceProvider.INSTANCE.getResource('.'));
- resolvers.add(
- new PackageMapUriResolver(
- PhysicalResourceProvider.INSTANCE,
- packageMapInfo.packageMap));
- }
- }
- sourceFactory = new SourceFactory(resolvers);
- context = AnalysisEngine.instance.createAnalysisContext();
- context.sourceFactory = sourceFactory;
- Map<String, String> definedVariables = options.definedVariables;
- if (!definedVariables.isEmpty) {
- DeclaredVariables declaredVariables = context.declaredVariables;
- definedVariables.forEach((String variableName, String value) {
- declaredVariables.define(variableName, value);
- });
- }
- // Uncomment the following to have errors reported on stdout and stderr
- AnalysisEngine.instance.logger = new StdLogger(options.log);
-
- // set options for context
- AnalysisOptionsImpl contextOptions = new AnalysisOptionsImpl();
- contextOptions.cacheSize = _MAX_CACHE_SIZE;
- contextOptions.hint = !options.disableHints;
- contextOptions.enableAsync = options.enableAsync;
- contextOptions.enableEnum = options.enableEnum;
- context.analysisOptions = contextOptions;
-
- // Create and add a ChangeSet
- ChangeSet changeSet = new ChangeSet();
- changeSet.addedSource(source);
- context.applyChanges(changeSet);
- }
-
- void addCompilationUnitSource(CompilationUnitElement unit,
- Set<LibraryElement> libraries, Set<CompilationUnitElement> units) {
- if (unit == null || units.contains(unit)) {
- return;
- }
- units.add(unit);
- sources.add(unit.source);
- }
-
- void addLibrarySources(LibraryElement library, Set<LibraryElement> libraries,
- Set<CompilationUnitElement> units) {
- if (library == null || !libraries.add(library)) {
- return;
- }
- // may be skip library
- {
- UriKind uriKind = library.source.uriKind;
- // Optionally skip package: libraries.
- if (!options.showPackageWarnings && uriKind == UriKind.PACKAGE_URI) {
- return;
- }
- // Optionally skip SDK libraries.
- if (!options.showSdkWarnings && uriKind == UriKind.DART_URI) {
- return;
- }
- }
- // add compilation units
- addCompilationUnitSource(library.definingCompilationUnit, libraries, units);
- for (CompilationUnitElement child in library.parts) {
- addCompilationUnitSource(child, libraries, units);
- }
- // add referenced libraries
- for (LibraryElement child in library.importedLibraries) {
- addLibrarySources(child, libraries, units);
- }
- for (LibraryElement child in library.exportedLibraries) {
- addLibrarySources(child, libraries, units);
- }
- }
-
- /// Fills [sources].
- void prepareSources(LibraryElement library) {
- var units = new Set<CompilationUnitElement>();
- var libraries = new Set<LibraryElement>();
- addLibrarySources(library, libraries, units);
- }
-
- /// Fills [errorInfos] using [sources].
- void prepareErrors() {
- for (Source source in sources) {
- context.computeErrors(source);
- var sourceErrors = context.getErrors(source);
- errorInfos.add(sourceErrors);
+ /**
+ * Compute the severity of the error; however, if
+ * [enableTypeChecks] is false, then de-escalate checked-mode compile time
+ * errors to a severity of [ErrorSeverity.INFO].
+ */
+ static ErrorSeverity computeSeverity(AnalysisError error,
+ bool enableTypeChecks) {
+ if (!enableTypeChecks &&
+ error.errorCode.type == ErrorType.CHECKED_MODE_COMPILE_TIME_ERROR) {
+ return ErrorSeverity.INFO;
}
+ return error.errorCode.errorSeverity;
}
static JavaFile getPackageDirectoryFor(JavaFile sourceFile) {
@@ -408,6 +402,13 @@ class AnalyzerImpl {
// some generic file
return file.toURI();
}
+
+ /**
+ * Convert [sourcePath] into an absolute path.
+ */
+ static String _normalizeSourcePath(String sourcePath) {
+ return new File(sourcePath).absolute.path;
+ }
}
/**
« no previous file with comments | « pkg/analyzer/lib/source/pub_package_map_provider.dart ('k') | pkg/analyzer/lib/src/error.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698