mirror of
https://github.com/dart-lang/sdk
synced 2024-09-15 22:00:09 +00:00
[analysis_server] Fix hover on constructor name declarations
Change-Id: I6254a8a8d82a1f2b12e8fa3589fbe114d9945af6 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/263401 Reviewed-by: Brian Wilkerson <brianwilkerson@google.com> Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
This commit is contained in:
parent
cf111fdcfb
commit
172bcc33dd
|
@ -42,6 +42,8 @@ class DartUnitHoverComputer {
|
||||||
locationEntity = node.name;
|
locationEntity = node.name;
|
||||||
} else if (node is MethodDeclaration) {
|
} else if (node is MethodDeclaration) {
|
||||||
locationEntity = node.name;
|
locationEntity = node.name;
|
||||||
|
} else if (node is ConstructorDeclaration) {
|
||||||
|
locationEntity = node.name ?? node.returnType;
|
||||||
} else if (node is VariableDeclaration) {
|
} else if (node is VariableDeclaration) {
|
||||||
locationEntity = node.name;
|
locationEntity = node.name;
|
||||||
}
|
}
|
||||||
|
@ -58,22 +60,34 @@ class DartUnitHoverComputer {
|
||||||
} else if (parent is ConstructorName &&
|
} else if (parent is ConstructorName &&
|
||||||
grandParent is InstanceCreationExpression) {
|
grandParent is InstanceCreationExpression) {
|
||||||
node = grandParent;
|
node = grandParent;
|
||||||
|
} else if (node is SimpleIdentifier &&
|
||||||
|
parent is ConstructorDeclaration &&
|
||||||
|
parent.name != null) {
|
||||||
|
node = parent;
|
||||||
}
|
}
|
||||||
if (node != null &&
|
if (node != null &&
|
||||||
(node is CompilationUnitMember ||
|
(node is CompilationUnitMember ||
|
||||||
node is Expression ||
|
node is Expression ||
|
||||||
node is FormalParameter ||
|
node is FormalParameter ||
|
||||||
node is MethodDeclaration ||
|
node is MethodDeclaration ||
|
||||||
|
node is ConstructorDeclaration ||
|
||||||
node is VariableDeclaration)) {
|
node is VariableDeclaration)) {
|
||||||
// For constructor calls the whole expression is selected (above) but this
|
// For constructors, the location should cover the type name and
|
||||||
// results in the range covering the whole call so narrow it to just the
|
// constructor name (for both calls and declarations).
|
||||||
// ConstructorName.
|
HoverInformation hover;
|
||||||
var hover = node is InstanceCreationExpression
|
if (node is InstanceCreationExpression) {
|
||||||
? HoverInformation(
|
hover = HoverInformation(
|
||||||
node.constructorName.offset,
|
node.constructorName.offset,
|
||||||
node.constructorName.length,
|
node.constructorName.length,
|
||||||
)
|
);
|
||||||
: HoverInformation(locationEntity.offset, locationEntity.length);
|
} else if (node is ConstructorDeclaration) {
|
||||||
|
var offset = node.returnType.offset;
|
||||||
|
var end = node.name?.end ?? node.returnType.end;
|
||||||
|
var length = end - node.returnType.offset;
|
||||||
|
hover = HoverInformation(offset, length);
|
||||||
|
} else {
|
||||||
|
hover = HoverInformation(locationEntity.offset, locationEntity.length);
|
||||||
|
}
|
||||||
// element
|
// element
|
||||||
var element = ElementLocator.locate(node);
|
var element = ElementLocator.locate(node);
|
||||||
if (element != null) {
|
if (element != null) {
|
||||||
|
|
|
@ -97,6 +97,34 @@ void f() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<void> test_class_constructor_named_declaration() async {
|
||||||
|
newFile(testFilePath, '''
|
||||||
|
library my.library;
|
||||||
|
class A {
|
||||||
|
/// my doc
|
||||||
|
A.named() {}
|
||||||
|
}
|
||||||
|
''');
|
||||||
|
void onConstructor(HoverInformation hover) {
|
||||||
|
// range
|
||||||
|
expect(hover.offset, findOffset('A.named'));
|
||||||
|
expect(hover.length, 'A.named'.length);
|
||||||
|
// element
|
||||||
|
expect(hover.dartdoc, 'my doc');
|
||||||
|
expect(hover.elementDescription, 'A A.named()');
|
||||||
|
expect(hover.elementKind, 'constructor');
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
var hover = await prepareHover('A.');
|
||||||
|
onConstructor(hover);
|
||||||
|
}
|
||||||
|
{
|
||||||
|
var hover = await prepareHover('named()');
|
||||||
|
onConstructor(hover);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Future<void> test_class_constructor_noKeyword_const() async {
|
Future<void> test_class_constructor_noKeyword_const() async {
|
||||||
newFile(testFilePath, '''
|
newFile(testFilePath, '''
|
||||||
library my.library;
|
library my.library;
|
||||||
|
|
Loading…
Reference in a new issue