@@ -1148,6 +1148,9 @@ object RefChecks {
1148
1148
def strippedResultType = Applications .stripImplicit(tp.stripPoly, wildcardOnly = true ).resultType
1149
1149
def firstExplicitParamTypes = Applications .stripImplicit(tp.stripPoly, wildcardOnly = true ).firstParamTypes
1150
1150
def hasImplicitParams = tp.stripPoly match { case mt : MethodType => mt.isImplicitMethod case _ => false }
1151
+ def isAnyAlias =
1152
+ val denot = tp.typeSymbol.denot
1153
+ denot.isAliasType || denot.isOpaqueAlias
1151
1154
val target = sym.info.firstExplicitParamTypes.head // required for extension method, the putative receiver
1152
1155
val methTp = sym.info.strippedResultType // skip leading implicits and the "receiver" parameter
1153
1156
def hidden =
@@ -1159,14 +1162,14 @@ object RefChecks {
1159
1162
if memberIsImplicit then methTp.stripPoly.firstParamTypes
1160
1163
else methTp.firstExplicitParamTypes
1161
1164
1162
- paramTps.isEmpty || memberIsImplicit && ! methTp.hasImplicitParams || {
1165
+ paramTps.isEmpty || memberIsImplicit && ! methTp.hasImplicitParams || ! paramTps.exists(_.typeSymbol.denot.isOpaqueAlias) && {
1163
1166
val memberParamTps = member.info.stripPoly.firstParamTypes
1164
1167
! memberParamTps.isEmpty
1165
1168
&& memberParamTps.lengthCompare(paramTps) == 0
1166
1169
&& memberParamTps.lazyZip(paramTps).forall((m, x) => x frozen_<:< m)
1167
1170
}
1168
1171
.exists
1169
- if ! target.typeSymbol.denot.isAliasType && ! target.typeSymbol.denot.isOpaqueAlias && hidden
1172
+ if ! target.isAnyAlias && hidden
1170
1173
then report.warning(ExtensionNullifiedByMember (sym, target.typeSymbol), sym.srcPos)
1171
1174
end checkExtensionMethods
1172
1175
0 commit comments