Found an example in the falcon compiler of using soft dependencies. In
org.apache.flex.compiler.config.Configuration,
the below code says -locale must be set before -library-path.
@Config(allowMultiple = true, isPath = true)
@Mapping({"compiler", "library-path"})
@Arguments(Arguments.PATH_ELEMENT)
@InfiniteArguments
@SoftPrerequisites("locale")
public void setCompilerLibraryPath(ConfigurationValue cv, String[]
pathlist) throws CannotOpen
{
final ImmutableList<String> resolvedPaths = expandTokens(
Arrays.asList(pathlist),
locales,
cv, !reportMissingCompilerLibraries);
libraryPath.addAll(resolvedPaths);
}
-Darrell Loverin
On Wed, Jan 22, 2014 at 1:25 PM, Darrell Loverin
<[email protected]>wrote:
> You can create a "soft dependency" from one configuration variable to
> another and get the same effect as this code. I don't have the code in
> front of me right now but there should be some examples in the
> Configuration classes of the old MXML compiler. In this case library-path
> would have a soft dependency on target-player.
>
>
> -Darrell
>
>
> On Wed, Jan 22, 2014 at 11:44 AM, <[email protected]> wrote:
>
>> Updated Branches:
>> refs/heads/develop 8966eda94 -> b5a06269f
>>
>>
>> guarantee that target-player gets processed before library-path otherwise
>> wrong player gets checked
>>
>>
>> Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
>> Commit:
>> http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/b5a06269
>> Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/b5a06269
>> Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/b5a06269
>>
>> Branch: refs/heads/develop
>> Commit: b5a06269f51aa1843cc6da79dd3a6eb0f4848345
>> Parents: 8966eda
>> Author: Alex Harui <[email protected]>
>> Authored: Wed Jan 22 16:42:40 2014 +0000
>> Committer: Alex Harui <[email protected]>
>> Committed: Wed Jan 22 16:42:40 2014 +0000
>>
>> ----------------------------------------------------------------------
>> .../compiler/config/ConfigurationBuffer.java | 23 ++++++++++++++++++++
>> 1 file changed, 23 insertions(+)
>> ----------------------------------------------------------------------
>>
>>
>>
>> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/b5a06269/compiler/src/org/apache/flex/compiler/config/ConfigurationBuffer.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/compiler/src/org/apache/flex/compiler/config/ConfigurationBuffer.java
>> b/compiler/src/org/apache/flex/compiler/config/ConfigurationBuffer.java
>> index b6484fd..f76bf17 100644
>> ---
>> a/compiler/src/org/apache/flex/compiler/config/ConfigurationBuffer.java
>> +++
>> b/compiler/src/org/apache/flex/compiler/config/ConfigurationBuffer.java
>> @@ -102,6 +102,8 @@ import com.google.common.collect.ImmutableList;
>> */
>> public final class ConfigurationBuffer
>> {
>> + private static final String TARGET_PLAYER = "target-player";
>> +
>> public ConfigurationBuffer(Class<? extends Configuration>
>> configClass)
>> {
>> this(configClass, new HashMap<String, String>());
>> @@ -714,6 +716,27 @@ public final class ConfigurationBuffer
>> Set<String> done = new HashSet<String>();
>> boolean success = true;
>>
>> + // get target-player first because its setting affect expansion
>> of some
>> + // tokens later. The varList is populated by getMethods() which
>> returns
>> + // the methods in random order and can result in
>> compiler.library-path being
>> + // evaluated before target-player and then we end up looking up
>> the wrong
>> + // version of playerglobal.
>> + if (varList.contains(TARGET_PLAYER))
>> + {
>> + varList.remove(TARGET_PLAYER);
>> + if (varMap.containsKey(TARGET_PLAYER))
>> + {
>> + try
>> + {
>> + commitVariable(config, TARGET_PLAYER, done);
>> + }
>> + catch (ConfigurationException e)
>> + {
>> + problems.add(new ConfigurationProblem(e));
>> + success = false;
>> + }
>> + }
>> + }
>> for (Iterator<String> vars = varList.iterator(); vars.hasNext();)
>> {
>> String var = vars.next();
>>
>>
>