From 2415b6be0928682eb8fb29b1144445302d45bfa2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yoann=20Rodi=C3=A8re?= Date: Thu, 29 Sep 2022 17:45:09 +0200 Subject: [PATCH] HSEARCH-4708 Pass more context to PojoModelPathWalker --- ...PojoImplicitReindexingResolverBuilder.java | 17 ++++++----- .../PojoIndexingDependencyCollectorNode.java | 19 +++++++----- .../binding/impl/PojoModelPathBinder.java | 30 ++++++++++--------- .../binding/impl/PojoModelPathWalker.java | 11 +++---- .../model/path/impl/BoundPojoModelPath.java | 20 +++++++------ 5 files changed, 53 insertions(+), 44 deletions(-) diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/automaticindexing/building/impl/PojoImplicitReindexingResolverBuilder.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/automaticindexing/building/impl/PojoImplicitReindexingResolverBuilder.java index 2e219855cb8..06577ac8833 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/automaticindexing/building/impl/PojoImplicitReindexingResolverBuilder.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/automaticindexing/building/impl/PojoImplicitReindexingResolverBuilder.java @@ -16,7 +16,7 @@ import org.hibernate.search.mapper.pojo.automaticindexing.impl.PojoImplicitReindexingResolver; import org.hibernate.search.mapper.pojo.automaticindexing.impl.PojoImplicitReindexingResolverImpl; import org.hibernate.search.mapper.pojo.automaticindexing.impl.PojoImplicitReindexingResolverNode; -import org.hibernate.search.mapper.pojo.extractor.mapping.programmatic.ContainerExtractorPath; +import org.hibernate.search.mapper.pojo.model.path.PojoModelPathPropertyNode; import org.hibernate.search.mapper.pojo.model.path.PojoModelPathValueNode; import org.hibernate.search.mapper.pojo.model.path.binding.impl.PojoModelPathWalker; import org.hibernate.search.mapper.pojo.model.path.impl.BoundPojoModelPath; @@ -134,7 +134,7 @@ private void checkNotFrozen() { } static class Walker implements PojoModelPathWalker< - AbstractPojoImplicitReindexingResolverTypeNodeBuilder, + Void, AbstractPojoImplicitReindexingResolverTypeNodeBuilder, PojoImplicitReindexingResolverPropertyNodeBuilder, PojoImplicitReindexingResolverValueNodeBuilderDelegate > { @@ -142,20 +142,21 @@ static class Walker implements PojoModelPathWalker< @Override public PojoImplicitReindexingResolverPropertyNodeBuilder property( - AbstractPojoImplicitReindexingResolverTypeNodeBuilder typeNode, String propertyName) { - return typeNode.property( propertyName ); + Void context, AbstractPojoImplicitReindexingResolverTypeNodeBuilder typeNode, + PojoModelPathPropertyNode pathNode) { + return typeNode.property( pathNode.propertyName() ); } @Override public PojoImplicitReindexingResolverValueNodeBuilderDelegate value( - PojoImplicitReindexingResolverPropertyNodeBuilder propertyNode, - ContainerExtractorPath extractorPath) { - return propertyNode.value( extractorPath ); + Void context, PojoImplicitReindexingResolverPropertyNodeBuilder propertyNode, + PojoModelPathValueNode pathNode) { + return propertyNode.value( pathNode.extractorPath() ); } @Override public AbstractPojoImplicitReindexingResolverTypeNodeBuilder type( - PojoImplicitReindexingResolverValueNodeBuilderDelegate valueNode) { + Void context, PojoImplicitReindexingResolverValueNodeBuilderDelegate valueNode) { return valueNode.type(); } } diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/automaticindexing/building/impl/PojoIndexingDependencyCollectorNode.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/automaticindexing/building/impl/PojoIndexingDependencyCollectorNode.java index 18de4087c09..17ac223d71f 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/automaticindexing/building/impl/PojoIndexingDependencyCollectorNode.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/automaticindexing/building/impl/PojoIndexingDependencyCollectorNode.java @@ -7,7 +7,8 @@ package org.hibernate.search.mapper.pojo.automaticindexing.building.impl; import org.hibernate.search.mapper.pojo.automaticindexing.ReindexOnUpdate; -import org.hibernate.search.mapper.pojo.extractor.mapping.programmatic.ContainerExtractorPath; +import org.hibernate.search.mapper.pojo.model.path.PojoModelPathPropertyNode; +import org.hibernate.search.mapper.pojo.model.path.PojoModelPathValueNode; import org.hibernate.search.mapper.pojo.model.path.binding.impl.PojoModelPathWalker; import org.hibernate.search.util.common.data.impl.LinkedNode; @@ -60,7 +61,7 @@ private ReindexOnUpdate getStrictestReindexOnUpdate(ReindexOnUpdate left, Reinde abstract ReindexOnUpdate reindexOnUpdate(); static class Walker implements PojoModelPathWalker< - PojoIndexingDependencyCollectorTypeNode, + Void, PojoIndexingDependencyCollectorTypeNode, PojoIndexingDependencyCollectorPropertyNode, AbstractPojoIndexingDependencyCollectorDirectValueNode > { @@ -72,22 +73,24 @@ static class Walker implements PojoModelPathWalker< @Override public PojoIndexingDependencyCollectorPropertyNode property( - PojoIndexingDependencyCollectorTypeNode typeNode, String propertyName) { - return typeNode.property( propertyName ); + Void context, PojoIndexingDependencyCollectorTypeNode typeNode, + PojoModelPathPropertyNode pathNode) { + return typeNode.property( pathNode.propertyName() ); } @Override public AbstractPojoIndexingDependencyCollectorDirectValueNode value( - PojoIndexingDependencyCollectorPropertyNode propertyNode, - ContainerExtractorPath extractorPath) { - AbstractPojoIndexingDependencyCollectorDirectValueNode node = propertyNode.value( extractorPath ); + Void context, PojoIndexingDependencyCollectorPropertyNode propertyNode, + PojoModelPathValueNode pathNode) { + AbstractPojoIndexingDependencyCollectorDirectValueNode node = + propertyNode.value( pathNode.extractorPath() ); node.doCollectDependency( derivedDependencyPath ); return node; } @Override public PojoIndexingDependencyCollectorTypeNode type( - AbstractPojoIndexingDependencyCollectorDirectValueNode valueNode) { + Void context, AbstractPojoIndexingDependencyCollectorDirectValueNode valueNode) { return valueNode.type(); } } diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/path/binding/impl/PojoModelPathBinder.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/path/binding/impl/PojoModelPathBinder.java index 724332b0d00..29008682bcc 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/path/binding/impl/PojoModelPathBinder.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/path/binding/impl/PojoModelPathBinder.java @@ -6,7 +6,6 @@ */ package org.hibernate.search.mapper.pojo.model.path.binding.impl; -import org.hibernate.search.mapper.pojo.extractor.mapping.programmatic.ContainerExtractorPath; import org.hibernate.search.mapper.pojo.model.path.PojoModelPathPropertyNode; import org.hibernate.search.mapper.pojo.model.path.PojoModelPathValueNode; @@ -16,29 +15,32 @@ private PojoModelPathBinder() { // Only static methods } - public static V bind(T typeNode, PojoModelPathValueNode unboundModelPath, PojoModelPathWalker walker) { - return applyPath( typeNode, unboundModelPath, walker ); + public static V bind(T rootNode, PojoModelPathValueNode unboundModelPath, PojoModelPathWalker walker) { + return bind( null, rootNode, unboundModelPath, walker ); } - private static V applyPath(T rootNode, PojoModelPathValueNode unboundPathValueNode, - PojoModelPathWalker walker) { - P propertyNode = applyPath( rootNode, unboundPathValueNode.parent(), walker ); - ContainerExtractorPath extractorPath = unboundPathValueNode.extractorPath(); - return walker.value( propertyNode, extractorPath ); + public static V bind(C context, T rootNode, PojoModelPathValueNode unboundModelPath, + PojoModelPathWalker walker) { + return applyPath( context, rootNode, unboundModelPath, walker ); } - private static P applyPath(T rootNode, PojoModelPathPropertyNode unboundPathPropertyNode, - PojoModelPathWalker walker) { + private static V applyPath(C context, T rootNode, PojoModelPathValueNode unboundPathValueNode, + PojoModelPathWalker walker) { + P propertyNode = applyPath( context, rootNode, unboundPathValueNode.parent(), walker ); + return walker.value( context, propertyNode, unboundPathValueNode ); + } + + private static P applyPath(C context, T rootNode, PojoModelPathPropertyNode unboundPathPropertyNode, + PojoModelPathWalker walker) { PojoModelPathValueNode unboundPathParentNode = unboundPathPropertyNode.parent(); T typeNode; if ( unboundPathParentNode != null ) { - V valueNode = applyPath( rootNode, unboundPathParentNode, walker ); - typeNode = walker.type( valueNode ); + V valueNode = applyPath( context, rootNode, unboundPathParentNode, walker ); + typeNode = walker.type( context, valueNode ); } else { typeNode = rootNode; } - String propertyName = unboundPathPropertyNode.propertyName(); - return walker.property( typeNode, propertyName ); + return walker.property( context, typeNode, unboundPathPropertyNode ); } } diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/path/binding/impl/PojoModelPathWalker.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/path/binding/impl/PojoModelPathWalker.java index 9384c24b452..db0ad012e13 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/path/binding/impl/PojoModelPathWalker.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/path/binding/impl/PojoModelPathWalker.java @@ -6,14 +6,15 @@ */ package org.hibernate.search.mapper.pojo.model.path.binding.impl; -import org.hibernate.search.mapper.pojo.extractor.mapping.programmatic.ContainerExtractorPath; +import org.hibernate.search.mapper.pojo.model.path.PojoModelPathPropertyNode; +import org.hibernate.search.mapper.pojo.model.path.PojoModelPathValueNode; -public interface PojoModelPathWalker { +public interface PojoModelPathWalker { - P property(T typeNode, String propertyName); + P property(C context, T typeNode, PojoModelPathPropertyNode pathNode); - V value(P propertyNode, ContainerExtractorPath extractorPath); + V value(C context, P propertyNode, PojoModelPathValueNode pathNode); - T type(V valueNode); + T type(C context, V valueNode); } diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/path/impl/BoundPojoModelPath.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/path/impl/BoundPojoModelPath.java index 9de3e598a88..a748ea650bf 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/path/impl/BoundPojoModelPath.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/model/path/impl/BoundPojoModelPath.java @@ -10,6 +10,8 @@ import org.hibernate.search.mapper.pojo.extractor.impl.BoundContainerExtractorPath; import org.hibernate.search.mapper.pojo.extractor.impl.ContainerExtractorBinder; import org.hibernate.search.mapper.pojo.model.path.PojoModelPath; +import org.hibernate.search.mapper.pojo.model.path.PojoModelPathPropertyNode; +import org.hibernate.search.mapper.pojo.model.path.PojoModelPathValueNode; import org.hibernate.search.mapper.pojo.model.path.binding.impl.PojoModelPathWalker; import org.hibernate.search.mapper.pojo.model.spi.PojoTypeModel; @@ -77,7 +79,7 @@ final void appendPath(PojoModelPath.Builder builder) { } public static class Walker implements PojoModelPathWalker< - BoundPojoModelPathTypeNode, + Void, BoundPojoModelPathTypeNode, BoundPojoModelPathPropertyNode, BoundPojoModelPathValueNode > { @@ -89,23 +91,23 @@ private Walker(ContainerExtractorBinder containerExtractorBinder) { } @Override - public BoundPojoModelPathPropertyNode property(BoundPojoModelPathTypeNode typeNode, - String propertyName) { - return typeNode.property( propertyName ); + public BoundPojoModelPathPropertyNode property(Void context, BoundPojoModelPathTypeNode typeNode, + PojoModelPathPropertyNode pathNode) { + return typeNode.property( pathNode.propertyName() ); } @Override - public BoundPojoModelPathValueNode value(BoundPojoModelPathPropertyNode propertyNode, - ContainerExtractorPath extractorPath) { - return doValue( propertyNode, extractorPath ); + public BoundPojoModelPathValueNode value(Void context, BoundPojoModelPathPropertyNode propertyNode, + PojoModelPathValueNode pathNode) { + return value( propertyNode, pathNode.extractorPath() ); } @Override - public BoundPojoModelPathTypeNode type(BoundPojoModelPathValueNode valueNode) { + public BoundPojoModelPathTypeNode type(Void context, BoundPojoModelPathValueNode valueNode) { return valueNode.type(); } - private

BoundPojoModelPathValueNode doValue(BoundPojoModelPathPropertyNode propertyNode, + public

BoundPojoModelPathValueNode value(BoundPojoModelPathPropertyNode propertyNode, ContainerExtractorPath extractorPath) { BoundContainerExtractorPath boundExtractorPath = containerExtractorBinder .bindPath( propertyNode.getPropertyModel().typeModel(), extractorPath );