Skip to content

Commit

Permalink
Refactor builder and add basic nomnoml support
Browse files Browse the repository at this point in the history
  • Loading branch information
glesica committed May 19, 2019
1 parent 29dac74 commit d89d786
Show file tree
Hide file tree
Showing 16 changed files with 368 additions and 288 deletions.
1 change: 1 addition & 0 deletions USAGE.txt
Expand Up @@ -41,6 +41,7 @@ Usage: dcdg [options]
Available builders:
* plantuml - PlantUML builder that attempts to be feature-complete
* dot - Graphviz builder that only handles inheritance
* nomnoml - Nomnoml builder for embedding diagrams in web pages

The --include, --exclude, --has-a, and --is-a
options accept regular expressions.
Expand Down
2 changes: 2 additions & 0 deletions bin/dcdg.dart
Expand Up @@ -34,6 +34,8 @@ Future<Null> main(Iterable<String> arguments) async {
buildDiagram(
builder: config.builder,
classElements: classes,
excludeHasA: config.excludeHasA,
excludeIsA: config.excludeIsA,
excludePrivateClasses: config.excludePrivateClasses,
excludePrivateFields: config.excludePrivateFields,
excludePrivateMethods: config.excludePrivateMethods,
Expand Down
Binary file modified example/dcdg.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
160 changes: 84 additions & 76 deletions example/dcdg.puml
@@ -1,51 +1,6 @@
@startuml
set namespaceSeparator ::

abstract class "dcdg::src::configuration.dart::Configuration" {
+DiagramBuilder builder
+String builderName
+Iterable<RegExp> excludeExpressions
+bool excludeHasA
+bool excludeIsA
+bool exportedOnly
+bool excludePrivateClasses
+bool excludePrivateFields
+bool excludePrivateMethods
+Iterable<RegExp> hasAExpressions
+Iterable<RegExp> includeExpressions
+Iterable<RegExp> isAExpressions
+String outputPath
+String packagePath
+String searchPath
+bool shouldShowHelp
}

"dcdg::src::configuration.dart::Configuration" o-- "dcdg::src::builders::diagram_builder.dart::DiagramBuilder"


class "dcdg::src::configuration.dart::ConfigurationImpl" {
+DiagramBuilder builder
+String builderName
+Iterable<RegExp> excludeExpressions
+bool excludeHasA
+bool excludeIsA
+bool excludePrivateClasses
+bool excludePrivateFields
+bool excludePrivateMethods
+bool exportedOnly
+Iterable<RegExp> hasAExpressions
+Iterable<RegExp> includeExpressions
+Iterable<RegExp> isAExpressions
+String outputPath
+String packagePath
+String searchPath
+bool shouldShowHelp
}

"dcdg::src::configuration.dart::Configuration" <|-- "dcdg::src::configuration.dart::ConfigurationImpl"
"dcdg::src::configuration.dart::ConfigurationImpl" o-- "dcdg::src::builders::diagram_builder.dart::DiagramBuilder"


class "dcdg::src::diagram_visitor.dart::DiagramVisitor" {
+bool hasA()
+bool isA()
Expand All @@ -63,65 +18,118 @@ class "dcdg::src::diagram_visitor.dart::DiagramVisitor" {
"analyzer::dart::element::visitor.dart::RecursiveElementVisitor<R>" <|-- "dcdg::src::diagram_visitor.dart::DiagramVisitor"


class "dcdg::src::builders::plant_uml_builder.dart::PlantUmlBuilder" {
+bool excludeHasA
+bool excludeIsA
+bool excludePrivateClasses
+bool excludePrivateFields
+bool excludePrivateMethods
+void addAggregations()
+void addClass()
class "dcdg::src::builders::dot_builder.dart::DotBuilder" {
+void addAggregation()
+void addField()
+void addInterfaces()
+void addMixins()
+void addInterface()
+void addMethod()
+void addMixin()
+void addSuper()
+void beginClass()
+void endClass()
+String namespacedTypeName()
+void printContent()
+void writeContent()
}

"dcdg::src::builders::diagram_builder.dart::DiagramBuilder" <|-- "dcdg::src::builders::dot_builder.dart::DotBuilder"


class "dcdg::src::builders::plant_uml_builder.dart::PlantUmlBuilder" {
+void addAggregation()
+void addField()
+void addInterface()
+void addMethod()
+void finishClass()
+void addMixin()
+void addSuper()
+void beginClass()
+void endClass()
+String namespacedTypeName()
+String getVisibility()
+void printContent()
+void startClass()
+void writeContent()
}

"dcdg::src::builders::diagram_builder.dart::DiagramBuilder" <|-- "dcdg::src::builders::plant_uml_builder.dart::PlantUmlBuilder"


class "dcdg::src::builders::dot_builder.dart::DotBuilder" {
+bool excludeHasA
+bool excludeIsA
+bool excludePrivateClasses
+bool excludePrivateFields
+bool excludePrivateMethods
abstract class "dcdg::src::builders::diagram_builder.dart::DiagramBuilder" {
+void addAggregation()
+void addField()
+void addInterfaces()
+void addInterface()
+void addMethod()
+void addMixins()
+void addMixin()
+void addSuper()
+void finishClass()
+String getNamespacedTypeName()
+void beginClass()
+void endClass()
+void printContent()
+void startClass()
+void writeContent()
}

"dcdg::src::builders::diagram_builder.dart::DiagramBuilder" <|-- "dcdg::src::builders::dot_builder.dart::DotBuilder"


abstract class "dcdg::src::builders::diagram_builder.dart::DiagramBuilder" {
class "dcdg::src::builders::nomnoml_builder.dart::NomnomlBuilder" {
+void addAggregation()
+void addField()
+void addInterface()
+void addMethod()
+void addMixin()
+void addSuper()
+void beginClass()
+void endClass()
+void finalizeFields()
+void finalizeMethods()
+String getVisibility()
+void printContent()
+void writeContent()
}

"dcdg::src::builders::diagram_builder.dart::DiagramBuilder" <|-- "dcdg::src::builders::nomnoml_builder.dart::NomnomlBuilder"


abstract class "dcdg::src::configuration.dart::Configuration" {
+DiagramBuilder builder
+String builderName
+Iterable<RegExp> excludeExpressions
+bool excludeHasA
+bool excludeIsA
+bool exportedOnly
+bool excludePrivateClasses
+bool excludePrivateFields
+bool excludePrivateMethods
+void addField()
+void addMethod()
+void finishClass()
+void printContent()
+void startClass()
+void writeContent()
+Iterable<RegExp> hasAExpressions
+Iterable<RegExp> includeExpressions
+Iterable<RegExp> isAExpressions
+String outputPath
+String packagePath
+String searchPath
+bool shouldShowHelp
}

"dcdg::src::configuration.dart::Configuration" o-- "dcdg::src::builders::diagram_builder.dart::DiagramBuilder"


class "dcdg::src::configuration.dart::ConfigurationImpl" {
+DiagramBuilder builder
+String builderName
+Iterable<RegExp> excludeExpressions
+bool excludeHasA
+bool excludeIsA
+bool excludePrivateClasses
+bool excludePrivateFields
+bool excludePrivateMethods
+bool exportedOnly
+Iterable<RegExp> hasAExpressions
+Iterable<RegExp> includeExpressions
+Iterable<RegExp> isAExpressions
+String outputPath
+String packagePath
+String searchPath
+bool shouldShowHelp
}

"dcdg::src::configuration.dart::ConfigurationImpl" o-- "dcdg::src::builders::diagram_builder.dart::DiagramBuilder"
"dcdg::src::configuration.dart::Configuration" <|-- "dcdg::src::configuration.dart::ConfigurationImpl"


class "dcdg::src::builder_factories.dart::BuilderFactory" {
Expand Down
12 changes: 10 additions & 2 deletions lib/src/build_diagram.dart
Expand Up @@ -8,6 +8,8 @@ import 'package:meta/meta.dart';
void buildDiagram({
@required DiagramBuilder builder,
@required Iterable<ClassElement> classElements,
bool excludeHasA,
bool excludeIsA,
bool excludePrivateClasses,
bool excludePrivateFields,
bool excludePrivateMethods,
Expand All @@ -17,10 +19,16 @@ void buildDiagram({
Iterable<RegExp> isA,
}) {
final visitor = DiagramVisitor(
onAggregateField: builder.addAggregation,
onField: builder.addField,
onFinishClass: builder.finishClass,
onFinishClass: builder.endClass,
onInterface: builder.addInterface,
onMethod: builder.addMethod,
onStartClass: builder.startClass,
onMixin: builder.addMixin,
onStartClass: builder.beginClass,
onSuper: builder.addSuper,
excludeHasA: excludeHasA,
excludeIsA: excludeIsA,
excludePrivateClasses: excludePrivateClasses,
excludePrivateFields: excludePrivateMethods,
excludePrivateMethods: excludePrivateMethods,
Expand Down
6 changes: 6 additions & 0 deletions lib/src/builder_factories.dart
@@ -1,4 +1,5 @@
import 'package:dcdg/src/builders/dot_builder.dart';
import 'package:dcdg/src/builders/nomnoml_builder.dart';
import 'package:dcdg/src/builders/plant_uml_builder.dart';
import 'package:dcdg/src/builders/diagram_builder.dart';
import 'package:meta/meta.dart';
Expand All @@ -19,6 +20,11 @@ final Map<String, BuilderFactory> _factories = {
description: 'Graphviz builder that only handles inheritance',
name: 'dot',
),
'nomnoml': BuilderFactory(
callback: () => NomnomlBuilder(),
description: 'Nomnoml builder for embedding diagrams in web pages',
name: 'nomnoml',
),
};

typedef BuilderFactoryCallback = DiagramBuilder Function();
Expand Down
19 changes: 9 additions & 10 deletions lib/src/builders/diagram_builder.dart
@@ -1,27 +1,26 @@
import 'dart:io';

import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/type.dart';

abstract class DiagramBuilder {
set excludeHasA(bool value);
void addAggregation(FieldElement element);

set excludeIsA(bool value);
void addField(FieldElement element);

set excludePrivateClasses(bool value);
void addInterface(InterfaceType element);

set excludePrivateFields(bool value);
void addMethod(MethodElement element);

set excludePrivateMethods(bool value);
void addMixin(InterfaceType element);

void addField(FieldElement element);
void addSuper(InterfaceType element);

void addMethod(MethodElement element);
void beginClass(ClassElement element);

void finishClass(ClassElement element);
void endClass(ClassElement element);

void printContent(void printer(String content));

void startClass(ClassElement element);

void writeContent(File file);
}

0 comments on commit d89d786

Please sign in to comment.