Skip to content

Commit fdf4b02

Browse files
committed
Check HasDefaultParams, compute explicit info once
1 parent cce9fc5 commit fdf4b02

File tree

1 file changed

+11
-8
lines changed

1 file changed

+11
-8
lines changed

compiler/src/dotty/tools/dotc/typer/RefChecks.scala

+11-8
Original file line numberDiff line numberDiff line change
@@ -1167,8 +1167,9 @@ object RefChecks {
11671167
extension (tp: Type)
11681168
def explicit = Applications.stripImplicit(tp.stripPoly, wildcardOnly = true)
11691169
def hasImplicitParams = tp.stripPoly match { case mt: MethodType => mt.isImplicitMethod case _ => false }
1170-
val target = sym.info.explicit.firstParamTypes.head // required for extension method, the putative receiver
1171-
val methTp = sym.info.explicit.resultType // skip leading implicits and the "receiver" parameter
1170+
val explicitInfo = sym.info.explicit // consider explicit value params
1171+
val target = explicitInfo.firstParamTypes.head // required for extension method, the putative receiver
1172+
val methTp = explicitInfo.resultType // skip leading implicits and the "receiver" parameter
11721173
def hidden =
11731174
target.nonPrivateMember(sym.name)
11741175
.filterWithPredicate: member =>
@@ -1188,12 +1189,14 @@ object RefChecks {
11881189
}
11891190
}
11901191
.exists
1191-
val receiverName = sym.info.explicit.firstParamNames.head
1192-
val num = sym.info.paramNamess.flatten.indexWhere(_ == receiverName)
1193-
val getterName = DefaultGetterName(sym.name.toTermName, num = num)
1194-
val getterDenot = sym.owner.info.member(getterName)
1195-
if getterDenot.exists
1196-
then report.warning(ExtensionHasDefault(sym), getterDenot.symbol.srcPos)
1192+
if sym.is(HasDefaultParams) then
1193+
val getterDenot =
1194+
val receiverName = explicitInfo.firstParamNames.head
1195+
val num = sym.info.paramNamess.flatten.indexWhere(_ == receiverName)
1196+
val getterName = DefaultGetterName(sym.name.toTermName, num = num)
1197+
sym.owner.info.member(getterName)
1198+
if getterDenot.exists
1199+
then report.warning(ExtensionHasDefault(sym), getterDenot.symbol.srcPos)
11971200
if !target.typeSymbol.isOpaqueAlias && !sym.nextOverriddenSymbol.exists && hidden
11981201
then report.warning(ExtensionNullifiedByMember(sym, target.typeSymbol), sym.srcPos)
11991202
end checkExtensionMethods

0 commit comments

Comments
 (0)