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

Unified Diff: pkg/analyzer/lib/src/lint/project.dart

Issue 2992463003: Update linter engine to use driver (linter#743). (Closed)
Patch Set: Created 3 years, 5 months 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/src/lint/linter.dart ('k') | pkg/analyzer/test/src/lint/project_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analyzer/lib/src/lint/project.dart
diff --git a/pkg/analyzer/lib/src/lint/project.dart b/pkg/analyzer/lib/src/lint/project.dart
index 9b22294e15c0a400b850869021a265ce31685fb6..48fa64d6ee4874408d65aff617bf9dcbb1768950 100644
--- a/pkg/analyzer/lib/src/lint/project.dart
+++ b/pkg/analyzer/lib/src/lint/project.dart
@@ -2,10 +2,11 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+import 'dart:async';
import 'dart:io';
import 'package:analyzer/dart/element/element.dart';
-import 'package:analyzer/src/generated/engine.dart';
+import 'package:analyzer/src/dart/analysis/driver.dart';
import 'package:analyzer/src/generated/resolver.dart';
import 'package:analyzer/src/generated/source.dart';
import 'package:analyzer/src/lint/io.dart';
@@ -41,13 +42,26 @@ class DartProject {
/// Project root.
final Directory root;
- /// Create a Dart project for the corresponding [context] and [sources].
+ /// Create a Dart project for the corresponding [driver] and [sources].
/// If a [dir] is unspecified the current working directory will be
/// used.
- DartProject(AnalysisContext context, List<Source> sources, {Directory dir})
+ ///
+ /// Note: clients should call [create] which performs API model initialization.
+ DartProject._(AnalysisDriver driver, List<Source> sources, {Directory dir})
: root = dir ?? Directory.current {
_pubspec = _findAndParsePubspec(root);
- _apiModel = new _ApiModel(context, sources, root);
+ _apiModel = new _ApiModel(driver, sources, root);
+ }
+
+ /// Create an initialized Dart project for the corresponding [driver] and
+ /// [sources].
+ /// If a [dir] is unspecified the current working directory will be
+ /// used.
+ static Future<DartProject> create(AnalysisDriver driver, List<Source> sources,
+ {Directory dir}) async {
+ DartProject project = new DartProject._(driver, sources, dir: dir);
+ await project._apiModel._calculate();
+ return project;
}
/// The project's name.
@@ -86,12 +100,12 @@ abstract class ProjectVisitor<T> {
/// Captures the project's API as defined by pub package layout standards.
class _ApiModel {
- final AnalysisContext context;
+ final AnalysisDriver driver;
final List<Source> sources;
final Directory root;
final Set<LibraryElement> elements = new Set();
- _ApiModel(this.context, this.sources, this.root) {
+ _ApiModel(this.driver, this.sources, this.root) {
_calculate();
}
@@ -106,21 +120,25 @@ class _ApiModel {
return false;
}
- _calculate() {
+ _calculate() async {
if (sources == null || sources.isEmpty) {
return;
}
- var libDir = root.path + '/lib';
- var libSrcDir = libDir + '/src';
+ String libDir = root.path + '/lib';
+ String libSrcDir = libDir + '/src';
for (Source source in sources) {
- var path = source.uri.path;
+ String path = source.uri.path;
if (path.startsWith(libDir) && !path.startsWith(libSrcDir)) {
- var library = context.computeLibraryElement(source);
- var namespaceBuilder = new NamespaceBuilder();
- var exports = namespaceBuilder.createExportNamespaceForLibrary(library);
- var public = namespaceBuilder.createPublicNamespaceForLibrary(library);
+ AnalysisResult result = await driver.getResult(source.fullName);
+ LibraryElement library = result.libraryElement;
+
+ NamespaceBuilder namespaceBuilder = new NamespaceBuilder();
+ Namespace exports =
+ namespaceBuilder.createExportNamespaceForLibrary(library);
+ Namespace public =
+ namespaceBuilder.createPublicNamespaceForLibrary(library);
elements.addAll(exports.definedNames.values);
elements.addAll(public.definedNames.values);
}
« no previous file with comments | « pkg/analyzer/lib/src/lint/linter.dart ('k') | pkg/analyzer/test/src/lint/project_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698