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
<darrell.love...@gmail.com>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, <aha...@apache.org> 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 <aha...@apache.org>
>> Authored: Wed Jan 22 16:42:40 2014 +0000
>> Committer: Alex Harui <aha...@apache.org>
>> 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();
>>
>>
>

Reply via email to