mirror of
https://github.com/dart-lang/sdk
synced 2024-10-14 12:30:03 +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 {
|
Future<void> test_string_export() async {
|
||||||
var libCode = 'library lib;';
|
var libCode = 'library lib;';
|
||||||
var libFile = newFile('$projectPath/bin/lib.dart', content: libCode).path;
|
var libFile = newFile('$projectPath/bin/lib.dart', content: libCode).path;
|
||||||
|
|
|
@ -780,6 +780,13 @@ class LibraryAnalyzer {
|
||||||
_library.source,
|
_library.source,
|
||||||
relativeUri,
|
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
|
@override
|
||||||
void visitChildren(AstVisitor visitor) {
|
void visitChildren(AstVisitor visitor) {
|
||||||
|
configurations.accept(visitor);
|
||||||
super.visitChildren(visitor);
|
super.visitChildren(visitor);
|
||||||
combinators.accept(visitor);
|
combinators.accept(visitor);
|
||||||
}
|
}
|
||||||
|
@ -5772,6 +5773,7 @@ class ImportDirectiveImpl extends NamespaceDirectiveImpl
|
||||||
@override
|
@override
|
||||||
void visitChildren(AstVisitor visitor) {
|
void visitChildren(AstVisitor visitor) {
|
||||||
super.visitChildren(visitor);
|
super.visitChildren(visitor);
|
||||||
|
configurations.accept(visitor);
|
||||||
_prefix?.accept(visitor);
|
_prefix?.accept(visitor);
|
||||||
combinators.accept(visitor);
|
combinators.accept(visitor);
|
||||||
}
|
}
|
||||||
|
|
|
@ -811,6 +811,12 @@ class ResolverVisitor extends ScopedVisitor {
|
||||||
node.accept(typeAnalyzer);
|
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
|
@override
|
||||||
void visitConstructorDeclaration(ConstructorDeclaration node) {
|
void visitConstructorDeclaration(ConstructorDeclaration node) {
|
||||||
ExecutableElement outerFunction = _enclosingFunction;
|
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/file_system/file_system.dart';
|
||||||
import 'package:analyzer/src/dart/ast/utilities.dart';
|
import 'package:analyzer/src/dart/ast/utilities.dart';
|
||||||
import 'package:analyzer/src/dart/element/element.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/analyzer_converter.dart';
|
||||||
import 'package:analyzer_plugin/utilities/navigation/navigation.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
|
@override
|
||||||
void visitConstructorDeclaration(ConstructorDeclaration node) {
|
void visitConstructorDeclaration(ConstructorDeclaration node) {
|
||||||
// associate constructor with "T" or "T.name"
|
// associate constructor with "T" or "T.name"
|
||||||
|
|
Loading…
Reference in a new issue