diff --git a/src/main/java/com/bartek/esa/core/di/CoreModule.java b/src/main/java/com/bartek/esa/core/di/CoreModule.java index af4a11a..8a9d141 100644 --- a/src/main/java/com/bartek/esa/core/di/CoreModule.java +++ b/src/main/java/com/bartek/esa/core/di/CoreModule.java @@ -2,6 +2,7 @@ package com.bartek.esa.core.di; import com.bartek.esa.core.desc.provider.DescriptionProvider; import com.bartek.esa.core.executor.PluginExecutor; +import com.bartek.esa.core.helper.ParentNodeFinder; import com.bartek.esa.core.helper.StaticScopeHelper; import com.bartek.esa.core.java.JavaSyntaxRegexProvider; import com.bartek.esa.core.xml.XmlHelper; @@ -35,4 +36,9 @@ public class CoreModule { public StaticScopeHelper staticScopeHelper() { return new StaticScopeHelper(); } + + @Provides + public ParentNodeFinder parentNodeFinder() { + return new ParentNodeFinder(); + } } diff --git a/src/main/java/com/bartek/esa/core/helper/ParentNodeFinder.java b/src/main/java/com/bartek/esa/core/helper/ParentNodeFinder.java new file mode 100644 index 0000000..fef5131 --- /dev/null +++ b/src/main/java/com/bartek/esa/core/helper/ParentNodeFinder.java @@ -0,0 +1,25 @@ +package com.bartek.esa.core.helper; + + +import com.github.javaparser.ast.Node; + +import javax.inject.Inject; +import java.util.Optional; + +public class ParentNodeFinder { + + @Inject + public ParentNodeFinder() { + + } + + public Optional findParentNode(Node child, Class nodeType) { + Node parent = child.getParentNode().orElse(null); + + while(parent != null && !parent.getClass().equals(nodeType)) { + parent = parent.getParentNode().orElse(null); + } + + return Optional.ofNullable(parent).map(nodeType::cast); + } +}