Skip to content

Commit d420e21

Browse files
committed
Add a test for i23852 and fix previous tests to handle inherited fields
1 parent a51af1a commit d420e21

File tree

10 files changed

+45
-4
lines changed

10 files changed

+45
-4
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
object Components extends App {
2+
try {
3+
wire[Dep]
4+
} catch {
5+
case e: Throwable =>
6+
e.printStackTrace()
7+
sys.exit(-1)
8+
}
9+
}

sbt-test/macros/i23852/Dep.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
class Dep()
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
class Dep(int: Int)

sbt-test/macros/i23852/macro.scala

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import scala.quoted.*
2+
3+
inline def wire[T]: T = ${ wireImpl[T] }
4+
def wireImpl[T: Type](using q: Quotes): Expr[T] = {
5+
import q.reflect.*
6+
7+
lazy val targetType = TypeRepr.of[T]
8+
val constructorValue = targetType.typeSymbol.primaryConstructor
9+
val constructionMethodTree: Term = {
10+
val ctor = Select(New(TypeIdent(targetType.typeSymbol)), constructorValue)
11+
if (targetType.typeArgs.isEmpty) ctor else ctor.appliedToTypes(targetType.typeArgs)
12+
}
13+
val constructorArgsValue = List(Nil)
14+
val code: Tree = constructorArgsValue.foldLeft(constructionMethodTree)((acc: Term, args: List[Term]) => Apply(acc, args))
15+
code.asExprOf[T]
16+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import sbt._
2+
import Keys._
3+
4+
object DottyInjectedPlugin extends AutoPlugin {
5+
override def requires = plugins.JvmPlugin
6+
override def trigger = allRequirements
7+
8+
override val projectSettings = Seq(
9+
scalaVersion := sys.props("plugin.scalaVersion")
10+
)
11+
}

sbt-test/macros/i23852/test

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
> run
2+
$ copy-file Dep.scala-added Dep.scala
3+
-> compile

sbt-test/macros/macro-type-change-2/macros/Macros.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ object Macros {
88
def hasAnyFieldImpl[T: Type](using Quotes): Expr[Boolean] = {
99
import quotes.reflect.*
1010

11-
val hasField = TypeRepr.of[T].typeSymbol.declaredFields.nonEmpty
11+
val hasField = TypeRepr.of[T].typeSymbol.fieldMembers.nonEmpty
1212

1313
Expr(hasField)
1414
}

sbt-test/macros/macro-type-change-3/macros/Macros.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ object Macros {
88
def hasAnyFieldImpl[T: Type](using Quotes): Expr[Boolean] = {
99
import quotes.reflect.*
1010

11-
val hasField = TypeRepr.of[T].typeSymbol.declaredFields.nonEmpty
11+
val hasField = TypeRepr.of[T].typeSymbol.fieldMembers.nonEmpty
1212

1313
Expr(hasField)
1414
}

sbt-test/macros/macro-type-change-4/macros/Macros.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ object Macros {
88
def hasAnyFieldImpl[T: Type](placeholder: Expr[Boolean])(using Quotes): Expr[Boolean] = {
99
import quotes.reflect.*
1010

11-
val hasField = TypeRepr.of[T].typeSymbol.declaredFields.nonEmpty
11+
val hasField = TypeRepr.of[T].typeSymbol.fieldMembers.nonEmpty
1212

1313
Expr(hasField)
1414
}

sbt-test/macros/macro-type-change/macros/Macros.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ object Macros {
88
def hasAnyFieldImpl[T: Type](using Quotes): Expr[Boolean] = {
99
import quotes.reflect.*
1010

11-
val hasField = TypeRepr.of[T].typeSymbol.declaredFields.nonEmpty
11+
val hasField = TypeRepr.of[T].typeSymbol.fieldMembers.nonEmpty
1212

1313
Expr(hasField)
1414
}

0 commit comments

Comments
 (0)