From 3a2946e001beb36d9e33ca0844169d0a61e75d5a Mon Sep 17 00:00:00 2001 From: Tomasz Godzik Date: Mon, 28 Apr 2025 16:52:27 +0200 Subject: [PATCH] Revert "Do not lift annotation arguments" This reverts commit a08bf03eefca7fee7ef15a59e6139dce84b04d92. --- .../src/dotty/tools/dotc/ast/TreeInfo.scala | 4 +-- .../tools/dotc/printing/RefinedPrinter.scala | 2 +- .../dotty/tools/dotc/typer/Applications.scala | 9 +------ .../dependent-annot-default-args.check | 25 ------------------- .../dependent-annot-default-args.scala | 6 ----- 5 files changed, 4 insertions(+), 42 deletions(-) delete mode 100644 tests/printing/dependent-annot-default-args.check delete mode 100644 tests/printing/dependent-annot-default-args.scala diff --git a/compiler/src/dotty/tools/dotc/ast/TreeInfo.scala b/compiler/src/dotty/tools/dotc/ast/TreeInfo.scala index 8c682971adcb..9efad31e9796 100644 --- a/compiler/src/dotty/tools/dotc/ast/TreeInfo.scala +++ b/compiler/src/dotty/tools/dotc/ast/TreeInfo.scala @@ -142,7 +142,7 @@ trait TreeInfo[T <: Untyped] { self: Trees.Instance[T] => def allTermArguments(tree: Tree): List[Tree] = unsplice(tree) match { case Apply(fn, args) => allTermArguments(fn) ::: args case TypeApply(fn, args) => allTermArguments(fn) - case Block(Nil, expr) => allTermArguments(expr) + case Block(_, expr) => allTermArguments(expr) case _ => Nil } @@ -150,7 +150,7 @@ trait TreeInfo[T <: Untyped] { self: Trees.Instance[T] => def allArguments(tree: Tree): List[Tree] = unsplice(tree) match { case Apply(fn, args) => allArguments(fn) ::: args case TypeApply(fn, args) => allArguments(fn) ::: args - case Block(Nil, expr) => allArguments(expr) + case Block(_, expr) => allArguments(expr) case _ => Nil } diff --git a/compiler/src/dotty/tools/dotc/printing/RefinedPrinter.scala b/compiler/src/dotty/tools/dotc/printing/RefinedPrinter.scala index 4fdfd7cb3e60..6734cbc4c153 100644 --- a/compiler/src/dotty/tools/dotc/printing/RefinedPrinter.scala +++ b/compiler/src/dotty/tools/dotc/printing/RefinedPrinter.scala @@ -1040,7 +1040,7 @@ class RefinedPrinter(_ctx: Context) extends PlainPrinter(_ctx) { def recur(t: untpd.Tree): Text = t match case Apply(fn, Nil) => recur(fn) case Apply(fn, args) => - val explicitArgs = args.filterNot(untpd.stripNamedArg(_).symbol.name.is(DefaultGetterName)) + val explicitArgs = args.filterNot(_.symbol.name.is(DefaultGetterName)) recur(fn) ~ "(" ~ toTextGlobal(explicitArgs, ", ") ~ ")" case TypeApply(fn, args) => recur(fn) ~ "[" ~ toTextGlobal(args, ", ") ~ "]" case Select(qual, nme.CONSTRUCTOR) => recur(qual) diff --git a/compiler/src/dotty/tools/dotc/typer/Applications.scala b/compiler/src/dotty/tools/dotc/typer/Applications.scala index 1e6fbd7bed17..1a57e3300b02 100644 --- a/compiler/src/dotty/tools/dotc/typer/Applications.scala +++ b/compiler/src/dotty/tools/dotc/typer/Applications.scala @@ -479,7 +479,7 @@ trait Applications extends Compatibility { case tp => args.size } - !isAnnotConstr(methRef.symbol) && + !isJavaAnnotConstr(methRef.symbol) && args.size < requiredArgNum(funType) } @@ -611,11 +611,6 @@ trait Applications extends Compatibility { def isJavaAnnotConstr(sym: Symbol): Boolean = sym.is(JavaDefined) && sym.isConstructor && sym.owner.is(JavaAnnotation) - - /** Is `sym` a constructor of an annotation? */ - def isAnnotConstr(sym: Symbol): Boolean = - sym.isConstructor && sym.owner.isAnnotation - /** Match re-ordered arguments against formal parameters * @param n The position of the first parameter in formals in `methType`. */ @@ -905,8 +900,6 @@ trait Applications extends Compatibility { val app1 = if !success then app0.withType(UnspecifiedErrorType) else { - if isAnnotConstr(methRef.symbol) && !isJavaAnnotConstr(methRef.symbol) then - typedArgs if !sameSeq(args, orderedArgs) && !isJavaAnnotConstr(methRef.symbol) && !typedArgs.forall(isSafeArg) diff --git a/tests/printing/dependent-annot-default-args.check b/tests/printing/dependent-annot-default-args.check deleted file mode 100644 index 44c1fe31e2d1..000000000000 --- a/tests/printing/dependent-annot-default-args.check +++ /dev/null @@ -1,25 +0,0 @@ -[[syntax trees at end of typer]] // tests/printing/dependent-annot-default-args.scala -package { - class annot(x: Any, y: Any) extends annotation.Annotation() { - private[this] val x: Any - private[this] val y: Any - } - final lazy module val annot: annot = new annot() - final module class annot() extends AnyRef() { this: annot.type => - def $lessinit$greater$default$2: Any @uncheckedVariance = 42 - } - final lazy module val dependent-annot-default-args$package: - dependent-annot-default-args$package = - new dependent-annot-default-args$package() - final module class dependent-annot-default-args$package() extends Object() { - this: dependent-annot-default-args$package.type => - def f(x: Int): Int @annot(x) = x - def test: Unit = - { - val y: Int = ??? - val z: Int @annot(y) = f(y) - () - } - } -} - diff --git a/tests/printing/dependent-annot-default-args.scala b/tests/printing/dependent-annot-default-args.scala deleted file mode 100644 index 075913a63689..000000000000 --- a/tests/printing/dependent-annot-default-args.scala +++ /dev/null @@ -1,6 +0,0 @@ -class annot(x: Any, y: Any = 42) extends annotation.Annotation -def f(x: Int): Int @annot(x) = x - -def test = - val y: Int = ??? - val z = f(y)