##// END OF EJS Templates
Removed layer links from variants
Removed layer links from variants

File last commit:

r27:33c11dfc2c2e default
r30:2dd3356774b2 default
Show More
variant-sources-plugin.md
145 lines | 3.9 KiB | text/x-minidsrc | MarkdownLexer
/ common / variant-sources-plugin.md
cin
implemented variants model, variants-sources adapter
r26 # Variant Sources Plugin
## NAME
`VariantsSourcesPlugin` и extension `variantSources`.
## SYNOPSIS
```groovy
plugins {
id 'org.implab.gradle-variants-sources'
}
variants {
layer('main')
variant('browser') {
role('main') { layers('main') }
}
variant('node') {
role('main') { layers('main') }
}
}
variantSources {
bind('main').sourceSetNamePattern = '{layer}'
bind('main') {
configureSourceSet {
declareOutputs('compiled')
}
}
whenRegistered { sourceSetName() }
whenBound('browser') { roleName() }
}
```
## DESCRIPTION
`VariantsSourcesPlugin` применяет `VariantsPlugin` и `SourcesPlugin`, затем
cin
Variants mutation guard after finalize
r27 регистрирует source sets из модели `variants`.
cin
implemented variants model, variants-sources adapter
r26
cin
Variants mutation guard after finalize
r27 Точка запуска registration:
cin
implemented variants model, variants-sources adapter
r26
- `variants.whenFinalized(model -> registerSourceSets(...))`
cin
Variants mutation guard after finalize
r27 ### registration
cin
implemented variants model, variants-sources adapter
r26
Для каждой usage-связки `variant/role/layer` вычисляется имя source set,
регистрируется `GenericSourceSet` (если он еще не существует), затем
вызываются callbacks.
### binding
`bind('<layer>')` возвращает `BuildLayerBinding` и задает policy для этого
слоя:
- как именовать source set;
- как конфигурировать source set;
- какие callbacks вызвать на registration/binding.
### sourceSetNamePattern
cin
Variants mutation guard after finalize
r27 `sourceSetNamePattern` определяет naming policy зарегистрированного source set.
cin
implemented variants model, variants-sources adapter
r26
Default:
- `{variant}{layerCap}`
Tokens:
- `{variant}`, `{variantCap}`
- `{role}`, `{roleCap}`
- `{layer}`, `{layerCap}`
Имя санитизируется (`[^A-Za-z0-9_.-] -> _`).
Ограничение:
- один `sourceSetName` не может быть порожден разными слоями.
## EVENTS
### whenRegistered
- callback на новый уникальный source set;
- replayable;
- при shared source set срабатывает один раз.
### whenBound
- callback на каждую usage-связку `variant/role/layer`;
- replayable;
- подходит для per-usage логики.
### variant filter
Глобальные callbacks поддерживают фильтр по варианту:
- `whenRegistered(String variantName, ...)`
- `whenBound(String variantName, ...)`
## SOURCE SET CONTEXT
`SourceSetContext` содержит:
- `variantName`, `roleName`, `layerName`, `sourceSetName`;
- `sourceSet` (`NamedDomainObjectProvider<GenericSourceSet>`).
Sugar:
- `configureSourceSet(Action|Closure)`.
## API
### VariantSourcesExtension
- `bind(String)` — получить/создать binding по имени слоя.
- `bind(String, Action|Closure)` — сконфигурировать binding.
- `bindings(Action|Closure)` — контейнерная конфигурация bindings.
- `whenRegistered(...)` — глобальные callbacks регистрации source set.
- `whenBound(...)` — глобальные callbacks usage-binding.
### BuildLayerBinding
- `sourceSetNamePattern` — naming policy для source set слоя.
- `configureSourceSet(...)` — слойная конфигурация `GenericSourceSet`.
- `whenRegistered(...)` — callbacks регистрации в рамках слоя.
- `whenBound(...)` — callbacks usage-binding в рамках слоя.
## KEY CLASSES
- `VariantsSourcesPlugin` — точка входа plugin adapter.
- `VariantSourcesExtension` — глобальный DSL bind/events.
- `BuildLayerBinding` — layer-local policy и callbacks.
- `SourceSetContext` — payload callbacks и sugar-конфигурирование.
## NOTES
cin
Variants mutation guard after finalize
r27 - `sourceSetNamePattern` фиксируется при первом чтении в registration
cin
implemented variants model, variants-sources adapter
r26 (`finalizeValueOnRead`).
- Closure callbacks используют delegate-first.
- Для вложенных closure лучше явный параметр (`ctx -> ...`).