Skip to content

Commit 04e2a56

Browse files
committed
Drop "not an extension method" check
The test was supposed to check that extension method resolution did produce an extension method and not a normal method. But that test only gave false negatives, as test sticky-extension method shows.
1 parent db3f67d commit 04e2a56

File tree

7 files changed

+17
-21
lines changed

7 files changed

+17
-21
lines changed

compiler/src/dotty/tools/dotc/reporting/ErrorMessageID.scala

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -168,8 +168,7 @@ enum ErrorMessageID extends java.lang.Enum[ErrorMessageID] {
168168
CannotExtendJavaEnumID,
169169
InvalidReferenceInImplicitNotFoundAnnotationID,
170170
TraitMayNotDefineNativeMethodID,
171-
JavaEnumParentArgsID,
172-
NotAnExtensionMethodID
171+
JavaEnumParentArgsID
173172

174173
def errorNumber = ordinal - 2
175174
}

compiler/src/dotty/tools/dotc/reporting/messages.scala

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2402,11 +2402,6 @@ import transform.SymUtils._
24022402
|""".stripMargin
24032403
}
24042404

2405-
class NotAnExtensionMethod(methodRef: untpd.Tree)(using Context)
2406-
extends TypeMsg(NotAnExtensionMethodID):
2407-
def msg = em"not an extension method: $methodRef"
2408-
def explain = ""
2409-
24102405
class NoExtensionMethodAllowed(mdef: untpd.DefDef)(using Context)
24112406
extends SyntaxMsg(NoExtensionMethodAllowedID) {
24122407
def msg = em"No extension method allowed here, since collective parameters are given"

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

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2153,18 +2153,11 @@ trait Applications extends Compatibility {
21532153
(tree, currentPt)
21542154

21552155
val (core, pt1) = normalizePt(methodRef, pt)
2156-
val app = withMode(Mode.SynthesizeExtMethodReceiver) {
2156+
withMode(Mode.SynthesizeExtMethodReceiver) {
21572157
typed(
21582158
untpd.Apply(core, untpd.TypedSplice(receiver, isExtensionReceiver = true) :: Nil),
21592159
pt1, ctx.typerState.ownedVars)
21602160
}
2161-
def isExtension(tree: Tree): Boolean = methPart(tree) match {
2162-
case Inlined(call, _, _) => isExtension(call)
2163-
case tree @ Select(qual, nme.apply) => tree.symbol.is(ExtensionMethod) || isExtension(qual)
2164-
case tree => tree.symbol.is(ExtensionMethod)
2165-
}
2166-
if !isExtension(app) then report.error(NotAnExtensionMethod(methodRef), receiver.srcPos)
2167-
app
21682161
}
21692162

21702163
def isApplicableExtensionMethod(ref: TermRef, receiver: Type)(using Context) =

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

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3513,12 +3513,9 @@ class Typer extends Namer
35133513
nestedCtx.typerState.commit()
35143514
return ExtMethodApply(app)
35153515
else
3516-
nestedCtx.reporter.allErrors
3517-
.filterNot(_.msg.isInstanceOf[NotAnExtensionMethod]) match
3518-
case Nil =>
3519-
case err :: _ =>
3520-
rememberSearchFailure(tree,
3521-
SearchFailure(app.withType(FailedExtension(app, pt, err.msg))))
3516+
for err <- nestedCtx.reporter.allErrors.take(1) do
3517+
rememberSearchFailure(tree,
3518+
SearchFailure(app.withType(FailedExtension(app, pt, err.msg))))
35223519
catch case ex: TypeError =>
35233520
rememberSearchFailure(tree,
35243521
SearchFailure(tree.withType(NestedFailure(ex.toMessage, pt))))

tests/run/eta-extension.scala

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
extension (s: String) def times(i: Int): String = s * i
2+
3+
val partial = "abc".times
4+
5+
@main def Test =
6+
assert(partial(2) == "abcabc")

tests/run/sticky-extmethod.check

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
1

tests/run/sticky-extmethod.scala

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
2+
extension (x: Int) def m (y: Object): Int = x
3+
def m (x: Int)(y: String): String = y * x
4+
5+
@main def Test = println(1.m("xx"))

0 commit comments

Comments
 (0)