Store and resynthesize codeOffset/codeLength for functions and methods.
R=brianwilkerson@google.com
Change-Id: I2106fb407b7488eede8c06112f1ac582b92d6af5
Reviewed-on: https://dart-review.googlesource.com/69400
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analysis_server/test/services/refactoring/inline_method_test.dart b/pkg/analysis_server/test/services/refactoring/inline_method_test.dart
index 7015b75..e75781d 100644
--- a/pkg/analysis_server/test/services/refactoring/inline_method_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/inline_method_test.dart
@@ -1768,11 +1768,6 @@
@failingTest
@override
- test_bad_async_targetIsSync_doesNotReturnFuture() =>
- super.test_bad_async_targetIsSync_doesNotReturnFuture();
-
- @failingTest
- @override
test_noArgument_named_hasDefault() =>
super.test_noArgument_named_hasDefault();
diff --git a/pkg/analysis_server/test/services/refactoring/rename_unit_member_test.dart b/pkg/analysis_server/test/services/refactoring/rename_unit_member_test.dart
index 3fc6b16..9046642 100644
--- a/pkg/analysis_server/test/services/refactoring/rename_unit_member_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/rename_unit_member_test.dart
@@ -620,11 +620,6 @@
@failingTest
@override
- test_checkFinalConditions_shadowedBy_MethodElement() =>
- super.test_checkFinalConditions_shadowedBy_MethodElement();
-
- @failingTest
- @override
test_checkFinalConditions_shadowsInSubClass_importedLib_hideCombinator() =>
callFailingTest(super
.test_checkFinalConditions_shadowsInSubClass_importedLib_hideCombinator());
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index b717bc4..9572717 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -4236,6 +4236,10 @@
@override
int get codeLength {
+ if (_kernel != null) {
+ var metadata = AnalyzerMetadata.forNode(_kernel);
+ return metadata?.codeLength;
+ }
if (serializedExecutable != null) {
return serializedExecutable.codeRange?.length;
}
@@ -4244,6 +4248,10 @@
@override
int get codeOffset {
+ if (_kernel != null) {
+ var metadata = AnalyzerMetadata.forNode(_kernel);
+ return metadata?.codeOffset;
+ }
if (serializedExecutable != null) {
return serializedExecutable.codeRange?.offset;
}
diff --git a/pkg/analyzer/test/src/dart/analysis/search_test.dart b/pkg/analyzer/test/src/dart/analysis/search_test.dart
index 52f448b..fe2e68b 100644
--- a/pkg/analyzer/test/src/dart/analysis/search_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/search_test.dart
@@ -1998,16 +1998,6 @@
@failingTest
@override
- test_searchMemberReferences_qualified_unresolved() =>
- super.test_searchMemberReferences_qualified_unresolved();
-
- @failingTest
- @override
- test_searchMemberReferences_unqualified_unresolved() =>
- super.test_searchMemberReferences_unqualified_unresolved();
-
- @failingTest
- @override
test_searchReferences_ClassElement_definedInSdk_declarationSite() =>
super.test_searchReferences_ClassElement_definedInSdk_declarationSite();
@@ -2028,131 +2018,21 @@
@failingTest
@override
- test_searchReferences_ConstructorElement_default() =>
- super.test_searchReferences_ConstructorElement_default();
-
- @failingTest
- @override
- test_searchReferences_ConstructorElement_default_otherFile() =>
- super.test_searchReferences_ConstructorElement_default_otherFile();
-
- @failingTest
- @override
- test_searchReferences_ConstructorElement_named() =>
- super.test_searchReferences_ConstructorElement_named();
-
- @failingTest
- @override
- test_searchReferences_ConstructorElement_synthetic() =>
- super.test_searchReferences_ConstructorElement_synthetic();
-
- @failingTest
- @override
test_searchReferences_FieldElement() =>
super.test_searchReferences_FieldElement();
@failingTest
@override
- test_searchReferences_FieldElement_ofEnum() =>
- super.test_searchReferences_FieldElement_ofEnum();
-
- @failingTest
- @override
- test_searchReferences_FieldElement_synthetic() =>
- super.test_searchReferences_FieldElement_synthetic();
-
- @failingTest
- @override
- test_searchReferences_FunctionElement() =>
- super.test_searchReferences_FunctionElement();
-
- @failingTest
- @override
- test_searchReferences_FunctionElement_local() =>
- super.test_searchReferences_FunctionElement_local();
-
- @failingTest
- @override
- test_searchReferences_ImportElement_noPrefix() =>
- super.test_searchReferences_ImportElement_noPrefix();
-
- @failingTest
- @override
- test_searchReferences_ImportElement_noPrefix_inPackage() =>
- super.test_searchReferences_ImportElement_noPrefix_inPackage();
-
- @failingTest
- @override
- test_searchReferences_ImportElement_withPrefix() =>
- super.test_searchReferences_ImportElement_withPrefix();
-
- @failingTest
- @override
- test_searchReferences_ImportElement_withPrefix_forMultipleImports() =>
- super.test_searchReferences_ImportElement_withPrefix_forMultipleImports();
-
- @failingTest
- @override
test_searchReferences_LabelElement() =>
super.test_searchReferences_LabelElement();
@failingTest
@override
- test_searchReferences_LocalVariableElement() =>
- super.test_searchReferences_LocalVariableElement();
-
- @failingTest
- @override
- test_searchReferences_LocalVariableElement_inForEachLoop() =>
- super.test_searchReferences_LocalVariableElement_inForEachLoop();
-
- @failingTest
- @override
- test_searchReferences_LocalVariableElement_inPackage() =>
- super.test_searchReferences_LocalVariableElement_inPackage();
-
- @failingTest
- @override
- test_searchReferences_MethodElement() =>
- super.test_searchReferences_MethodElement();
-
- @failingTest
- @override
- test_searchReferences_MethodMember() =>
- super.test_searchReferences_MethodMember();
-
- @failingTest
- @override
- test_searchReferences_ParameterElement_named() =>
- super.test_searchReferences_ParameterElement_named();
-
- @failingTest
- @override
test_searchReferences_ParameterElement_ofConstructor() =>
super.test_searchReferences_ParameterElement_ofConstructor();
@failingTest
@override
- test_searchReferences_ParameterElement_ofLocalFunction() =>
- super.test_searchReferences_ParameterElement_ofLocalFunction();
-
- @failingTest
- @override
- test_searchReferences_ParameterElement_ofMethod() =>
- super.test_searchReferences_ParameterElement_ofMethod();
-
- @failingTest
- @override
- test_searchReferences_ParameterElement_ofTopLevelFunction() =>
- super.test_searchReferences_ParameterElement_ofTopLevelFunction();
-
- @failingTest
- @override
- test_searchReferences_ParameterElement_optionalPositional() =>
- super.test_searchReferences_ParameterElement_optionalPositional();
-
- @failingTest
- @override
test_searchReferences_PrefixElement() =>
super.test_searchReferences_PrefixElement();
@@ -2178,16 +2058,6 @@
@failingTest
@override
- test_searchReferences_PropertyAccessorElement_getter() =>
- super.test_searchReferences_PropertyAccessorElement_getter();
-
- @failingTest
- @override
- test_searchReferences_PropertyAccessorElement_setter() =>
- super.test_searchReferences_PropertyAccessorElement_setter();
-
- @failingTest
- @override
test_searchReferences_TopLevelVariableElement() =>
super.test_searchReferences_TopLevelVariableElement();
@@ -2198,11 +2068,6 @@
@failingTest
@override
- test_searchReferences_TypeParameterElement_ofLocalFunction() =>
- super.test_searchReferences_TypeParameterElement_ofLocalFunction();
-
- @failingTest
- @override
test_searchReferences_TypeParameterElement_ofMethod() =>
super.test_searchReferences_TypeParameterElement_ofMethod();
diff --git a/pkg/analyzer/test/src/summary/element_text.dart b/pkg/analyzer/test/src/summary/element_text.dart
index d734785..a0a25fc 100644
--- a/pkg/analyzer/test/src/summary/element_text.dart
+++ b/pkg/analyzer/test/src/summary/element_text.dart
@@ -180,17 +180,9 @@
writeIf(e.isMixinApplication, 'alias ');
writeName(e);
+ writeCodeRange(e);
writeTypeParameterElements(e.typeParameters);
- if (withCodeRanges) {
- var elementImpl = e as ElementImpl;
- buffer.write('/*codeOffset=');
- buffer.write(elementImpl.codeOffset);
- buffer.write(', codeLength=');
- buffer.write(elementImpl.codeLength);
- buffer.write('*/');
- }
-
if (e.supertype != null && e.supertype.displayName != 'Object' ||
e.mixins.isNotEmpty) {
buffer.write(' extends ');
@@ -223,6 +215,17 @@
buffer.writeln('}');
}
+ void writeCodeRange(Element e) {
+ if (withCodeRanges) {
+ var elementImpl = e as ElementImpl;
+ buffer.write('/*codeOffset=');
+ buffer.write(elementImpl.codeOffset);
+ buffer.write(', codeLength=');
+ buffer.write(elementImpl.codeLength);
+ buffer.write('*/');
+ }
+ }
+
void writeConstructorElement(ConstructorElement e) {
writeDocumentation(e, ' ');
writeMetadata(e, ' ', '\n');
@@ -267,9 +270,13 @@
}
void writeDocumentation(Element e, [String prefix = '']) {
- if (e.documentationComment != null) {
+ String comment = e.documentationComment;
+ if (comment != null) {
+ if (comment.startsWith('///')) {
+ comment = comment.split('\n').join('\n$prefix');
+ }
buffer.write(prefix);
- buffer.writeln(e.documentationComment);
+ buffer.writeln(comment);
}
}
@@ -475,6 +482,7 @@
writeType2(e.returnType);
writeName(e);
+ writeCodeRange(e);
writeTypeParameterElements(e.typeParameters);
writeParameterElements(e.parameters);
@@ -598,6 +606,7 @@
writeType2(e.returnType);
writeName(e);
+ writeCodeRange(e);
writeTypeParameterElements(e.typeParameters);
writeParameterElements(e.parameters);
diff --git a/pkg/analyzer/test/src/summary/resynthesize_common.dart b/pkg/analyzer/test/src/summary/resynthesize_common.dart
index 194adcf..9aa0713 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_common.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_common.dart
@@ -2672,6 +2672,112 @@
withConstElements: false);
}
+ test_codeRange_function() async {
+ var library = await checkLibrary('''
+void raw() {}
+
+/// Comment 1.
+/// Comment 2.
+void hasDocComment() {}
+
+@Object()
+void hasAnnotation() {}
+
+@Object()
+/// Comment 1.
+/// Comment 2.
+void annotationThenComment() {}
+
+/// Comment 1.
+/// Comment 2.
+@Object()
+void commentThenAnnotation() {}
+
+/// Comment 1.
+@Object()
+/// Comment 2.
+void commentAroundAnnotation() {}
+''');
+ checkElementText(
+ library,
+ r'''
+void raw/*codeOffset=0, codeLength=13*/() {}
+/// Comment 1.
+/// Comment 2.
+void hasDocComment/*codeOffset=15, codeLength=53*/() {}
+@Object()
+void hasAnnotation/*codeOffset=70, codeLength=33*/() {}
+/// Comment 1.
+/// Comment 2.
+@Object()
+void annotationThenComment/*codeOffset=105, codeLength=71*/() {}
+/// Comment 1.
+/// Comment 2.
+@Object()
+void commentThenAnnotation/*codeOffset=178, codeLength=71*/() {}
+/// Comment 2.
+@Object()
+void commentAroundAnnotation/*codeOffset=266, codeLength=58*/() {}
+''',
+ withCodeRanges: true,
+ withConstElements: false);
+ }
+
+ test_codeRange_method() async {
+ var library = await checkLibrary('''
+class C {
+ void raw() {}
+
+ /// Comment 1.
+ /// Comment 2.
+ void hasDocComment() {}
+
+ @Object()
+ void hasAnnotation() {}
+
+ @Object()
+ /// Comment 1.
+ /// Comment 2.
+ void annotationThenComment() {}
+
+ /// Comment 1.
+ /// Comment 2.
+ @Object()
+ void commentThenAnnotation() {}
+
+ /// Comment 1.
+ @Object()
+ /// Comment 2.
+ void commentAroundAnnotation() {}
+}
+''');
+ checkElementText(
+ library,
+ r'''
+class C/*codeOffset=0, codeLength=382*/ {
+ void raw/*codeOffset=12, codeLength=13*/() {}
+ /// Comment 1.
+ /// Comment 2.
+ void hasDocComment/*codeOffset=31, codeLength=57*/() {}
+ @Object()
+ void hasAnnotation/*codeOffset=94, codeLength=35*/() {}
+ /// Comment 1.
+ /// Comment 2.
+ @Object()
+ void annotationThenComment/*codeOffset=135, codeLength=77*/() {}
+ /// Comment 1.
+ /// Comment 2.
+ @Object()
+ void commentThenAnnotation/*codeOffset=218, codeLength=77*/() {}
+ /// Comment 2.
+ @Object()
+ void commentAroundAnnotation/*codeOffset=318, codeLength=62*/() {}
+}
+''',
+ withCodeRanges: true,
+ withConstElements: false);
+ }
+
test_const_constructor_inferred_args() async {
if (!isStrongMode) return;
var library = await checkLibrary('''
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart
index 70260d6..078ccce 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart
@@ -617,6 +617,8 @@
int charOpenParenOffset,
int charEndOffset,
String nativeMethodName,
+ int codeStartOffset,
+ int codeEndOffset,
{bool isTopLevel}) {
MetadataCollector metadataCollector = loader.target.metadataCollector;
ProcedureBuilder procedure = new KernelProcedureBuilder(
@@ -635,6 +637,8 @@
nativeMethodName);
metadataCollector?.setDocumentationComment(
procedure.target, documentationComment);
+ metadataCollector?.setCodeStartEnd(
+ procedure.target, codeStartOffset, codeEndOffset);
checkTypeVariables(typeVariables, procedure);
addBuilder(name, procedure, charOffset);
if (nativeMethodName != null) {
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 1f7b2ef..1c5db24 100644
--- a/pkg/front_end/lib/src/fasta/source/outline_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
@@ -551,6 +551,11 @@
.resolveTypes(typeVariables, library);
final int startCharOffset =
metadata == null ? beginToken.charOffset : metadata.first.charOffset;
+
+ int codeStartOffset =
+ _chooseCodeStartOffset(docComment, metadataToken, beginToken);
+ int codeEndOffset = endToken.end;
+
library.addProcedure(
docComment?.text,
metadata,
@@ -565,6 +570,8 @@
formalsOffset,
endToken.charOffset,
nativeMethodName,
+ codeStartOffset,
+ codeEndOffset,
isTopLevel: true);
nativeMethodName = null;
}
@@ -766,6 +773,11 @@
}
final int startCharOffset =
metadata == null ? beginToken.charOffset : metadata.first.charOffset;
+
+ int codeStartOffset =
+ _chooseCodeStartOffset(docComment, metadataToken, beginToken);
+ int codeEndOffset = endToken.end;
+
library.addProcedure(
docComment?.text,
metadata,
@@ -780,6 +792,8 @@
formalsOffset,
endToken.charOffset,
nativeMethodName,
+ codeStartOffset,
+ codeEndOffset,
isTopLevel: false);
}
nativeMethodName = null;
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 956d2a0..2376e21 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
@@ -416,6 +416,8 @@
int charOpenParenOffset,
int charEndOffset,
String nativeMethodName,
+ int codeStartOffset,
+ int codeEndOffset,
{bool isTopLevel});
void addEnum(