3
3
4
4
use Cspray \AnnotatedTarget \PhpParserAnnotatedTargetParser ;
5
5
use Cspray \ArchitecturalDecision \ArchitecturalDecisionAttributeGatherer ;
6
+ use Cspray \ArchitecturalDecision \Initializer ;
6
7
use Cspray \ArchitecturalDecision \SourceArchitecturalDecisionAttributeRegistry ;
7
8
use Cspray \ArchitecturalDecision \XmlDocumentGenerator ;
8
9
@@ -34,6 +35,24 @@ foreach (new RecursiveIteratorIterator(new RecursiveArrayIterator($composerDirs)
34
35
$ paths [] = $ rootDir . '/ ' . $ composerDir ;
35
36
}
36
37
38
+ $ initializers = $ composer ['extra ' ]['$architecturalDecision ' ]['initializers ' ] ?? [];
39
+
40
+ foreach ($ initializers as $ initializerClass ) {
41
+ $ initializerClass = (string ) $ initializerClass ;
42
+ if (!class_exists ($ initializerClass )) {
43
+ echo 'Your configured initializer ' . $ initializerClass . ' is not an autoloadable class. ' ;
44
+ exit (255 );
45
+ }
46
+
47
+ if (!is_subclass_of ($ initializerClass , Initializer::class)) {
48
+ echo 'Your configured initializer ' . $ initializerClass . ' MUST extend ' . Initializer::class;
49
+ exit (255 );
50
+ }
51
+
52
+ $ initializer = new $ initializerClass ();
53
+ $ paths = [...$ paths , ...$ initializer ->getAdditionalScanPaths ()];
54
+ }
55
+
37
56
$ attributes = (new SourceArchitecturalDecisionAttributeRegistry ($ paths ))->getArchitecturalDecisionAttributes ();
38
57
if (count ($ attributes ) === 0 ) {
39
58
echo 'You must implement an ArchitecturalDecisionRecord in your codebase before running this command! ' ;
@@ -46,7 +65,11 @@ foreach ($attributes as $attribute) {
46
65
}
47
66
48
67
if (file_exists ($ rootDir . '/architectural-decisions.xml ' )) {
49
- unlink ($ rootDir . '/architectural-decisions.xml ' );
68
+ if (file_exists ($ rootDir . '/architectural-decisions.xml.bak ' )) {
69
+ echo 'Please ensure there are no architectural-decisions.xml.bak files before running this command. ' ;
70
+ exit (255 );
71
+ }
72
+ rename ($ rootDir . '/architectural-decisions.xml ' , $ rootDir . '/architectural-decisions.xml.bak ' );
50
73
}
51
74
52
75
$ xmlGenerator = new XmlDocumentGenerator ($ gatherer );
0 commit comments