@@ -38,7 +38,6 @@ class SemanticdbConsumer extends TastyConsumer {
38
38
39
39
object Traverser extends TreeTraverser {
40
40
val symbolsCache : HashMap [Symbol , String ] = HashMap ()
41
- val symbolPathsDisimbiguator : HashMap [String , Int ] = HashMap ()
42
41
implicit class TreeExtender (tree : Tree ) {
43
42
def isUserCreated : Boolean = {
44
43
val children : List [Position ] =
@@ -85,14 +84,29 @@ class SemanticdbConsumer extends TastyConsumer {
85
84
def isJavaClass : Boolean = false
86
85
}
87
86
88
- def disimbiguate (symbol_path : String ): String = {
89
- if (symbolPathsDisimbiguator.contains(symbol_path)) {
90
- symbolPathsDisimbiguator +=
91
- (symbol_path -> (symbolPathsDisimbiguator(symbol_path) + 1 ))
92
- " (+" + (symbolPathsDisimbiguator(symbol_path) - 1 ) + " )"
93
- } else {
94
- symbolPathsDisimbiguator += (symbol_path -> 1 )
87
+ def resolveClass (symbol : ClassSymbol ): Symbol =
88
+ (symbol.companionClass, symbol.companionModule) match {
89
+ case (_, Some (module)) if symbol.flags.isObject => module
90
+ case (Some (c), _) => c
91
+ case _ => symbol
92
+ }
93
+
94
+ def disimbiguate (symbol_path : String , symbol : Symbol ): String = {
95
+ val symbolcl = resolveClass(symbol.owner.asClass)
96
+ val methods = symbolcl.asClass.method(symbol.name)
97
+ val (methods_count, method_pos) =
98
+ methods.foldLeft((0 , - 1 ))((x: Tuple2 [Int , Int ], m: Symbol ) => {
99
+ if (m == symbol)
100
+ (x._1+ 1 , x._1)
101
+ else
102
+ (x._1+ 1 , x._2)
103
+ })
104
+ val real_pos = methods_count - method_pos - 1
105
+
106
+ if (real_pos == 0 ) {
95
107
" ()"
108
+ } else {
109
+ " (+" + real_pos + " )"
96
110
}
97
111
}
98
112
@@ -111,20 +125,15 @@ class SemanticdbConsumer extends TastyConsumer {
111
125
if (symbol.isPackage) {
112
126
d.Package (symbol.name)
113
127
} else if (symbol.isObject) {
114
- symbol.asClass.companionModule match {
115
- case Some (module) => d.Term (module.name)
116
- case _ => d.Term (symbol.name)
117
- }
128
+ d.Term (resolveClass(symbol.asClass).name)
118
129
} else if (symbol.isMethod) {
119
130
d.Method (symbol.name,
120
- disimbiguate(previous_symbol + symbol.name))
131
+ disimbiguate(previous_symbol + symbol.name, symbol ))
121
132
} else if (symbol.isValueParameter) {
122
133
d.Parameter (symbol.name)
123
134
} else if (symbol.isTypeParameter) {
124
135
d.TypeParameter (symbol.name)
125
136
} else if (symbol.isType || symbol.isTrait) {
126
- // println(symbol.name, symbol.companionClass.name, symbol.companionModule.name, symbol.flags.toString)
127
-
128
137
d.Type (symbol.name)
129
138
} else {
130
139
d.Term (symbol.name)
0 commit comments