##// END OF EJS Templates
Variants mutation guard after finalize
Variants mutation guard after finalize

File last commit:

r27:33c11dfc2c2e default
r27:33c11dfc2c2e default
Show More
variant-sources-plugin.md
145 lines | 3.9 KiB | text/x-minidsrc | MarkdownLexer
/ common / variant-sources-plugin.md

Variant Sources Plugin

NAME

VariantsSourcesPlugin и extension variantSources.

SYNOPSIS

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, затем регистрирует source sets из модели variants.

Точка запуска registration:

  • variants.whenFinalized(model -> registerSourceSets(...))

registration

Для каждой usage-связки variant/role/layer вычисляется имя source set, регистрируется GenericSourceSet (если он еще не существует), затем вызываются callbacks.

binding

bind('<layer>') возвращает BuildLayerBinding и задает policy для этого слоя:

  • как именовать source set;
  • как конфигурировать source set;
  • какие callbacks вызвать на registration/binding.

sourceSetNamePattern

sourceSetNamePattern определяет naming policy зарегистрированного source set.

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

  • sourceSetNamePattern фиксируется при первом чтении в registration (finalizeValueOnRead).
  • Closure callbacks используют delegate-first.
  • Для вложенных closure лучше явный параметр (ctx -> ...).