// 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 arguments) { Scrape() ..addHistogram('Declarations') ..addHistogram('Uses') ..addHistogram('Superclass names') ..addHistogram('Superinterface names') ..addHistogram('Mixin names') ..addVisitor(ClassReuseVisitor.new) ..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()); } } } }