You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by oh...@apache.org on 2018/05/10 17:26:29 UTC
svn commit: r1831359 -
/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/builder/combined/CombinedConfigurationBuilder.java
Author: oheger
Date: Thu May 10 17:26:29 2018
New Revision: 1831359
URL: http://svn.apache.org/viewvc?rev=1831359&view=rev
Log:
CONFIGURATION-687: Creation of child builders is now lazy.
Creating the child configuration builders of a combined configuration
first breaks interpolation during evaluation of the definition
configuration. Therefore, the builders are now created when the
combined configuration is accessed for the first time, immediately
before their managed configuration is accessed.
Modified:
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/builder/combined/CombinedConfigurationBuilder.java
Modified: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/builder/combined/CombinedConfigurationBuilder.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/builder/combined/CombinedConfigurationBuilder.java?rev=1831359&r1=1831358&r2=1831359&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/builder/combined/CombinedConfigurationBuilder.java (original)
+++ commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/builder/combined/CombinedConfigurationBuilder.java Thu May 10 17:26:29 2018
@@ -799,15 +799,26 @@ public class CombinedConfigurationBuilde
setUpParentInterpolator(currentConfiguration, config);
ConfigurationSourceData data = getSourceData();
- data.createAndAddConfigurations(result, data.getOverrideSources(),
- data.overrideBuilders);
+ boolean createBuilders = data.getChildBuilders().isEmpty();
+ List<ConfigurationBuilder<? extends Configuration>> overrideBuilders =
+ data.createAndAddConfigurations(result,
+ data.getOverrideSources(), data.overrideBuilders);
+ if (createBuilders)
+ {
+ data.overrideBuilders.addAll(overrideBuilders);
+ }
if (!data.getUnionSources().isEmpty())
{
CombinedConfiguration addConfig = createAdditionalsConfiguration(result);
result.addConfiguration(addConfig, ADDITIONAL_NAME);
initNodeCombinerListNodes(addConfig, config, KEY_ADDITIONAL_LIST);
- data.createAndAddConfigurations(addConfig, data.unionDeclarations,
- data.unionBuilders);
+ List<ConfigurationBuilder<? extends Configuration>> unionBuilders =
+ data.createAndAddConfigurations(addConfig,
+ data.unionDeclarations, data.unionBuilders);
+ if (createBuilders)
+ {
+ data.unionBuilders.addAll(unionBuilders);
+ }
}
result.isEmpty(); // this sets up the node structure
@@ -1429,36 +1440,44 @@ public class CombinedConfigurationBuilde
overrideDeclarations.addAll(createDeclarations(fetchTopLevelOverrideConfigs(config)));
overrideDeclarations.addAll(createDeclarations(config.childConfigurationsAt(KEY_OVERRIDE)));
unionDeclarations.addAll(createDeclarations(config.childConfigurationsAt(KEY_UNION)));
-
- for (ConfigurationDeclaration cd : overrideDeclarations)
- {
- overrideBuilders.add(createConfigurationBuilder(cd));
- }
- for (ConfigurationDeclaration cd : unionDeclarations)
- {
- unionBuilders.add(createConfigurationBuilder(cd));
- }
}
/**
* Processes the declaration of configuration builder providers, creates
- * the corresponding builder, obtains configurations, and adds them to
- * the specified result configuration.
+ * the corresponding builder if necessary, obtains configurations, and
+ * adds them to the specified result configuration.
*
* @param ccResult the result configuration
* @param srcDecl the collection with the declarations of configuration
* sources to process
+ * @return a list with configuration builders
* @throws ConfigurationException if an error occurs
*/
- public void createAndAddConfigurations(CombinedConfiguration ccResult,
+ public List<ConfigurationBuilder<? extends Configuration>> createAndAddConfigurations(
+ CombinedConfiguration ccResult,
List<ConfigurationDeclaration> srcDecl,
List<ConfigurationBuilder<? extends Configuration>> builders)
throws ConfigurationException
{
+ boolean createBuilders = builders.isEmpty();
+ List<ConfigurationBuilder<? extends Configuration>> newBuilders =
+ createBuilders ? new ArrayList<>(srcDecl.size()) : builders;
for (int i = 0; i < srcDecl.size(); i++)
{
- addChildConfiguration(ccResult, srcDecl.get(i), builders.get(i));
+ ConfigurationBuilder<? extends Configuration> b;
+ if (createBuilders)
+ {
+ b = createConfigurationBuilder(srcDecl.get(i));
+ newBuilders.add(b);
+ }
+ else
+ {
+ b = builders.get(i);
+ }
+ addChildConfiguration(ccResult, srcDecl.get(i), b);
}
+
+ return newBuilders;
}
/**