Index: pkg/analyzer/lib/src/dart/analysis/file_state.dart |
diff --git a/pkg/analyzer/lib/src/dart/analysis/file_state.dart b/pkg/analyzer/lib/src/dart/analysis/file_state.dart |
index 3a88ed6aafa1ed2f4ca9d76944a18d5ac2b49d9c..26a1df70b31b49e92bd3cd3f688f6568de00940c 100644 |
--- a/pkg/analyzer/lib/src/dart/analysis/file_state.dart |
+++ b/pkg/analyzer/lib/src/dart/analysis/file_state.dart |
@@ -12,6 +12,7 @@ import 'package:analyzer/file_system/file_system.dart'; |
import 'package:analyzer/src/dart/analysis/byte_store.dart'; |
import 'package:analyzer/src/dart/analysis/driver.dart'; |
import 'package:analyzer/src/dart/analysis/referenced_names.dart'; |
+import 'package:analyzer/src/dart/analysis/top_level_declarations.dart'; |
import 'package:analyzer/src/dart/scanner/reader.dart'; |
import 'package:analyzer/src/dart/scanner/scanner.dart'; |
import 'package:analyzer/src/generated/engine.dart'; |
@@ -22,6 +23,7 @@ import 'package:analyzer/src/source/source_resource.dart'; |
import 'package:analyzer/src/summary/api_signature.dart'; |
import 'package:analyzer/src/summary/format.dart'; |
import 'package:analyzer/src/summary/idl.dart'; |
+import 'package:analyzer/src/summary/name_filter.dart'; |
import 'package:analyzer/src/summary/summarize_ast.dart'; |
import 'package:analyzer/src/util/fast_uri.dart'; |
import 'package:convert/convert.dart'; |
@@ -93,10 +95,14 @@ class FileState { |
List<FileState> _importedFiles; |
List<FileState> _exportedFiles; |
List<FileState> _partedFiles; |
+ List<NameFilter> _exportFilters; |
+ |
Set<FileState> _directReferencedFiles = new Set<FileState>(); |
Set<FileState> _transitiveFiles; |
String _transitiveSignature; |
+ List<TopLevelDeclaration> _topLevelDeclarations; |
+ |
FileState._(this._fsState, this.path, this.uri, this.source); |
/** |
@@ -168,6 +174,54 @@ class FileState { |
Set<String> get referencedNames => _referencedNames; |
/** |
+ * Return top-level declarations declared in the file. |
+ */ |
+ List<TopLevelDeclaration> get topLevelDeclarations { |
+ if (_topLevelDeclarations == null) { |
+ _topLevelDeclarations = <TopLevelDeclaration>[]; |
+ // Add types. |
+ for (UnlinkedClass type in unlinked.classes) { |
+ _topLevelDeclarations.add( |
+ new TopLevelDeclaration(TopLevelDeclarationKind.type, type.name)); |
+ } |
+ for (UnlinkedEnum type in unlinked.enums) { |
+ _topLevelDeclarations.add( |
+ new TopLevelDeclaration(TopLevelDeclarationKind.type, type.name)); |
+ } |
+ for (UnlinkedTypedef type in unlinked.typedefs) { |
+ _topLevelDeclarations.add( |
+ new TopLevelDeclaration(TopLevelDeclarationKind.type, type.name)); |
+ } |
+ // Add functions and variables. |
+ Set<String> addedVariableNames = new Set<String>(); |
+ for (UnlinkedExecutable executable in unlinked.executables) { |
+ String name = executable.name; |
+ if (executable.kind == UnlinkedExecutableKind.functionOrMethod) { |
+ _topLevelDeclarations.add( |
+ new TopLevelDeclaration(TopLevelDeclarationKind.function, name)); |
+ } else if (executable.kind == UnlinkedExecutableKind.getter || |
+ executable.kind == UnlinkedExecutableKind.setter) { |
+ if (executable.kind == UnlinkedExecutableKind.setter) { |
+ name = name.substring(0, name.length - 1); |
+ } |
+ if (addedVariableNames.add(name)) { |
+ _topLevelDeclarations.add(new TopLevelDeclaration( |
+ TopLevelDeclarationKind.variable, name)); |
+ } |
+ } |
+ } |
+ for (UnlinkedVariable variable in unlinked.variables) { |
+ String name = variable.name; |
+ if (addedVariableNames.add(name)) { |
+ _topLevelDeclarations.add( |
+ new TopLevelDeclaration(TopLevelDeclarationKind.variable, name)); |
+ } |
+ } |
+ } |
+ return _topLevelDeclarations; |
+ } |
+ |
+ /** |
* Return the set of transitive files - the file itself and all of the |
* directly or indirectly referenced files. |
*/ |
@@ -324,6 +378,7 @@ class FileState { |
_importedFiles = <FileState>[]; |
_exportedFiles = <FileState>[]; |
_partedFiles = <FileState>[]; |
+ _exportFilters = <NameFilter>[]; |
for (UnlinkedImport import in _unlinked.imports) { |
if (!import.isImplicit) { |
String uri = import.uri; |
@@ -341,6 +396,8 @@ class FileState { |
FileState file = _fileForRelativeUri(uri); |
if (file != null) { |
_exportedFiles.add(file); |
+ _exportFilters |
+ .add(new NameFilter.forUnlinkedCombinators(export.combinators)); |
} |
} |
} |