| @@ -54,6 +54,7 public abstract class VariantSourcesPlug | |||||
| 54 |
|
54 | |||
| 55 | // create registries |
|
55 | // create registries | |
| 56 | var sourceSetRegistry = new SourceSetRegistry(objectFactory); |
|
56 | var sourceSetRegistry = new SourceSetRegistry(objectFactory); | |
|
|
57 | lateConfigurationPolicy.finalizePolicy(); | |||
| 57 | var sourceSetConfiguration = new SourceSetConfigurationRegistry(lateConfigurationPolicy::mode); |
|
58 | var sourceSetConfiguration = new SourceSetConfigurationRegistry(lateConfigurationPolicy::mode); | |
| 58 |
|
59 | |||
| 59 | // build compile unit namer |
|
60 | // build compile unit namer | |
| @@ -131,14 +132,14 public abstract class VariantSourcesPlug | |||||
| 131 | return variants.getLayers().stream() |
|
132 | return variants.getLayers().stream() | |
| 132 | .filter(named(name)) |
|
133 | .filter(named(name)) | |
| 133 | .findAny() |
|
134 | .findAny() | |
| 134 |
.orElseThrow(() -> new I |
|
135 | .orElseThrow(() -> new InvalidUserDataException("Layer '" + name + "' isn't declared")); | |
| 135 | } |
|
136 | } | |
| 136 |
|
137 | |||
| 137 | private static Variant resolveVariant(VariantsView variants, String name) { |
|
138 | private static Variant resolveVariant(VariantsView variants, String name) { | |
| 138 | return variants.getVariants().stream() |
|
139 | return variants.getVariants().stream() | |
| 139 | .filter(named(name)) |
|
140 | .filter(named(name)) | |
| 140 | .findAny() |
|
141 | .findAny() | |
| 141 |
.orElseThrow(() -> new I |
|
142 | .orElseThrow(() -> new InvalidUserDataException("Variant '" + name + "' isn't declared")); | |
| 142 | } |
|
143 | } | |
| 143 |
|
144 | |||
| 144 | private static CompileUnit resolveCompileUnit(VariantSourcesContext ctx, String variantName, String layerName) { |
|
145 | private static CompileUnit resolveCompileUnit(VariantSourcesContext ctx, String variantName, String layerName) { | |
| @@ -17,7 +17,10 public interface VariantSourcesExtension | |||||
| 17 | * <li>it must be selected before the first selector rule is registered via |
|
17 | * <li>it must be selected before the first selector rule is registered via | |
| 18 | * {@link #variant(String, Action)}, {@link #layer(String, Action)} or |
|
18 | * {@link #variant(String, Action)}, {@link #layer(String, Action)} or | |
| 19 | * {@link #unit(String, String, Action)};</li> |
|
19 | * {@link #unit(String, String, Action)};</li> | |
| 20 | * <li>once selected, it cannot be changed later;</li> |
|
20 | * <li>it must be selected before the finalized context becomes observable via | |
|
|
21 | * {@link #whenFinalized(Action)};</li> | |||
|
|
22 | * <li>once selected or once the finalized context is being created, it cannot | |||
|
|
23 | * be changed later;</li> | |||
| 21 | * <li>the policy controls both diagnostics and late-application semantics.</li> |
|
24 | * <li>the policy controls both diagnostics and late-application semantics.</li> | |
| 22 | * </ul> |
|
25 | * </ul> | |
| 23 | * |
|
26 | * | |
| @@ -8,6 +8,7 public class DefaultLateConfigurationPol | |||||
| 8 | private boolean policyApplied = false; |
|
8 | private boolean policyApplied = false; | |
| 9 |
|
9 | |||
| 10 | public LateConfigurationMode mode() { |
|
10 | public LateConfigurationMode mode() { | |
|
|
11 | finalizePolicy(); | |||
| 11 | return policyMode; |
|
12 | return policyMode; | |
| 12 | } |
|
13 | } | |
| 13 |
|
14 | |||
| @@ -356,7 +356,7 class VariantSourcesPluginFunctionalTest | |||||
| 356 | } |
|
356 | } | |
| 357 | """); |
|
357 | """); | |
| 358 |
|
358 | |||
| 359 | assertBuildFails("Variant 'missing' is't declared", "help"); |
|
359 | assertBuildFails("Variant 'missing' isn't declared", "help"); | |
| 360 | } |
|
360 | } | |
| 361 |
|
361 | |||
| 362 | @Test |
|
362 | @Test | |
| @@ -428,4 +428,27 class VariantSourcesPluginFunctionalTest | |||||
| 428 |
|
428 | |||
| 429 | assertBuildFails("Naming policy already applied", "help"); |
|
429 | assertBuildFails("Naming policy already applied", "help"); | |
| 430 | } |
|
430 | } | |
|
|
431 | ||||
|
|
432 | @Test | |||
|
|
433 | void rejectsChangingLateConfigurationPolicyAfterContextBecomesObservable() throws Exception { | |||
|
|
434 | writeSettings("variant-sources-late-policy-context-fixed"); | |||
|
|
435 | writeBuildFile(""" | |||
|
|
436 | apply plugin: org.implab.gradle.variants.VariantSourcesPlugin | |||
|
|
437 | ||||
|
|
438 | def variantsExt = extensions.getByType(org.implab.gradle.variants.core.VariantsExtension) | |||
|
|
439 | variantsExt.layers.create('main') | |||
|
|
440 | variantsExt.roles.create('production') | |||
|
|
441 | variantsExt.variant('browser') { | |||
|
|
442 | role('production') { layers('main') } | |||
| 431 | } |
|
443 | } | |
|
|
444 | ||||
|
|
445 | variantSources.whenFinalized { | |||
|
|
446 | variantSources.lateConfigurationPolicy { | |||
|
|
447 | allowLateConfiguration() | |||
|
|
448 | } | |||
|
|
449 | } | |||
|
|
450 | """); | |||
|
|
451 | ||||
|
|
452 | assertBuildFails("Lazy configuration policy already applied", "help"); | |||
|
|
453 | } | |||
|
|
454 | } | |||
General Comments 0
You need to be logged in to leave comments.
Login now
