svn commit: r1853229 - /jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/nodetype/NodeTypeTest.java
Author: reschke Date: Fri Feb 8 17:42:24 2019 New Revision: 1853229 URL: http://svn.apache.org/viewvc?rev=1853229=rev Log: OAK-8037: add test case for making a node type referenceable Modified: jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/nodetype/NodeTypeTest.java Modified: jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/nodetype/NodeTypeTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/nodetype/NodeTypeTest.java?rev=1853229=1853228=1853229=diff == --- jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/nodetype/NodeTypeTest.java (original) +++ jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/nodetype/NodeTypeTest.java Fri Feb 8 17:42:24 2019 @@ -20,6 +20,7 @@ package org.apache.jackrabbit.oak.jcr.no import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.io.StringReader; @@ -172,7 +173,7 @@ public class NodeTypeTest extends Abstra pdt.add(opts); ntt.add(nt); } - + logCustomizer = LogCustomizer.forLogger(TypeEditorProvider.class.getName()).enable(Level.INFO) .contains("appear to be trivial, repository will not be scanned").create(); try { @@ -350,4 +351,51 @@ public class NodeTypeTest extends Abstra n.getProperty("test:mandatory").remove(); session.save(); } + +@Test +public void addReferenceableToExistingType() throws Exception { +Session session = getAdminSession(); +Node root = session.getRootNode(); + +// 1. Create node type that is not referencable +String cnd = "<'test'='http://www.apache.org/jackrabbit/test'> [test:AlmostReferenceable] > nt:base"; +CndImporter.registerNodeTypes(new StringReader(cnd), session, false); + +// 2. Create test node +Node newnode = root.addNode("testnode", "test:AlmostReferenceable"); +session.save(); + +// 3. Attempt node type upgrade, adding optional jcr:uuid property +cnd = "<'test'='http://www.apache.org/jackrabbit/test'> [test:AlmostReferenceable] > nt:base - jcr:uuid (string)"; +CndImporter.registerNodeTypes(new StringReader(cnd), session, true); + +// 4. fill jcr:uuid +newnode = root.getNode("testnode"); +String uuid = UUID.randomUUID().toString(); +newnode.setProperty("jcr:uuid", uuid); +session.save(); +// property is not a system property yet + assertFalse(newnode.getProperty("jcr:uuid").getDefinition().isAutoCreated()); + assertFalse(newnode.getProperty("jcr:uuid").getDefinition().isProtected()); + +// 5. Attempt node type upgrade, making the type referencable +cnd = "<'test'='http://www.apache.org/jackrabbit/test'> [test:AlmostReferenceable] > mix:referenceable, nt:base"; +CndImporter.registerNodeTypes(new StringReader(cnd), session, true); + +// 6. new node should be referenceable and have jcr:uuid +newnode = root.getNode("testnode"); +assertTrue(newnode.hasProperty("jcr:uuid")); +// property is now a system property + assertTrue(newnode.getProperty("jcr:uuid").getDefinition().isAutoCreated()); + assertTrue(newnode.getProperty("jcr:uuid").getDefinition().isProtected()); + +// 7. try to reference the node +Node refnode = root.addNode("refnode", "nt:unstructured"); +refnode.setProperty("refprop", newnode); +session.save(); + +// 8. get the node by UUID +Node found = session.getNodeByIdentifier(uuid); +assertTrue(found.isSame(newnode)); +} }
svn commit: r1853228 - /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/SecurityProviderImpl.java
Author: stillalex Date: Fri Feb 8 16:00:20 2019 New Revision: 1853228 URL: http://svn.apache.org/viewvc?rev=1853228=rev Log: OAK-6221 Deprecate SecurityProviderImpl - trivial javadoc note Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/SecurityProviderImpl.java Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/SecurityProviderImpl.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/SecurityProviderImpl.java?rev=1853228=1853227=1853228=diff == --- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/SecurityProviderImpl.java (original) +++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/SecurityProviderImpl.java Fri Feb 8 16:00:20 2019 @@ -59,6 +59,9 @@ import org.osgi.framework.BundleContext; import static com.google.common.base.Preconditions.checkNotNull; +/** + * @deprecated Replaced by {@code org.apache.jackrabbit.oak.security.internal.SecurityProviderBuilder} + */ @Deprecated public class SecurityProviderImpl implements SecurityProvider, WhiteboardAware {
svn commit: r1853226 [1/2] - in /jackrabbit/oak/trunk/oak-security-spi: ./ src/test/java/org/apache/jackrabbit/oak/plugins/tree/ src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/acce
Author: angela Date: Fri Feb 8 15:54:14 2019 New Revision: 1853226 URL: http://svn.apache.org/viewvc?rev=1853226=rev Log: OAK-8036 : Improve test in oak-security-spi Added: jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/plugins/tree/NullLocationTest.java jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/plugins/tree/PropertyLocationTest.java Modified: jackrabbit/oak/trunk/oak-security-spi/pom.xml jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/plugins/tree/AbstractTreeTest.java jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/plugins/tree/TreeLocationTest.java jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/plugins/tree/TreeUtilTest.java jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/ACETest.java jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/AbstractAccessControlListTest.java jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/AbstractAccessControlManagerTest.java jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/ImmutableACLTest.java jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/TestACL.java jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/permission/PermissionsTest.java jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/AbstractRestrictionProviderTest.java jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/CompositeRestrictionProviderTest.java jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/RestrictionDefinitionImplTest.java jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/RestrictionImplTest.java jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/privilege/PrivilegeBitsTest.java jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/xml/PropInfoTest.java Modified: jackrabbit/oak/trunk/oak-security-spi/pom.xml URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-security-spi/pom.xml?rev=1853226=1853225=1853226=diff == --- jackrabbit/oak/trunk/oak-security-spi/pom.xml (original) +++ jackrabbit/oak/trunk/oak-security-spi/pom.xml Fri Feb 8 15:54:14 2019 @@ -34,7 +34,7 @@ false -0.89 +0.91 Modified: jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/plugins/tree/AbstractTreeTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/plugins/tree/AbstractTreeTest.java?rev=1853226=1853225=1853226=diff == --- jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/plugins/tree/AbstractTreeTest.java (original) +++ jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/plugins/tree/AbstractTreeTest.java Fri Feb 8 15:54:14 2019 @@ -33,7 +33,9 @@ import static org.mockito.Mockito.withSe public class AbstractTreeTest { +static final String NON_EXISTING_PATH = "/nonExisting"; static final String CHILD_PATH = "/z/child"; +static final String PROPERTY_PATH = CHILD_PATH + "/p"; static final String STRING_VALUE = "value"; static final long LONG_VALUE = 1; @@ -50,11 +52,11 @@ public class AbstractTreeTest { when(rootTree.hasProperty("p")).thenReturn(true); when(rootTree.getProperty("p")).thenReturn(PropertyStates.createProperty("p", LONG_VALUE)); -nonExisting = mockTree("/nonExisting", rootTree, false, NodeTypeConstants.NT_OAK_UNSTRUCTURED); +nonExisting = mockTree(NON_EXISTING_PATH, rootTree, false, NodeTypeConstants.NT_OAK_UNSTRUCTURED); Tree x = mockTree("/x", rootTree, true); z = mockTree("/z", rootTree, true, NodeTypeConstants.NT_OAK_UNSTRUCTURED); -child = mockTree("/z/child", z, true, NodeTypeConstants.NT_OAK_UNSTRUCTURED); +child = mockTree(CHILD_PATH, z, true, NodeTypeConstants.NT_OAK_UNSTRUCTURED); when(child.hasProperty("p")).thenReturn(true); when(child.getProperty("p")).thenReturn(PropertyStates.createProperty("p", STRING_VALUE));
svn commit: r1853226 [2/2] - in /jackrabbit/oak/trunk/oak-security-spi: ./ src/test/java/org/apache/jackrabbit/oak/plugins/tree/ src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/acce
Modified: jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/privilege/PrivilegeBitsTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/privilege/PrivilegeBitsTest.java?rev=1853226=1853225=1853226=diff == --- jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/privilege/PrivilegeBitsTest.java (original) +++ jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/privilege/PrivilegeBitsTest.java Fri Feb 8 15:54:14 2019 @@ -125,7 +125,7 @@ public class PrivilegeBitsTest implement for (int i = 0; i < 10; i++) { PrivilegeBits nxt = pb.nextBits(); assertEquals(nxt, pb.nextBits()); -assertFalse(pb.equals(nxt)); +assertNotEquals(pb, nxt); pb = nxt; } @@ -227,16 +227,14 @@ public class PrivilegeBitsTest implement } } +@Test(expected = UnsupportedOperationException.class) +public void testEmptyAdd() { +// empty privilege bits +PrivilegeBits.EMPTY.add(PrivilegeBits.EMPTY); +} + @Test public void testAdd() { -// empty -try { -PrivilegeBits.EMPTY.add(PrivilegeBits.EMPTY); -fail("UnsupportedOperation expected"); -} catch (UnsupportedOperationException e) { -// success -} - // other privilege bits PrivilegeBits pb = READ_NODES_PRIVILEGE_BITS; PrivilegeBits mod = PrivilegeBits.getInstance(pb); @@ -295,16 +293,14 @@ public class PrivilegeBitsTest implement } } +@Test(expected = UnsupportedOperationException.class) +public void testEmptyDiff() { +// empty privilege bits +PrivilegeBits.EMPTY.diff(PrivilegeBits.EMPTY); +} + @Test public void testDiff() { -// empty -try { -PrivilegeBits.EMPTY.diff(PrivilegeBits.EMPTY); -fail("UnsupportedOperation expected"); -} catch (UnsupportedOperationException e) { -// success -} - // other privilege bits PrivilegeBits pb = READ_NODES_PRIVILEGE_BITS; PrivilegeBits mod = PrivilegeBits.getInstance(pb); @@ -329,7 +325,7 @@ public class PrivilegeBitsTest implement mod.diff(nxt); assertEquivalent(before, mod); mod.add(nxt); -assertFalse(before.equals(mod)); +assertNotEquals(before, mod); mod.diff(nxt); assertEquivalent(before, mod); mod.add(nxt); @@ -381,16 +377,14 @@ public class PrivilegeBitsTest implement } } +@Test(expected = UnsupportedOperationException.class) +public void testEmptyAddDifference() { +// empty privilege bits +PrivilegeBits.EMPTY.addDifference(PrivilegeBits.EMPTY, PrivilegeBits.EMPTY); +} + @Test public void testAddDifference() { -// empty -try { -PrivilegeBits.EMPTY.addDifference(PrivilegeBits.EMPTY, PrivilegeBits.EMPTY); -fail("UnsupportedOperation expected"); -} catch (UnsupportedOperationException e) { -// success -} - // other privilege bits PrivilegeBits pb = READ_NODES_PRIVILEGE_BITS; PrivilegeBits mod = PrivilegeBits.getInstance(pb); @@ -420,7 +414,7 @@ public class PrivilegeBitsTest implement tmp = PrivilegeBits.getInstance(nxt); PrivilegeBits mod2 = PrivilegeBits.getInstance(mod); tmp.addDifference(mod2, READ_NODES_PRIVILEGE_BITS); -assertFalse(nxt.equals(tmp)); // tmp should be modified by addDifference call. +assertNotEquals(nxt, tmp); // tmp should be modified by addDifference call. assertEquivalent(mod2, mod); // mod2 should not be modified here assertTrue(tmp.includes(pb)); assertFalse(tmp.includes(READ_NODES_PRIVILEGE_BITS)); @@ -450,15 +444,9 @@ public class PrivilegeBitsTest implement } } -@Test +@Test(expected = UnsupportedOperationException.class) public void testRetainUnmodifiable() { -PrivilegeBits unmodifiable = READ_NODES_PRIVILEGE_BITS; -try { -unmodifiable.retain(PrivilegeBits.getInstance()); -fail(); -} catch (UnsupportedOperationException e) { -// success -} +READ_NODES_PRIVILEGE_BITS.retain(PrivilegeBits.getInstance()); } @Test @@ -572,7 +560,7 @@ public class PrivilegeBitsTest implement pb = PrivilegeBits.EMPTY; assertEquivalent(pb, PrivilegeBits.EMPTY); -assertSame(pb, PrivilegeBits.EMPTY); +assertSame(PrivilegeBits.EMPTY, pb); assertSame(pb,
svn commit: r1853216 - in /jackrabbit/oak/branches/1.8: ./ oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/ oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/luc
Author: catholicon Date: Fri Feb 8 13:41:35 2019 New Revision: 1853216 URL: http://svn.apache.org/viewvc?rev=1853216=rev Log: OAK-7246: Improve cleanup of locally copied index files (backport r1836548, r1840769 from trunk) OAK-7751: CopyOnReadDirectory#removeDeletedFiles asks IndexCopier to check timestamp for (remote only) segments.gen leading to failure to clean up local files OAK-7246: Improve cleanup of locally copied index files Implement what was discussed except for s/creation time/modified time/ Update IndexCopierTest to use FSDirectory for CoR and CoW and also added synthetic update of last modified timestamp delayes to simulate reality without really sleep (this test would still pass with old impl... except for constants of course) Added IndexCopierCleanupTest to test new logic. Added: jackrabbit/oak/branches/1.8/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexCopierCleanupTest.java - copied, changed from r1836548, jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexCopierCleanupTest.java Modified: jackrabbit/oak/branches/1.8/ (props changed) jackrabbit/oak/branches/1.8/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexCopier.java jackrabbit/oak/branches/1.8/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/CopyOnReadDirectory.java jackrabbit/oak/branches/1.8/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/CopyOnWriteDirectory.java jackrabbit/oak/branches/1.8/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/LocalIndexFile.java jackrabbit/oak/branches/1.8/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexCopierTest.java Propchange: jackrabbit/oak/branches/1.8/ -- --- svn:mergeinfo (original) +++ svn:mergeinfo Fri Feb 8 13:41:35 2019 @@ -1,3 +1,3 @@ /jackrabbit/oak/branches/1.0:1665962 -/jackrabbit/oak/trunk:1820660-1820661,1820729,1820734,1820859,1820861,1820878,1820888,1820947,1821027,1821130,1821140-1821141,1821178,1821237,1821240,1821249,1821258,1821325,1821358,1821361-1821362,1821370,1821375,1821393,1821477,1821487,1821516,1821617,1821663,1821665,1821668,1821681,1821847,1821975-1821983,1822121,1822201,1822207,1822527,1822642,1822723,1822808,1822850,1822934,1823135,1823163,1823169,1823172,1823655,1823669,1824196,1824198,1824253,1824255,1824896,1824962,1825065,1825362,1825381,1825442,1825448,1825466,1825470-1825471,1825475,1825523,1825525,1825561,1825619-1825621,1825651,1825654,1825992,1826079,1826090,1826096,1826216,1826237,1826338,1826516,1826532,1826551,1826560,1826638,1826640,1826730,1826833,1826932,1826957,1827423,1827472,1827486,1827816,1827977,1828349,1828439,1828502,1828529,1828948,1829527,1829534,1829546,1829569,1829587,1829665,1829854,1829864,1829978,1829985,1829987,1829998,1830019,1830048,1830160,1830171,1830197,1830209,1830239,1830347,1830748,1830911 ,1830923,1831157-1831158,1831163,1831190,1831374,1831560,1831689,1832258,1832376,1832379,1832535,1833308,1833347,1833833,1834112,1834117,1834287,1834291,1834302,1834326,1834328,1834336,1834428,1834468,1834483,1834610,1834648-1834649,1834681,1834823,1834857-1834858,1835060,1835518,1835521,1835635,1835642,1835780,1835819,1836082,1836121,1836167-1836168,1836170-1836187,1836189-1836196,1836206,1836487,1836493,1837057,1837274,1837296,1837326,1837475,1837503,1837547,1837569,1837600,1837657,1837718,1837998,1838076,1838637,1839549,1839570,1839637,1839746,1840019,1840024,1840031,1840226,1840455,1840462,1840574,1841314,1841352,1842089,1842677,1843175,1843222,1843231,1843398,1843618,1843652,1843911,1844325,1844549,1844625,1844627,1844642,1844728,1844775,1844932,1845135,1845336,1845405,1845415,1845730-1845731,1845863,1845865,1846057,1846617,1848073,1848181-1848182,1848191,1848217,1848822-1848823,1850837,1851533-1851535,1851619,1852451,1852492
svn commit: r1853206 - /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java
Author: thomasm Date: Fri Feb 8 10:47:35 2019 New Revision: 1853206 URL: http://svn.apache.org/viewvc?rev=1853206=rev Log: OAK-7997 : Adding restrictions to ACLs yields empty results for queries in Jackrabbit Oak (rename and simplify a bit) Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java?rev=1853206=1853205=1853206=diff == --- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java (original) +++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java Fri Feb 8 10:47:35 2019 @@ -169,7 +169,7 @@ public class SelectorImpl extends Source private String planIndexName; private TimerStats timerDuration; -private LastTree lastTree; +private CachedTree cachedTree; public SelectorImpl(NodeTypeInfo nodeTypeInfo, String selectorName) { this.nodeTypeInfo = checkNotNull(nodeTypeInfo); @@ -528,7 +528,7 @@ public class SelectorImpl extends Source // where [a].[jcr:path] = $path" // because not checking would reveal existence // of the child node -if (!getLastTree(currentRow.getPath()).exists()) { +if (!getCachedTree(currentRow.getPath()).exists()) { continue; } } @@ -565,13 +565,13 @@ public class SelectorImpl extends Source } private boolean evaluateTypeMatch() { -LastTree lt = getLastTree(currentRow.getPath()); -if (!lt.exists()) { +CachedTree ct = getCachedTree(currentRow.getPath()); +if (!ct.exists()) { return false; } -Tree t = lt.getTree(); -LazyValue readOnly = lt.getReadOnlyTree(); +Tree t = ct.getTree(); +LazyValue readOnly = ct.getReadOnlyTree(); String primaryTypeName = TreeUtil.getPrimaryTypeName(t, readOnly); if (primaryTypeName != null && primaryTypes.contains(primaryTypeName)) { return true; @@ -611,7 +611,7 @@ public class SelectorImpl extends Source @Nullable Tree getTree(@NotNull String path) { -return getLastTree(path).getTree(); +return getCachedTree(path).getTree(); } /** @@ -621,11 +621,11 @@ public class SelectorImpl extends Source * @return the tree, or null */ @NotNull -private LastTree getLastTree(@NotNull String path) { -if (lastTree == null || !lastTree.denotes(path)) { -lastTree = new LastTree(path, query); +private CachedTree getCachedTree(@NotNull String path) { +if (cachedTree == null || !cachedTree.denotes(path)) { +cachedTree = new CachedTree(path, query); } -return lastTree; +return cachedTree; } /** @@ -889,17 +889,23 @@ public class SelectorImpl extends Source return new SelectorImpl(nodeTypeInfo, selectorName); } -private static final class LastTree { +private static final class CachedTree { private final String path; private final Tree tree; private final ExecutionContext ctx; -private LazyValue readOnlyTree; +private final LazyValue readOnlyTree; -private LastTree(@NotNull String path, @NotNull QueryImpl query) { +private CachedTree(@NotNull String path, @NotNull QueryImpl query) { this.path = path; this.tree = query.getTree(path); this.ctx = query.getExecutionContext(); +this.readOnlyTree = new LazyValue() { +@Override +protected Tree createValue() { +return new ImmutableRoot(ctx.getBaseState()).getTree(path); +} +}; } private boolean denotes(@NotNull String path) { @@ -917,14 +923,6 @@ public class SelectorImpl extends Source @NotNull private LazyValue getReadOnlyTree() { -if (readOnlyTree == null) { -readOnlyTree = new LazyValue() { -@Override -protected Tree createValue() { -return new ImmutableRoot(ctx.getBaseState()).getTree(path); -} -}; -} return readOnlyTree; } }