@@ -97,13 +97,18 @@ class AggregateStructureResolver(private val project: Project) {
9797 .flatMap {
9898 AnnotatedElementsSearch .searchPsiClasses(it.psiClass, project.axonScope()).findAll()
9999 }
100- .mapNotNull { inspect(it, null ) }
100+ .mapNotNull { inspect(it, emptyList() ) }
101101 .flatMap { it.flatten() }
102102
103- private fun inspect (clazz : PsiClass , parent : PsiClass ? ): Entity ? {
103+ private fun inspect (clazz : PsiClass , parents : List < PsiClass >, depth : Int = 0 ): Entity ? {
104104 if (clazz.isEnum) {
105105 return null
106106 }
107+ if (parents.contains(clazz) || depth > 20 ) {
108+ // Guard for infinite recursion; we already have this class indexed, or we exceed an exorbitant depth
109+ return null
110+ }
111+ val parent = parents.lastOrNull()
107112 val children = clazz.fields.toList()
108113 .filter { it.isAnnotated(AxonAnnotation .AGGREGATE_MEMBER ) }
109114 .mapNotNull { field ->
@@ -112,7 +117,7 @@ class AggregateStructureResolver(private val project: Project) {
112117 val qualifiedName = psiType.toQualifiedName() ? : return @mapNotNull null
113118 val targetClass = clazz.javaFacade().findClass(qualifiedName, clazz.project.axonScope())
114119 ? : return @mapNotNull null
115- val modelMember = inspect(targetClass, clazz) ? : return @mapNotNull null
120+ val modelMember = inspect(targetClass, parents + clazz, depth + 1 ) ? : return @mapNotNull null
116121 val routingKey = field.resolveAnnotationStringValue(AxonAnnotation .AGGREGATE_MEMBER , " routingKey" )
117122 val eventForwardingMode = field.resolveAnnotationClassValue(AxonAnnotation .AGGREGATE_MEMBER , " eventForwardingMode" )
118123 EntityMember (field, field.name, modelMember, isCollection, routingKey, eventForwardingMode)
0 commit comments