Track which import is referenced by each prefix.
This will be needed for analyzer integration.
Change-Id: I99118de5f44be929379eef6c76bd886e257fa0a7
Reviewed-on: https://dart-review.googlesource.com/60809
Reviewed-by: Kevin Millikin <kmillikin@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
diff --git a/pkg/front_end/lib/src/fasta/builder/prefix_builder.dart b/pkg/front_end/lib/src/fasta/builder/prefix_builder.dart
index 75e269a1..bfd642d 100644
--- a/pkg/front_end/lib/src/fasta/builder/prefix_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/prefix_builder.dart
@@ -18,7 +18,10 @@
@override
final int charOffset;
- PrefixBuilder(this.name, this.deferred, this.parent, this.charOffset);
+ final int importIndex;
+
+ PrefixBuilder(
+ this.name, this.deferred, this.parent, this.charOffset, this.importIndex);
Uri get fileUri => parent.fileUri;
diff --git a/pkg/front_end/lib/src/fasta/import.dart b/pkg/front_end/lib/src/fasta/import.dart
index e27b1e0..91165d3 100644
--- a/pkg/front_end/lib/src/fasta/import.dart
+++ b/pkg/front_end/lib/src/fasta/import.dart
@@ -50,9 +50,10 @@
this.configurations,
this.charOffset,
this.prefixCharOffset,
+ int importIndex,
{this.nativeImportUri})
: prefixBuilder = createPrefixBuilder(prefix, importer, imported,
- combinators, deferred, charOffset, prefixCharOffset);
+ combinators, deferred, charOffset, prefixCharOffset, importIndex);
Uri get fileUri => importer.fileUri;
@@ -94,7 +95,8 @@
List<Combinator> combinators,
bool deferred,
int charOffset,
- int prefixCharOffset) {
+ int prefixCharOffset,
+ int importIndex) {
if (prefix == null) return null;
LibraryDependency dependency = null;
if (deferred) {
@@ -103,5 +105,5 @@
..fileOffset = charOffset;
}
return new KernelPrefixBuilder(
- prefix, deferred, importer, dependency, prefixCharOffset);
+ prefix, deferred, importer, dependency, prefixCharOffset, importIndex);
}
diff --git a/pkg/front_end/lib/src/fasta/incremental_compiler.dart b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
index df24eef..33b64bf 100644
--- a/pkg/front_end/lib/src/fasta/incremental_compiler.dart
+++ b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
@@ -479,6 +479,7 @@
dependency.isDeferred,
-1,
-1,
+ -1,
-1);
}
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_prefix_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_prefix_builder.dart
index 5c8aa36..72b33f2 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_prefix_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_prefix_builder.dart
@@ -16,8 +16,8 @@
LoadLibraryBuilder loadLibraryBuilder;
KernelPrefixBuilder(String name, bool deferred, LibraryBuilder parent,
- this.dependency, int charOffset)
- : super(name, deferred, parent, charOffset) {
+ this.dependency, int charOffset, int importIndex)
+ : super(name, deferred, parent, charOffset, importIndex) {
if (deferred) {
loadLibraryBuilder =
new LoadLibraryBuilder(parent, dependency, charOffset);
diff --git a/pkg/front_end/lib/src/fasta/source/outline_builder.dart b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
index 3ac8381..f0e69b9 100644
--- a/pkg/front_end/lib/src/fasta/source/outline_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
@@ -96,6 +96,7 @@
final bool stringExpectedAfterNative;
bool inConstructor = false;
bool inConstructorName = false;
+ int importIndex = 0;
String nativeMethodName;
@@ -219,8 +220,17 @@
int uriOffset = popCharOffset();
String uri = pop(); // For a conditional import, this is the default URI.
List<MetadataBuilder> metadata = pop();
- library.addImport(metadata, uri, configurations, prefix, combinators,
- isDeferred, importKeyword.charOffset, prefixOffset, uriOffset);
+ library.addImport(
+ metadata,
+ uri,
+ configurations,
+ prefix,
+ combinators,
+ isDeferred,
+ importKeyword.charOffset,
+ prefixOffset,
+ uriOffset,
+ importIndex++);
checkEmpty(importKeyword.charOffset);
}
diff --git a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
index 99631ab..d6e591c 100644
--- a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
@@ -279,7 +279,8 @@
bool deferred,
int charOffset,
int prefixCharOffset,
- int uriOffset) {
+ int uriOffset,
+ int importIndex) {
if (configurations != null) {
for (Configuration config in configurations) {
if (lookupImportCondition(config.dottedName) == config.condition) {
@@ -308,7 +309,7 @@
}
imports.add(new Import(this, builder, deferred, prefix, combinators,
- configurations, charOffset, prefixCharOffset,
+ configurations, charOffset, prefixCharOffset, importIndex,
nativeImportUri: builder == null ? resolvedUri : null));
}
diff --git a/pkg/front_end/test/fasta/generator_to_string_test.dart b/pkg/front_end/test/fasta/generator_to_string_test.dart
index 4901f63..08dfb3a 100644
--- a/pkg/front_end/test/fasta/generator_to_string_test.dart
+++ b/pkg/front_end/test/fasta/generator_to_string_test.dart
@@ -118,7 +118,7 @@
Name binaryOperator = new Name("+");
Name name = new Name("bar");
PrefixBuilder prefixBuilder =
- new PrefixBuilder("myPrefix", false, libraryBuilder, -1);
+ new PrefixBuilder("myPrefix", false, libraryBuilder, -1, -1);
String assignmentOperator = "+=";
TypeDeclarationBuilder declaration =
new KernelTypeVariableBuilder.fromKernel(