@@ -62,52 +62,53 @@ public boolean isImplicitDeclaration(@NotNull QVariable variable) {
6262 }
6363
6464 private QVarDeclaration findInParameters (QParameters parameters , String name ) {
65- final SearchResult result = new SearchResult ();
66- parameters .acceptChildren (new DeclarationsVisitor () {
65+ final DeclarationsVisitor visitor = new DeclarationsVisitor () {
6766 @ Override
6867 public void visitElement (@ NotNull PsiElement element ) {
6968 if (element instanceof @ NotNull QVarDeclaration d ) {
7069 if (d .getName ().equals (name )) {
71- result . declaration = d ;
70+ declaration = d ;
7271 stopWalking ();
7372 }
7473 } else {
7574 super .visitElement (element );
7675 }
7776 }
78- });
79- return result .declaration ;
77+ };
78+ parameters .acceptChildren (visitor );
79+ return visitor .declaration ;
8080 }
8181
8282 private QVarDeclaration findInExpressions (QExpressions expressions , QVariable variable , String name ) {
83- final SearchResult result = new SearchResult ();
84- for (QExpression expression : expressions .getExpressionList ()) {
85- // We iterate over each expression and takes the right as the best because Q is right-to-left language
86- expression .accept (new DeclarationsVisitor () {
87- @ Override
88- public void visitElement (@ NotNull PsiElement element ) {
89- // we don't search inside others lambda, query, table or dict
90- if (isContextualElement (element )) {
91- return ;
92- }
83+ final DeclarationsVisitor visitor = new DeclarationsVisitor () {
84+ @ Override
85+ public void visitElement (@ NotNull PsiElement element ) {
86+ // we don't search inside others lambda, query, table or dict
87+ if (isContextualElement (element )) {
88+ return ;
89+ }
9390
94- // no reason to search after the definition.// In a lambda it can't be below.
95- if (element .equals (variable )) {
96- result .containsVariable = true ;
97- } else if (element instanceof QVarDeclaration d ) {
98- if (name .equals (d .getName ()) && !QPsiUtil .isGlobalDeclaration (d )) {
99- result .declaration = d ;
100- }
101- } else {
102- super .visitElement (element );
91+ // no reason to search after the definition.// In a lambda it can't be below.
92+ if (element .equals (variable )) {
93+ containsVariable = true ;
94+ } else if (element instanceof QVarDeclaration d ) {
95+ if (name .equals (d .getName ()) && !QPsiUtil .isGlobalDeclaration (d )) {
96+ declaration = d ;
10397 }
98+ } else {
99+ super .visitElement (element );
104100 }
105- });
101+ }
102+ };
103+
104+ for (QExpression expression : expressions .getExpressionList ()) {
105+ // We iterate over each expression and takes the right as the best because Q is right-to-left language
106+ expression .accept (visitor );
106107
107108 // if the declaration found - grate;
108109 // if the expression contains the original variable and no declaration in the expression, we stop anyway.
109- if (result .declaration != null || result .containsVariable ) {
110- return result .declaration ;
110+ if (visitor .declaration != null || visitor .containsVariable ) {
111+ return visitor .declaration ;
111112 }
112113 }
113114 return null ;
@@ -117,12 +118,10 @@ private boolean isContextualElement(@NotNull PsiElement element) {
117118 return element instanceof QLambdaExpr || element instanceof QQueryExpr || element instanceof QTableExpr || element instanceof QDictExpr ;
118119 }
119120
120- private static class SearchResult {
121- boolean containsVariable ;
122- QVarDeclaration declaration ;
123- }
124-
125121 private static class DeclarationsVisitor extends PsiRecursiveElementWalkingVisitor {
122+ protected boolean containsVariable ;
123+ protected QVarDeclaration declaration ;
124+
126125 @ Override
127126 public void visitComment (@ NotNull PsiComment ignore ) {
128127 }
0 commit comments