jqassistant-plugin / jqassistant-context-mapper-plugin

@contextmapper integration for jQAssistant to scan and create Context Maps to validate as-is against to-be architecture
GNU General Public License v3.0
0 stars 1 forks source link

NPE on non-resolvable bounded context relation #3

Closed DirkMahler closed 5 months ago

DirkMahler commented 1 year ago

The following context mapper file references an undefined bounded context (hence the typo for Mhl):

ContextMap Muehle {
    type = SYSTEM_LANDSCAPE
    state = TO_BE

    contains Mehl
    contains Sack

    Mhl [U] -> [D] Sack
}

BoundedContext Mehl
BoundedContext Sack

This leads to a NPE in the scanner:

Caused by: java.lang.NullPointerException
    at org.jqassistant.plugin.contextmapper.ContextMapperScannerPlugin.lambda$getBoundedContextByName$21 (ContextMapperScannerPlugin.java:144) 
    at java.util.stream.ReferencePipeline$2$1.accept (ReferencePipeline.java:176)
    at java.util.ArrayList$ArrayListSpliterator.tryAdvance (ArrayList.java:1632)
    at java.util.stream.ReferencePipeline.forEachWithCancel (ReferencePipeline.java:127) 
    at java.util.stream.AbstractPipeline.copyIntoWithCancel (AbstractPipeline.java:502)
    at java.util.stream.AbstractPipeline.copyInto (AbstractPipeline.java:488) 
    at java.util.stream.AbstractPipeline.wrapAndCopyInto (AbstractPipeline.java:474)
    at java.util.stream.FindOps$FindOp.evaluateSequential (FindOps.java:150) 
    at java.util.stream.AbstractPipeline.evaluate (AbstractPipeline.java:234) 
    at java.util.stream.ReferencePipeline.findFirst (ReferencePipeline.java:543)
    at org.jqassistant.plugin.contextmapper.ContextMapperScannerPlugin.getBoundedContextByName (ContextMapperScannerPlugin.java:145)
    at org.jqassistant.plugin.contextmapper.ContextMapperScannerPlugin.lambda$processContextMap$16 (ContextMapperScannerPlugin.java:101) 
    at java.lang.Iterable.forEach (Iterable.java:75)
    at org.jqassistant.plugin.contextmapper.ContextMapperScannerPlugin.processContextMap (ContextMapperScannerPlugin.java:99)
    at org.jqassistant.plugin.contextmapper.ContextMapperScannerPlugin.lambda$scan$2 (ContextMapperScannerPlugin.java:54)
    at java.util.stream.ReferencePipeline$3$1.accept (ReferencePipeline.java:195) 
    at java.util.ArrayList$ArrayListSpliterator.forEachRemaining (ArrayList.java:1655)
    at java.util.stream.AbstractPipeline.copyInto (AbstractPipeline.java:484)
    at java.util.stream.AbstractPipeline.wrapAndCopyInto (AbstractPipeline.java:474) 
    at java.util.stream.ForEachOps$ForEachOp.evaluateSequential (ForEachOps.java:150)
    at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential (ForEachOps.java:173)
    at java.util.stream.AbstractPipeline.evaluate (AbstractPipeline.java:234)
    at java.util.stream.ReferencePipeline.forEach (ReferencePipeline.java:497) 
    at org.jqassistant.plugin.contextmapper.ContextMapperScannerPlugin.scan (ContextMapperScannerPlugin.java:55)
    at org.jqassistant.plugin.contextmapper.ContextMapperScannerPlugin.scan (ContextMapperScannerPlugin.java:27)

The plugin should be robust against such kind of error, I'd expect a dangling bounded context node Mhl which is referenced for the dependency.