File tree 5 files changed +16
-5
lines changed
compiler/src/dotty/tools/dotc
5 files changed +16
-5
lines changed Original file line number Diff line number Diff line change @@ -80,6 +80,7 @@ class ExtractSemanticDB extends Phase:
80
80
|| sym.is(Synthetic )
81
81
|| sym.isSetter
82
82
|| sym.isOldStyleImplicitConversion(forImplicitClassOnly = true )
83
+ || sym.owner.isGivenInstanceSummoner
83
84
|| excludeDefOrUse(sym)
84
85
85
86
private def excludeDefOrUse (sym : Symbol )(using Context ): Boolean =
Original file line number Diff line number Diff line change @@ -100,6 +100,17 @@ object SymUtils:
100
100
case _ =>
101
101
false
102
102
103
+ def isGivenInstanceSummoner (using Context ): Boolean =
104
+ def isCodefined (info : Type ): Boolean = info.stripPoly match
105
+ case mt : MethodType =>
106
+ // given summoner can only have contextual params
107
+ mt.isImplicitMethod && isCodefined(mt.resultType)
108
+ case mt : ExprType =>
109
+ isCodefined(mt.resultType)
110
+ case res =>
111
+ self.isCoDefinedGiven(res.typeSymbol)
112
+ self.isAllOf(Given | Method ) && isCodefined(self.info)
113
+
103
114
def useCompanionAsMirror (using Context ): Boolean = self.linkedClass.exists && ! self.is(Scala2x )
104
115
105
116
/** Is this a sealed class or trait for which a sum mirror is generated?
Original file line number Diff line number Diff line change @@ -25,7 +25,7 @@ given X/*->givens::X#*/ with
25
25
given (using X /* ->givens::X#*/ ): Y /* ->givens::Y#*/ with
26
26
def doY /* <-givens::InventedNames$package.given_Y#doY().*/ = " 7"
27
27
28
- given [T /* <-givens::InventedNames$package.given_Z_T#[T]*//* <-givens::InventedNames$package.given_Z_T().[T] */ ]: Z /* ->givens::Z#*/ [T /* ->givens::InventedNames$package.given_Z_T#[T]*/ ] with
28
+ given [T /* <-givens::InventedNames$package.given_Z_T#[T]*/ ]: Z /* ->givens::Z#*/ [T /* ->givens::InventedNames$package.given_Z_T#[T]*/ ] with
29
29
def doZ /* <-givens::InventedNames$package.given_Z_T#doZ().*/ : List /* ->scala::package.List#*/ [T /* ->givens::InventedNames$package.given_Z_T#[T]*/ ] = Nil /* ->scala::package.Nil.*/
30
30
31
31
@@ -39,4 +39,4 @@ val f/*<-givens::InventedNames$package.f.*/ = given_Float/*->givens::InventedNam
39
39
val g /* <-givens::InventedNames$package.g.*/ = `* *`/* ->givens::InventedNames$package.`* *`.*/
40
40
val x /* <-givens::InventedNames$package.x.*/ = given_X/* ->givens::InventedNames$package.given_X.*/
41
41
val y /* <-givens::InventedNames$package.y.*/ = given_Y/* ->givens::InventedNames$package.given_Y().*/
42
- val z /* <-givens::InventedNames$package.z.*/ = given_Z_T/* ->givens::InventedNames$package.given_Z_T().*/ [String /* ->scala::Predef.String#*/ ]
42
+ val z /* <-givens::InventedNames$package.z.*/ = given_Z_T/* ->givens::InventedNames$package.given_Z_T().*/ [String /* ->scala::Predef.String#*/ ]
Original file line number Diff line number Diff line change @@ -39,4 +39,4 @@ val f = given_Float
39
39
val g = `* *`
40
40
val x = given_X
41
41
val y = given_Y
42
- val z = given_Z_T[String ]
42
+ val z = given_Z_T[String ]
Original file line number Diff line number Diff line change @@ -1684,7 +1684,7 @@ Uri => InventedNames.scala
1684
1684
Text => empty
1685
1685
Language => Scala
1686
1686
Symbols => 45 entries
1687
- Occurrences => 62 entries
1687
+ Occurrences => 61 entries
1688
1688
1689
1689
Symbols:
1690
1690
givens/InventedNames$package. => final package object givens extends Object { self: givens.type => +24 decls }
@@ -1767,7 +1767,6 @@ Occurrences:
1767
1767
[24:17..24:18): Y -> givens/Y#
1768
1768
[25:6..25:9): doY <- givens/InventedNames$package.given_Y#doY().
1769
1769
[27:7..27:8): T <- givens/InventedNames$package.given_Z_T#[T]
1770
- [27:7..27:8): T <- givens/InventedNames$package.given_Z_T().[T]
1771
1770
[27:11..27:12): Z -> givens/Z#
1772
1771
[27:13..27:14): T -> givens/InventedNames$package.given_Z_T#[T]
1773
1772
[28:6..28:9): doZ <- givens/InventedNames$package.given_Z_T#doZ().
You can’t perform that action at this time.
0 commit comments