@@ -66,6 +66,10 @@ class SemanticdbConsumer(sourceFile: java.nio.file.Path) extends TastyConsumer {
66
66
def isUserCreated : Boolean = {
67
67
val children : List [Position ] =
68
68
ChildTraverser .getChildren(tree)(reflect.rootContext).map(_.pos)
69
+ /* println("call to isusercreated on " + iterateParent(tree.symbol))
70
+ if (tree.pos.exists)
71
+ println(tree.pos.start, tree.pos.end)
72
+ println(children.map(x => (x.start, x.end)))*/
69
73
return ! ((tree.pos.exists && tree.pos.start == tree.pos.end && children == Nil ) || children
70
74
.exists(_ == tree.pos))
71
75
}
@@ -251,9 +255,16 @@ class SemanticdbConsumer(sourceFile: java.nio.file.Path) extends TastyConsumer {
251
255
symbol.name != tpnme.THIS .toString
252
256
}
253
257
258
+ def isAnonymousInit (implicit ctx : Context ): Boolean = {
259
+ return symbol.owner != NoSymbol &&
260
+ (symbol.owner.isAnonymousFunction || symbol.owner.isAnonymousClass) &&
261
+ symbol.name == " <init>"
262
+ }
263
+
254
264
def isUseless (implicit ctx : Context ): Boolean = {
255
265
symbol == NoSymbol ||
256
266
// symbol.isInitChild ||
267
+ symbol.isAnonymousInit ||
257
268
symbol.isDefaultGetter ||
258
269
symbol.isWildCard ||
259
270
symbol.isAnonymousClass ||
@@ -353,6 +364,15 @@ class SemanticdbConsumer(sourceFile: java.nio.file.Path) extends TastyConsumer {
353
364
}
354
365
}
355
366
367
+ def addOccurencePredef (parent : String , name : String , range : s.Range ): Unit = {
368
+ occurrences =
369
+ occurrences :+
370
+ s.SymbolOccurrence (
371
+ Some (range),
372
+ parent + name + " ()." ,
373
+ s.SymbolOccurrence .Role .DEFINITION
374
+ )
375
+ }
356
376
def addSelfDefinition (name : String , range : s.Range ): Unit = {
357
377
var localsymbol = Symbols .Local (local_offset.toString)
358
378
local_offset += 1
@@ -393,6 +413,8 @@ class SemanticdbConsumer(sourceFile: java.nio.file.Path) extends TastyConsumer {
393
413
case _ =>
394
414
symbolToSymbolString(symbol)
395
415
}
416
+ // We want to add symbols coming from our file
417
+ // if (symbol.pos.sourceFile != sourceFile) return
396
418
if (symbol_path == " " || symbol.isUselessOccurrence) return
397
419
398
420
val key = (symbol_path, range)
@@ -436,6 +458,7 @@ class SemanticdbConsumer(sourceFile: java.nio.file.Path) extends TastyConsumer {
436
458
def addOccurenceTypeTree (typetree : TypeTree ,
437
459
type_symbol : s.SymbolOccurrence .Role ,
438
460
range : s.Range ): Unit = {
461
+ println(typetree.isUserCreated)
439
462
if (typetree.isUserCreated) {
440
463
addOccurence(typetree.symbol, type_symbol, range)
441
464
}
@@ -571,8 +594,9 @@ class SemanticdbConsumer(sourceFile: java.nio.file.Path) extends TastyConsumer {
571
594
s.SymbolOccurrence .Role .REFERENCE ,
572
595
posToRange(typetree.pos).get)
573
596
}
574
- case _ =>
597
+ case _ => {
575
598
super .traverseTypeTree(tree)
599
+ }
576
600
}
577
601
}
578
602
@@ -597,6 +621,14 @@ class SemanticdbConsumer(sourceFile: java.nio.file.Path) extends TastyConsumer {
597
621
var fittedInitClassRange : Option [s.Range ] = None
598
622
var forceAddBecauseParents : Boolean = false
599
623
624
+ def getNumberParametersInit (defdef : DefDef )(implicit ctx : Context ): Int = {
625
+ defdef match {
626
+ case DefDef (_, typeParams, paramss, _, _) =>
627
+ paramss.foldLeft(0 )((old, c) => old + c.length) + typeParams.length
628
+ case _ => 0
629
+ }
630
+ }
631
+
600
632
override def traverseTree (tree : Tree )(implicit ctx : Context ): Unit = {
601
633
tree match {
602
634
case Import (path, selectors) =>
@@ -645,7 +677,7 @@ class SemanticdbConsumer(sourceFile: java.nio.file.Path) extends TastyConsumer {
645
677
forceAddBecauseParents = false
646
678
647
679
selfopt match {
648
- case Some (vdef @ ValDef (name, _ , _)) if name != " _" => {
680
+ case Some (vdef @ ValDef (name, type_ , _)) if name != " _" => {
649
681
// To find the current position, we will heuristically
650
682
// reparse the source code.
651
683
// The process is done in three steps:
@@ -668,11 +700,13 @@ class SemanticdbConsumer(sourceFile: java.nio.file.Path) extends TastyConsumer {
668
700
posColumn,
669
701
0 ,
670
702
posColumn + name.length))
703
+ println(type_)
704
+ traverseTypeTree(type_)
671
705
}
672
706
case _ =>
673
707
}
674
708
675
- statements.foreach(traverseTree)
709
+ statements.takeRight(statements.length - getNumberParametersInit(constr)). foreach(traverseTree)
676
710
677
711
}
678
712
case IsDefinition (cdef) => {
@@ -740,7 +774,7 @@ class SemanticdbConsumer(sourceFile: java.nio.file.Path) extends TastyConsumer {
740
774
r.endCharacter + 1 )
741
775
else r
742
776
}
743
- addOccurenceTree(tree, s.SymbolOccurrence .Role .REFERENCE , range)
777
+ addOccurenceTree(tree, s.SymbolOccurrence .Role .REFERENCE , range, forceAddBecauseParents )
744
778
super .traverseTree(tree)
745
779
}
746
780
@@ -752,6 +786,33 @@ class SemanticdbConsumer(sourceFile: java.nio.file.Path) extends TastyConsumer {
752
786
super .traverseTree(tree)
753
787
}
754
788
789
+ case Term .Inlined (Some (c), b, d) => {
790
+ def extractPos (x : TermOrTypeTree ) = x match {
791
+ case IsTerm (t) => t.pos
792
+ case IsTypeTree (t) => t.pos
793
+ }
794
+ def extractSymbol (x : TermOrTypeTree ) = x match {
795
+ case IsTerm (t) => t.symbol
796
+ case IsTypeTree (t) => t.symbol
797
+ }
798
+ def getPredefFunction (pos : Int ): String = {
799
+ sourceCode(pos) match {
800
+ case 'l' => " locally"
801
+ case 'i' => " implicitly"
802
+ case 'a' => " assert"
803
+ }
804
+ }
805
+ val parentSymbol = iterateParent(extractSymbol(c))
806
+ if (parentSymbol == " dotty/DottyPredef." ) {
807
+ val pos = extractPos(c)
808
+ val function = getPredefFunction(pos.start)
809
+ val range = s.Range (pos.startLine, pos.startColumn, pos.startLine, pos.startColumn + function.length)
810
+ addOccurencePredef(parentSymbol, function, range)
811
+ }
812
+
813
+ super .traverseTree(tree)
814
+ }
815
+
755
816
case PackageClause (_) =>
756
817
val key = (tree.symbol.trueName, tree.pos.start)
757
818
if (! package_definitions(key)) {
0 commit comments