mirror of
https://github.com/dart-lang/sdk
synced 2024-10-14 12:48:10 +00:00
Add support for navigating from the URI in import and export configurations to the referenced file
Change-Id: Ic6234d9a24dcb52228067b20d69277e47ff89a0a Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/152401 Reviewed-by: Konstantin Shcheglov <scheglov@google.com> Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
This commit is contained in:
parent
d0e78f8a77
commit
ff83b0fec9
|
@ -802,6 +802,15 @@ class A {
|
|||
}
|
||||
}
|
||||
|
||||
Future<void> test_string_configuration() async {
|
||||
newFile('$projectPath/bin/lib.dart', content: '').path;
|
||||
var lib2File = newFile('$projectPath/bin/lib2.dart', content: '').path;
|
||||
addTestFile('import "lib.dart" if (dart.library.html) "lib2.dart";');
|
||||
await prepareNavigation();
|
||||
assertHasRegionString('"lib2.dart"');
|
||||
assertHasFileTarget(lib2File, 0, 0);
|
||||
}
|
||||
|
||||
Future<void> test_string_export() async {
|
||||
var libCode = 'library lib;';
|
||||
var libFile = newFile('$projectPath/bin/lib.dart', content: libCode).path;
|
||||
|
|
|
@ -780,6 +780,13 @@ class LibraryAnalyzer {
|
|||
_library.source,
|
||||
relativeUri,
|
||||
);
|
||||
for (var configuration in directive.configurations) {
|
||||
var uriLiteral = configuration.uri;
|
||||
String uriContent = uriLiteral.stringValue?.trim();
|
||||
Source defaultSource = _resolveUri(
|
||||
file, directive is ImportDirective, uriLiteral, uriContent);
|
||||
configuration.uriSource = defaultSource;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3426,6 +3426,7 @@ class ExportDirectiveImpl extends NamespaceDirectiveImpl
|
|||
|
||||
@override
|
||||
void visitChildren(AstVisitor visitor) {
|
||||
configurations.accept(visitor);
|
||||
super.visitChildren(visitor);
|
||||
combinators.accept(visitor);
|
||||
}
|
||||
|
@ -5772,6 +5773,7 @@ class ImportDirectiveImpl extends NamespaceDirectiveImpl
|
|||
@override
|
||||
void visitChildren(AstVisitor visitor) {
|
||||
super.visitChildren(visitor);
|
||||
configurations.accept(visitor);
|
||||
_prefix?.accept(visitor);
|
||||
combinators.accept(visitor);
|
||||
}
|
||||
|
|
|
@ -811,6 +811,12 @@ class ResolverVisitor extends ScopedVisitor {
|
|||
node.accept(typeAnalyzer);
|
||||
}
|
||||
|
||||
@override
|
||||
void visitConfiguration(Configuration node) {
|
||||
// Don't visit the children. For the time being we don't resolve anything
|
||||
// inside the configuration.
|
||||
}
|
||||
|
||||
@override
|
||||
void visitConstructorDeclaration(ConstructorDeclaration node) {
|
||||
ExecutableElement outerFunction = _enclosingFunction;
|
||||
|
|
|
@ -9,6 +9,7 @@ import 'package:analyzer/dart/element/element.dart';
|
|||
import 'package:analyzer/file_system/file_system.dart';
|
||||
import 'package:analyzer/src/dart/ast/utilities.dart';
|
||||
import 'package:analyzer/src/dart/element/element.dart';
|
||||
import 'package:analyzer_plugin/protocol/protocol_common.dart' as protocol;
|
||||
import 'package:analyzer_plugin/utilities/analyzer_converter.dart';
|
||||
import 'package:analyzer_plugin/utilities/navigation/navigation.dart';
|
||||
|
||||
|
@ -145,6 +146,24 @@ class _DartNavigationComputerVisitor extends RecursiveAstVisitor<void> {
|
|||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void visitConfiguration(Configuration node) {
|
||||
var source = node.uriSource;
|
||||
if (source != null) {
|
||||
if (resourceProvider.getResource(source.fullName).exists) {
|
||||
// TODO(brianwilkerson) If the analyzer ever resolves the URI to a
|
||||
// library, use that library element to create the region.
|
||||
var uriNode = node.uri;
|
||||
computer.collector.addRegion(
|
||||
uriNode.offset,
|
||||
uriNode.length,
|
||||
protocol.ElementKind.LIBRARY,
|
||||
protocol.Location(source.fullName, 0, 0, 0, 0));
|
||||
}
|
||||
}
|
||||
super.visitConfiguration(node);
|
||||
}
|
||||
|
||||
@override
|
||||
void visitConstructorDeclaration(ConstructorDeclaration node) {
|
||||
// associate constructor with "T" or "T.name"
|
||||
|
|
Loading…
Reference in a new issue