22
22
package com .github ._1c_syntax .bsl .languageserver .references ;
23
23
24
24
import com .github ._1c_syntax .bsl .languageserver .context .DocumentContext ;
25
+ import com .github ._1c_syntax .bsl .languageserver .context .ModuleType ;
25
26
import com .github ._1c_syntax .bsl .languageserver .context .ServerContext ;
26
27
import com .github ._1c_syntax .bsl .languageserver .providers .SelectionRangeProvider ;
27
28
import com .github ._1c_syntax .bsl .languageserver .references .model .OccurrenceType ;
28
29
import com .github ._1c_syntax .bsl .languageserver .references .model .Reference ;
29
30
import com .github ._1c_syntax .bsl .languageserver .utils .Ranges ;
30
31
import com .github ._1c_syntax .bsl .parser .BSLParser ;
31
32
import lombok .RequiredArgsConstructor ;
33
+ import org .antlr .v4 .runtime .tree .TerminalNode ;
32
34
import org .eclipse .lsp4j .Position ;
33
35
import org .springframework .stereotype .Component ;
34
36
38
40
39
41
@ Component
40
42
@ RequiredArgsConstructor
41
- public class OSModulesReferenceFinder implements ReferenceFinder {
43
+ public class OscriptReferenceFinder implements ReferenceFinder {
42
44
43
45
private final ServerContext serverContext ;
44
46
@@ -56,28 +58,33 @@ public Optional<Reference> findReference(URI uri, Position position) {
56
58
return Optional .empty ();
57
59
}
58
60
59
- if (!(node .get ().getParent () instanceof BSLParser .TypeNameContext )) {
60
- return Optional .empty ();
61
- }
61
+ return serverContext .getDocuments ().values ().stream ()
62
+ .filter (documentContext -> documentContext .getTypeName ().equals (node .get ().getText ()))
63
+ .filter (d -> filterByType (node , d .getModuleType ()))
64
+ .map (documentContext -> new Reference (
65
+ documentContext .getSymbolTree ().getModule (),
66
+ documentContext .getSymbolTree ().getModule (),
67
+ documentContext .getUri (),
68
+ Ranges .create (0 , 0 , 0 , 0 ),
69
+ OccurrenceType .DEFINITION )
70
+ ).findAny ();
62
71
63
- var className = node . get (). getText ();
72
+ }
64
73
65
- var dd = serverContext .getDocuments ().values ().stream ()
66
- .filter (d -> d .getTypeName ().equals (className ))
67
- .findFirst ();
74
+ private boolean filterByType (Optional <TerminalNode > node , ModuleType moduleType ) {
68
75
69
- if (dd .isEmpty ()) {
70
- return Optional . empty () ;
76
+ if (node .isEmpty ()) {
77
+ return false ;
71
78
}
72
79
73
- return Optional .of (new Reference (
74
- dd .get ().getSymbolTree ().getModule (),
75
- dd .get ().getSymbolTree ().getModule (),
76
- dd .get ().getUri (),
77
- Ranges .create (0 , 0 , 0 , 0 ),
78
- OccurrenceType .DEFINITION
79
- )
80
- );
80
+ if ((node .get ().getParent () instanceof BSLParser .TypeNameContext )
81
+ && moduleType == ModuleType .Class ) {
82
+ return true ;
83
+ } else {
84
+ return (node .get ().getParent () instanceof BSLParser .ComplexIdentifierContext )
85
+ && moduleType == ModuleType .Module ;
86
+ }
81
87
82
88
}
89
+
83
90
}
0 commit comments