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(