Files
sdk/pkg/scrape/example/class_reuse.dart
T
Konstantin Shcheglov a31337548e Deprecate ClassDeclaration/ClassTypeAlias.isAbstract
Change-Id: I70fa1714fb31bb611d86054fc4538c01afda6763
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/252563
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Jake Macdonald <jakemac@google.com>
2022-07-26 01:51:27 +00:00

50 lines
1.5 KiB
Dart

// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'package:analyzer/dart/ast/ast.dart';
import 'package:scrape/scrape.dart';
void main(List<String> arguments) {
Scrape()
..addHistogram('Declarations')
..addHistogram('Uses')
..addHistogram('Superclass names')
..addHistogram('Superinterface names')
..addHistogram('Mixin names')
..addVisitor(() => ClassReuseVisitor())
..runCommandLine(arguments);
}
class ClassReuseVisitor extends ScrapeVisitor {
@override
void visitClassDeclaration(ClassDeclaration node) {
if (node.abstractKeyword != null) {
record('Declarations', 'abstract class');
} else {
record('Declarations', 'class');
}
var extendsClause = node.extendsClause;
if (extendsClause != null) {
record('Uses', 'extend');
record('Superclass names', extendsClause.superclass.toString());
}
var withClause = node.withClause;
if (withClause != null) {
for (var mixin in withClause.mixinTypes) {
record('Uses', 'mixin');
record('Mixin names', mixin.toString());
}
}
var implementsClause = node.implementsClause;
if (implementsClause != null) {
for (var type in implementsClause.interfaces) {
record('Uses', 'implement');
record('Superinterface names', type.toString());
}
}
}
}