@@ -54,27 +54,17 @@ class ForItemElementDocumentationProvider : AbstractDocumentationProvider() {
5454 val currentForItem = ForItem (originalElement)
5555 val forDirectiveExpr = currentForItem.getParentForDirectiveExpr()
5656 if (forDirectiveExpr != null ) {
57- if (forDirectiveExpr.getForItem()?.textOffset != originalElement.textOffset) {
58- val declarationClassType =
59- forDirectiveInspection.validateFieldAccessByForItem(
60- listOf (originalElement),
61- skipSelf = false ,
62- )
63- if (declarationClassType != null ) {
64- generateDocumentInForDirective(
65- declarationClassType,
66- forDirectiveExpr,
67- originalElement,
68- result,
69- )
70- }
71- } else {
72- val declarationSide = forDirectiveExpr.getForItemDeclaration() ? : return " "
73- val children = declarationSide.getDeclarationChildren()
74- generateDocumentInForItem(
57+ val declarationClassType =
58+ forDirectiveInspection.validateFieldAccessByForItem(
59+ listOf (originalElement),
60+ skipSelf = false ,
61+ )
62+ if (declarationClassType != null ) {
63+ generateDocumentInForDirective(
7564 forDirectiveInspection,
65+ declarationClassType,
66+ forDirectiveExpr,
7667 originalElement,
77- children,
7868 result,
7969 )
8070 }
@@ -85,35 +75,30 @@ class ForItemElementDocumentationProvider : AbstractDocumentationProvider() {
8575 }
8676
8777 private fun generateDocumentInForItem (
88- forDirectiveInspection : ForDirectiveInspection ,
8978 originalElement : PsiElement ,
9079 declarationChildren : List <SqlElIdExpr >,
80+ declarationClassType : PsiParentClass ,
9181 result : MutableList <String ?>,
9282 ) {
93- val declarationClassType =
94- forDirectiveInspection.validateFieldAccessByForItem(listOf (originalElement), false )
95- if (declarationClassType is ValidationCompleteResult ) {
96- val parentClass = declarationClassType.parentClass
97- val forItemValidator =
98- SqlElForItemFieldAccessorChildElementValidator (
99- declarationChildren,
100- parentClass,
101- )
102- val declarationClassTypeResult = forItemValidator.validateChildren()
103- if (declarationClassTypeResult is ValidationCompleteResult ) {
104- var resultParent = declarationClassTypeResult.parentClass
105- var classType: PsiClassType ? = resultParent.type as ? PsiClassType
106- if (classType != null &&
107- PsiClassTypeUtil .isIterableType(classType, originalElement.project)
108- ) {
109- classType = classType.parameters.firstOrNull() as ? PsiClassType
110- }
111- if (classType != null ) {
112- resultParent = PsiParentClass (classType)
113- result.add(" ${generateTypeLink(resultParent)} ${originalElement.text} " )
114- }
83+ val parentClass = declarationClassType
84+ val forItemValidator =
85+ SqlElForItemFieldAccessorChildElementValidator (
86+ declarationChildren,
87+ parentClass,
88+ )
89+ forItemValidator.validateChildren(complete = { lastType ->
90+ var resultParent = lastType
91+ var classType: PsiClassType ? = resultParent.type as ? PsiClassType
92+ if (classType != null &&
93+ PsiClassTypeUtil .isIterableType(classType, originalElement.project)
94+ ) {
95+ classType = classType.parameters.firstOrNull() as ? PsiClassType
11596 }
116- }
97+ if (classType != null ) {
98+ resultParent = PsiParentClass (classType)
99+ result.add(" ${generateTypeLink(resultParent)} ${originalElement.text} " )
100+ }
101+ })
117102 }
118103
119104 private fun generateDocumentInBindVariable (
@@ -130,6 +115,7 @@ class ForItemElementDocumentationProvider : AbstractDocumentationProvider() {
130115 }
131116
132117 private fun generateDocumentInForDirective (
118+ forDirectiveInspection : ForDirectiveInspection ,
133119 declarationClassType : ValidationResult ,
134120 forDirectiveExpr : SqlElForDirective ,
135121 originalElement : PsiElement ,
@@ -138,10 +124,22 @@ class ForItemElementDocumentationProvider : AbstractDocumentationProvider() {
138124 val parentClass = declarationClassType.parentClass
139125 val parentType = parentClass?.type as ? PsiClassType
140126
141- if (forDirectiveExpr.getForItem()?.textOffset = = originalElement.textOffset) {
127+ if (forDirectiveExpr.getForItem()?.textOffset ! = originalElement.textOffset) {
142128 generateDocumentForItemSelf(parentType, originalElement, result)
143129 } else {
144- result.add(" ${generateTypeLink(parentClass)} ${originalElement.text} " )
130+ val declarationSide = forDirectiveExpr.getForItemDeclaration() ? : return
131+ val children = declarationSide.getDeclarationChildren()
132+
133+ val declarationClassType =
134+ forDirectiveInspection.validateFieldAccessByForItem(listOf (originalElement), false )
135+ if (declarationClassType is ValidationCompleteResult ) {
136+ generateDocumentInForItem(
137+ originalElement,
138+ children,
139+ declarationClassType.parentClass,
140+ result,
141+ )
142+ }
145143 }
146144 }
147145
@@ -150,17 +148,8 @@ class ForItemElementDocumentationProvider : AbstractDocumentationProvider() {
150148 originalElement : PsiElement ,
151149 result : MutableList <String ?>,
152150 ) {
153- val targetClassType =
154- if (parentType != null &&
155- PsiClassTypeUtil .isIterableType(parentType, originalElement.project)
156- ) {
157- parentType.parameters.firstOrNull()
158- } else {
159- null
160- }
161-
162- if (targetClassType != null ) {
163- val forItemParentClassType = PsiParentClass (targetClassType)
151+ if (parentType != null ) {
152+ val forItemParentClassType = PsiParentClass (parentType)
164153 result.add(" ${generateTypeLink(forItemParentClassType)} ${originalElement.text} " )
165154 }
166155 }
0 commit comments