@@ -306,12 +306,11 @@ class Generator {
306306 defaultContext = defaultContext!! .join(contexts[0 ])
307307 }
308308
309- excludedTypes = never
310- .flatMap({ options -> Dimensions .Parser .parseOptions(options) }).toList()
309+ excludedTypes = never.flatMap { options -> parseOptions(options) }.toList()
311310
312- permissiveConditions = included.map( { dimensionsParser!! .parse(it) }) .toList()
311+ permissiveConditions = included.map { dimensionsParser!! .parse(it) }.toList()
313312
314- prohibitingConditions = excluded.map( { dimensionsParser!! .parse(it) }) .toList()
313+ prohibitingConditions = excluded.map { dimensionsParser!! .parse(it) }.toList()
315314
316315 initProcessors()
317316 }
@@ -333,16 +332,16 @@ class Generator {
333332 setCurrentSourceFile(sourceFile)
334333 log.info(" Processing file: {}" , sourceFile)
335334 val sourceFileName = sourceFile.name
336- var targetDims = dimensionsParser!! .parseClassName(sourceFileName)
335+ var targetDims: Dimensions = dimensionsParser!! .parseClassName(sourceFileName)
337336 var rawContent = sourceFile.readText()
338337 val fileDimsM = CONTEXT_START_P .matcher(rawContent)
339338 if (fileDimsM.find() && fileDimsM.start() == 0 ) {
340- targetDims = dimensionsParser !! .parseForContext(
341- getBlockGroup(fileDimsM.group(), CONTEXT_START_BLOCK_P , " dimensions " ) )
342- rawContent = rawContent.substring(fileDimsM.end()).trim( { it <= ' ' }) + " \n "
339+ val explicitContext = fileDimsM.group()
340+ targetDims = parseAndCheckExplicitContext(explicitContext, sourceFile )
341+ rawContent = rawContent.substring(fileDimsM.end()).trim { it <= ' ' } + " \n "
343342 }
344343 log.info(" Target dimensions: {}" , targetDims)
345- val targetContexts = targetDims.generateContexts()
344+ val targetContexts: List < Context > = targetDims.generateContexts()
346345 val mainContext = defaultContext!! .join(targetContexts[0 ])
347346 val fileCondM = COND_START_P .matcher(rawContent)
348347 var fileCond: Condition ? = null
@@ -351,7 +350,7 @@ class Generator {
351350 getBlockGroup(fileCondM.group(), COND_START_BLOCK_P , " condition" ),
352351 dimensionsParser!! , mainContext,
353352 rawContent, fileCondM.start())
354- rawContent = rawContent.substring(fileCondM.end()).trim( { it <= ' ' }) + " \n "
353+ rawContent = rawContent.substring(fileCondM.end()).trim { it <= ' ' } + " \n "
355354 }
356355 val content = rawContent
357356
@@ -404,6 +403,21 @@ class Generator {
404403 ForkJoinTasks .invokeAll(contextGenerationTasks)
405404 }
406405
406+ private fun parseAndCheckExplicitContext (explicitContext : String , sourceFile : File ):
407+ Dimensions {
408+ val targetDims: Dimensions = dimensionsParser!! .parseForContext(
409+ getBlockGroup(explicitContext, CONTEXT_START_BLOCK_P , " dimensions" ))
410+ val mainExplicitContext: Context = targetDims.generateContexts()[0 ]
411+ for ((dim, option) in mainExplicitContext) {
412+ if (! Context .stringIncludesOption(sourceFile.name, option)) {
413+ throw RuntimeException (
414+ " Dimension $dim with options ${targetDims.dimensions[dim]} specified " +
415+ " explicitly in $sourceFile is not found in the file name" )
416+ }
417+ }
418+ return targetDims
419+ }
420+
407421 @Throws(IOException ::class )
408422 internal fun writeFile (file : File , content : String ) {
409423 file.writeText(content)
@@ -420,7 +434,7 @@ class Generator {
420434 }
421435 if (! checkPermissive(target))
422436 return false
423- if (! prohibitingConditions!! .isEmpty ()) {
437+ if (prohibitingConditions!! .isNotEmpty ()) {
424438 for (prohibitingCondition in prohibitingConditions!! ) {
425439 if (prohibitingCondition.checkAsCondition(target))
426440 return false
@@ -430,7 +444,7 @@ class Generator {
430444 }
431445
432446 private fun checkPermissive (target : Context ): Boolean {
433- if (! permissiveConditions!! .isEmpty ()) {
447+ if (permissiveConditions!! .isNotEmpty ()) {
434448 for (permissiveCondition in permissiveConditions!! ) {
435449 if (permissiveCondition.checkAsCondition(target))
436450 return true
0 commit comments