Skip to content

Commit 4fab565

Browse files
stereotype441commit-bot@chromium.org
authored andcommitted
Several minor fixes to the analyzer/FE comparison tool.
- Mixin applications are now handled correctly. - The front end's synthetic field "_exports#" is now ignored. - Forwarding semi-stubs were erroneously being skipped; they are now included, as they should be (since they correspond to methods explictly declared in the source code). - Named parameters in function types are now annotated properly (the annotation was previously missing a ": "). Drops the number of failing language_2 tests with `--compiler compare_analyzer_cfe` from 405 to 34. Change-Id: I148269c967cc0fdf67bcfcd698cba36fc0b66368 Reviewed-on: https://dart-review.googlesource.com/75121 Reviewed-by: Konstantin Shcheglov <[email protected]> Commit-Queue: Paul Berry <[email protected]>
1 parent eb96871 commit 4fab565

File tree

2 files changed

+36
-16
lines changed

2 files changed

+36
-16
lines changed

pkg/analyzer_fe_comparison/lib/src/analyzer.dart

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -103,23 +103,21 @@ class _AnalyzerVisitor extends UnifyingAstVisitor<void> {
103103
void visitClassDeclaration(ClassDeclaration node) {
104104
var children = <ComparisonNode>[];
105105
var visitor = _AnalyzerVisitor(_typeProvider, children);
106-
visitor._visitTypeParameters(node.declaredElement.typeParameters);
107-
if (node.declaredElement.supertype != null) {
108-
children.add(_translateType('Extends: ', node.declaredElement.supertype));
109-
}
110-
for (int i = 0; i < node.declaredElement.mixins.length; i++) {
111-
children
112-
.add(_translateType('Mixin $i: ', node.declaredElement.mixins[i]));
113-
}
114-
for (int i = 0; i < node.declaredElement.interfaces.length; i++) {
115-
children.add(_translateType(
116-
'Implements $i: ', node.declaredElement.interfaces[i]));
117-
}
106+
visitor._handleClassOrClassTypeAlias(node.declaredElement);
118107
visitor._visitList(node.members);
119108
_resultNodes
120109
.add(ComparisonNode.sorted('Class ${node.name.name}', children));
121110
}
122111

112+
@override
113+
void visitClassTypeAlias(ClassTypeAlias node) {
114+
var children = <ComparisonNode>[];
115+
var visitor = _AnalyzerVisitor(_typeProvider, children);
116+
visitor._handleClassOrClassTypeAlias(node.declaredElement);
117+
_resultNodes.add(
118+
ComparisonNode.sorted('MixinApplication ${node.name.name}', children));
119+
}
120+
123121
@override
124122
void visitConstructorDeclaration(ConstructorDeclaration node) {
125123
var children = <ComparisonNode>[];
@@ -218,6 +216,20 @@ class _AnalyzerVisitor extends UnifyingAstVisitor<void> {
218216
}
219217
}
220218

219+
void _handleClassOrClassTypeAlias(ClassElement element) {
220+
_visitTypeParameters(element.typeParameters);
221+
if (element.supertype != null) {
222+
_resultNodes.add(_translateType('Extends: ', element.supertype));
223+
}
224+
for (int i = 0; i < element.mixins.length; i++) {
225+
_resultNodes.add(_translateType('Mixin $i: ', element.mixins[i]));
226+
}
227+
for (int i = 0; i < element.interfaces.length; i++) {
228+
_resultNodes
229+
.add(_translateType('Implements $i: ', element.interfaces[i]));
230+
}
231+
}
232+
221233
/// Converts the analyzer representation of a type into a ComparisonNode.
222234
ComparisonNode _translateType(String prefix, DartType type) {
223235
if (type is InterfaceType) {

pkg/analyzer_fe_comparison/lib/src/kernel.dart

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,9 @@ class _KernelVisitor extends TreeVisitor<void> {
9393
@override
9494
void visitClass(Class class_) {
9595
if (class_.isAnonymousMixin) return null;
96-
var kind = class_.isEnum ? 'Enum' : 'Class';
96+
var kind = class_.isEnum
97+
? 'Enum'
98+
: class_.isMixinApplication ? 'MixinApplication' : 'Class';
9799
var children = <ComparisonNode>[];
98100
var visitor = _KernelVisitor(children);
99101
if (class_.isEnum) {
@@ -108,6 +110,9 @@ class _KernelVisitor extends TreeVisitor<void> {
108110
if (class_.supertype != null) {
109111
var declaredSupertype = class_.supertype.asInterfaceType;
110112
var mixedInTypes = <DartType>[];
113+
if (class_.isMixinApplication) {
114+
mixedInTypes.add(class_.mixedInType.asInterfaceType);
115+
}
111116
while (declaredSupertype.classNode.isAnonymousMixin) {
112117
// Since we're walking from the class to its declared supertype, we
113118
// encounter the mixins in the reverse order that they were declared,
@@ -151,6 +156,7 @@ class _KernelVisitor extends TreeVisitor<void> {
151156
@override
152157
void visitField(Field field) {
153158
if (field.name.name == '_redirecting#') return null;
159+
if (field.name.name == '_exports#') return null;
154160
var children = <ComparisonNode>[];
155161
children.add(_TypeVisitor.translate('Type: ', field.type));
156162
// TODO(paulberry): handle more fields from Field
@@ -197,7 +203,9 @@ class _KernelVisitor extends TreeVisitor<void> {
197203

198204
@override
199205
void visitProcedure(Procedure procedure) {
200-
if (procedure.isForwardingStub) return null;
206+
if (procedure.isSyntheticForwarder) {
207+
return null;
208+
}
201209
// TODO(paulberry): add an annotation to the ComparisonNode when the
202210
// procedure is a factory.
203211
var kind = procedure.isFactory
@@ -278,8 +286,8 @@ class _TypeVisitor extends DartTypeVisitor<ComparisonNode> {
278286
.add(translate('$kind parameter $i: ', node.positionalParameters[i]));
279287
}
280288
for (var namedType in node.namedParameters) {
281-
children
282-
.add(translate('Named parameter ${namedType.name}', namedType.type));
289+
children.add(
290+
translate('Named parameter ${namedType.name}: ', namedType.type));
283291
}
284292
return ComparisonNode.sorted('${_prefix}FunctionType', children);
285293
}

0 commit comments

Comments
 (0)