mirror of
https://github.com/dart-lang/sdk
synced 2024-09-16 01:59:38 +00:00
Store import prefix offset into metadata and resynthesize.
Change-Id: I7ef72c562323f132865c7cb6b3b068623c831043 Reviewed-on: https://dart-review.googlesource.com/68741 Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
This commit is contained in:
parent
c439ebead0
commit
c30af508a4
|
@ -1038,11 +1038,6 @@ class AnalysisNotificationNavigationTest_UseCFE
|
|||
@override
|
||||
bool get useCFE => true;
|
||||
|
||||
@failingTest
|
||||
@override
|
||||
test_annotationConstructor_importPrefix() async =>
|
||||
super.test_annotationConstructor_importPrefix();
|
||||
|
||||
@failingTest
|
||||
@override
|
||||
test_annotationField() async => super.test_annotationField();
|
||||
|
@ -1051,11 +1046,6 @@ class AnalysisNotificationNavigationTest_UseCFE
|
|||
@override
|
||||
test_inComment() async => super.test_inComment();
|
||||
|
||||
@failingTest
|
||||
@override
|
||||
test_instanceCreation_withImportPrefix_named() async =>
|
||||
super.test_instanceCreation_withImportPrefix_named();
|
||||
|
||||
@failingTest
|
||||
@override
|
||||
test_library() async => super.test_library();
|
||||
|
|
|
@ -18,6 +18,10 @@ class AnalyzerMetadata {
|
|||
/// Optional documentation comment, may be `null`.
|
||||
String documentationComment;
|
||||
|
||||
/// If the node is an import library dependency, the offset of the prefix.
|
||||
/// Otherwise `-1`.
|
||||
int importPrefixOffset = -1;
|
||||
|
||||
/// Return the [AnalyzerMetadata] for the [node], or `null` absent.
|
||||
static AnalyzerMetadata forNode(kernel.TreeNode node) {
|
||||
var repository =
|
||||
|
@ -48,6 +52,12 @@ class AnalyzerMetadataCollector implements MetadataCollector {
|
|||
var metadata = repository._forWriting(node);
|
||||
metadata.documentationComment = comment;
|
||||
}
|
||||
|
||||
@override
|
||||
void setImportPrefixOffset(kernel.LibraryDependency node, int offset) {
|
||||
var metadata = repository._forWriting(node);
|
||||
metadata.importPrefixOffset = offset;
|
||||
}
|
||||
}
|
||||
|
||||
/// Factory for creating Analyzer specific sink and repository.
|
||||
|
@ -135,7 +145,8 @@ class AnalyzerMetadataRepository
|
|||
kernel.Node node, kernel.BinarySource source) {
|
||||
return new AnalyzerMetadata()
|
||||
..constructorNameOffset = _readOffset(source)
|
||||
..documentationComment = _readOptionalString(source);
|
||||
..documentationComment = _readOptionalString(source)
|
||||
..importPrefixOffset = _readOffset(source);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -143,6 +154,7 @@ class AnalyzerMetadataRepository
|
|||
AnalyzerMetadata metadata, kernel.Node node, kernel.BinarySink sink) {
|
||||
_writeOffset(sink, metadata.constructorNameOffset);
|
||||
_writeOptionalString(sink, metadata.documentationComment);
|
||||
_writeOffset(sink, metadata.importPrefixOffset);
|
||||
}
|
||||
|
||||
/// Return the existing or new [AnalyzerMetadata] instance for the [node].
|
||||
|
|
|
@ -8874,6 +8874,10 @@ class PrefixElementImpl extends ElementImpl implements PrefixElement {
|
|||
@override
|
||||
int get nameOffset {
|
||||
int offset = super.nameOffset;
|
||||
if (_kernel != null) {
|
||||
var metadata = AnalyzerMetadata.forNode(_kernel);
|
||||
return metadata.importPrefixOffset;
|
||||
}
|
||||
if (offset == 0 && _unlinkedImport != null) {
|
||||
return _unlinkedImport.prefixOffset;
|
||||
}
|
||||
|
|
|
@ -6655,6 +6655,10 @@ Future<dynamic> f;
|
|||
test_import_prefixed() async {
|
||||
addLibrarySource('/a.dart', 'library a; class C {}');
|
||||
var library = await checkLibrary('import "a.dart" as a; a.C c;');
|
||||
|
||||
expect(library.imports[0].prefix.nameOffset, 19);
|
||||
expect(library.imports[0].prefix.nameLength, 1);
|
||||
|
||||
checkElementText(library, r'''
|
||||
import 'a.dart' as a;
|
||||
C c;
|
||||
|
|
|
@ -852,6 +852,7 @@ class KernelLibraryBuilder
|
|||
// This is required for the DietListener to correctly match up metadata.
|
||||
int importIndex = 0;
|
||||
int exportIndex = 0;
|
||||
MetadataCollector metadataCollector = loader.target.metadataCollector;
|
||||
while (importIndex < imports.length || exportIndex < exports.length) {
|
||||
if (exportIndex >= exports.length ||
|
||||
(importIndex < imports.length &&
|
||||
|
@ -866,15 +867,18 @@ class KernelLibraryBuilder
|
|||
continue;
|
||||
}
|
||||
|
||||
LibraryDependency dependency;
|
||||
if (import.deferred && import.prefixBuilder?.dependency != null) {
|
||||
library.addDependency(import.prefixBuilder.dependency);
|
||||
dependency = import.prefixBuilder.dependency;
|
||||
} else {
|
||||
library.addDependency(new LibraryDependency.import(
|
||||
import.imported.target,
|
||||
dependency = new LibraryDependency.import(import.imported.target,
|
||||
name: import.prefix,
|
||||
combinators: toKernelCombinators(import.combinators))
|
||||
..fileOffset = import.charOffset);
|
||||
..fileOffset = import.charOffset;
|
||||
}
|
||||
library.addDependency(dependency);
|
||||
metadataCollector?.setImportPrefixOffset(
|
||||
dependency, import.prefixCharOffset);
|
||||
} else {
|
||||
// Add export
|
||||
Export export = exports[exportIndex++];
|
||||
|
|
|
@ -2,7 +2,8 @@
|
|||
// 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 'package:kernel/kernel.dart' show Member, MetadataRepository, NamedNode;
|
||||
import 'package:kernel/kernel.dart'
|
||||
show LibraryDependency, Member, MetadataRepository, NamedNode;
|
||||
|
||||
/// The collector to add target specific metadata to.
|
||||
abstract class MetadataCollector {
|
||||
|
@ -13,4 +14,6 @@ abstract class MetadataCollector {
|
|||
void setConstructorNameOffset(Member node, Object name);
|
||||
|
||||
void setDocumentationComment(NamedNode node, String comment);
|
||||
|
||||
void setImportPrefixOffset(LibraryDependency node, int offset);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue