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 2014/12/08 22:05:57 UTC
svn commit: r1643924 - in /commons/proper/configuration/trunk/src:
main/java/org/apache/commons/configuration2/AbstractHierarchicalConfiguration.java
test/java/org/apache/commons/configuration2/TestAbstractHierarchicalConfiguration.java
Author: oheger
Date: Mon Dec 8 21:05:57 2014
New Revision: 1643924
URL: http://svn.apache.org/r1643924
Log:
[CONFIGURATION-200] Added a specialized size() implementation for hierarchical configurations.
Modified:
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/AbstractHierarchicalConfiguration.java
commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration2/TestAbstractHierarchicalConfiguration.java
Modified: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/AbstractHierarchicalConfiguration.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/AbstractHierarchicalConfiguration.java?rev=1643924&r1=1643923&r2=1643924&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/AbstractHierarchicalConfiguration.java (original)
+++ commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/AbstractHierarchicalConfiguration.java Mon Dec 8 21:05:57 2014
@@ -615,6 +615,18 @@ public abstract class AbstractHierarchic
}
/**
+ * {@inheritDoc} This implementation is slightly more efficient than the
+ * default implementation. It does not iterate over the key set, but
+ * directly queries its size after it has been constructed. Note that
+ * constructing the key set is still an O(n) operation.
+ */
+ @Override
+ protected int sizeInternal()
+ {
+ return visitDefinedKeys().getKeyList().size();
+ }
+
+ /**
* Returns an iterator with all keys defined in this configuration.
* Note that the keys returned by this method will not contain any
* indices. This means that some structure will be lost.</p>
@@ -624,12 +636,21 @@ public abstract class AbstractHierarchic
@Override
protected Iterator<String> getKeysInternal()
{
+ return visitDefinedKeys().getKeyList().iterator();
+ }
+
+ /**
+ * Creates a {@code DefinedKeysVisitor} and visits all defined keys with it.
+ *
+ * @return the visitor after all keys have been visited
+ */
+ private DefinedKeysVisitor visitDefinedKeys()
+ {
DefinedKeysVisitor visitor = new DefinedKeysVisitor();
NodeHandler<T> nodeHandler = getModel().getNodeHandler();
NodeTreeWalker.INSTANCE.walkDFS(nodeHandler.getRootNode(), visitor,
nodeHandler);
-
- return visitor.getKeyList().iterator();
+ return visitor;
}
/**
Modified: commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration2/TestAbstractHierarchicalConfiguration.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration2/TestAbstractHierarchicalConfiguration.java?rev=1643924&r1=1643923&r2=1643924&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration2/TestAbstractHierarchicalConfiguration.java (original)
+++ commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration2/TestAbstractHierarchicalConfiguration.java Mon Dec 8 21:05:57 2014
@@ -423,6 +423,15 @@ public class TestAbstractHierarchicalCon
assertFalse("More keys than expected", it.hasNext());
}
+ /**
+ * Tests whether the correct size is calculated.
+ */
+ @Test
+ public void testSize()
+ {
+ assertEquals("Wrong size", 2, config.size());
+ }
+
@Test
public void testAddProperty()
{