SymbolModule
Methods of the module object val Symbol
Attributes
- Source
- Quotes.scala
- Graph
-
- Supertypes
- Self type
-
Symbol.type
Members list
Value members
Abstract methods
The class Symbol of a global class definition
Generates a pattern bind symbol with the given parent, name and type.
Generates a pattern bind symbol with the given parent, name and type.
This symbol starts without an accompanying definition. It is the meta-programmer's responsibility to provide exactly one corresponding definition by passing this symbol to the BindDef constructor.
Value parameters
- flags
-
extra flags to with which the symbol should be constructed.
Case
flag will be added. Can beCase
- name
-
The name of the binding
- parent
-
The owner of the binding
- tpe
-
The type of the binding
Attributes
- Note
-
As a macro can only splice code into the point at which it is expanded, all generated symbols must be direct or indirect children of the reflection context's owner.
- Source
- Quotes.scala
Generates a new method symbol with the given parent, name and type.
Generates a new method symbol with the given parent, name and type.
To define a member method of a class, use the newMethod
within the decls
function of newClass
.
Value parameters
- name
-
The name of the method
- parent
-
The owner of the method
- tpe
-
The type of the method (MethodType, PolyType, ByNameType) This symbol starts without an accompanying definition. It is the meta-programmer's responsibility to provide exactly one corresponding definition by passing this symbol to the DefDef constructor.
Attributes
- Note
-
As a macro can only splice code into the point at which it is expanded, all generated symbols must be direct or indirect children of the reflection context's owner.
- Source
- Quotes.scala
Works as the other newMethod, but with additional parameters.
Works as the other newMethod, but with additional parameters.
To define a member method of a class, use the newMethod
within the decls
function of newClass
.
Value parameters
- flags
-
extra flags to with which the symbol should be constructed.
Method
flag will be added. Can bePrivate | Protected | Override | Deferred | Final | Method | Implicit | Given | Local | JavaStatic | Synthetic | Artifact
- name
-
The name of the method
- parent
-
The owner of the method
- privateWithin
-
the symbol within which this new method symbol should be private. May be noSymbol.
- tpe
-
The type of the method (MethodType, PolyType, ByNameType)
Attributes
- Source
- Quotes.scala
Generates a new val/var/lazy val symbol with the given parent, name and type.
Generates a new val/var/lazy val symbol with the given parent, name and type.
This symbol starts without an accompanying definition. It is the meta-programmer's responsibility to provide exactly one corresponding definition by passing this symbol to the ValDef constructor.
Note: Also see ValDef.let
Value parameters
- flags
-
extra flags to with which the symbol should be constructed. Can be
Private | Protected | Override | Deferred | Final | Param | Implicit | Lazy | Mutable | Local | ParamAccessor | Module | Package | Case | CaseAccessor | Given | Enum | JavaStatic | Synthetic | Artifact
- name
-
The name of the val/var/lazy val
- parent
-
The owner of the val/var/lazy val
- privateWithin
-
the symbol within which this new method symbol should be private. May be noSymbol.
- tpe
-
The type of the val/var/lazy val
Attributes
- Note
-
As a macro can only splice code into the point at which it is expanded, all generated symbols must be direct or indirect children of the reflection context's owner.
- Source
- Quotes.scala
Definition not available
Get class symbol if class is either defined in current compilation run or present on classpath.
Get class symbol if class is either defined in current compilation run or present on classpath.
Attributes
- Source
- Quotes.scala
Get method symbol if method is either defined in current compilation run or present on classpath. Throws if the method has an overload.
Get method symbol if method is either defined in current compilation run or present on classpath. Throws if the method has an overload.
Attributes
- Source
- Quotes.scala
Get module symbol if module is either defined in current compilation run or present on classpath.
Get module symbol if module is either defined in current compilation run or present on classpath.
Attributes
- Source
- Quotes.scala
Get package symbol if package is either defined in current compilation run or present on classpath.
Get package symbol if package is either defined in current compilation run or present on classpath.
Attributes
- Source
- Quotes.scala
Symbol of the definition that encloses the current splicing context.
Symbol of the definition that encloses the current splicing context.
For example, the following call to spliceOwner
would return the symbol x
.
val x = ${ ... Symbol.spliceOwner ... }
For a macro splice, it is the symbol of the definition where the macro expansion happens.
Attributes
- Source
- Quotes.scala
Experimental methods
A fresh name for class or member symbol names.
A fresh name for class or member symbol names.
Fresh names are constructed using the following format prefix + "$macro$" + freshIndex
. The freshIndex
are unique within the current source file.
Examples: See scala.annotation.MacroAnnotation
Value parameters
- prefix
-
Prefix of the fresh name
Attributes
- Experimental
- true
- Source
- Quotes.scala
Generates a new class symbol for a class with a parameterless constructor.
Generates a new class symbol for a class with a parameterless constructor.
Example usage:
val name: String = "myClass"
val parents = List(TypeTree.of[Object], TypeTree.of[Foo])
def decls(cls: Symbol): List[Symbol] =
List(Symbol.newMethod(cls, "foo", MethodType(Nil)(_ => Nil, _ => TypeRepr.of[Unit])))
val cls = Symbol.newClass(Symbol.spliceOwner, name, parents = parents.map(_.tpe), decls, selfType = None)
val fooSym = cls.declaredMethod("foo").head
val fooDef = DefDef(fooSym, argss => Some('{println(s"Calling foo")}.asTerm))
val clsDef = ClassDef(cls, parents, body = List(fooDef))
val newCls = Typed(Apply(Select(New(TypeIdent(cls)), cls.primaryConstructor), Nil), TypeTree.of[Foo])
Block(List(clsDef), newCls).asExprOf[Foo]
constructs the equivalent to
'{
class myClass() extends Object with Foo {
def foo(): Unit = println("Calling foo")
}
new myClass(): Foo
}
Value parameters
- decls
-
The member declarations of the class provided the symbol of this class
- name
-
The name of the class
- parent
-
The owner of the class
- parents
-
The parent classes of the class. The first parent must not be a trait.
- selfType
-
The self type of the class if it has one This symbol starts without an accompanying definition. It is the meta-programmer's responsibility to provide exactly one corresponding definition by passing this symbol to the ClassDef constructor.
Attributes
- Note
-
As a macro can only splice code into the point at which it is expanded, all generated symbols must be direct or indirect children of the reflection context's owner.
- Experimental
- true
- Source
- Quotes.scala
Generates a new module symbol with an associated module class symbol, this is equivalent to an object
declaration in source code. This method returns the module symbol. The module class can be accessed calling moduleClass
on this symbol.
Generates a new module symbol with an associated module class symbol, this is equivalent to an object
declaration in source code. This method returns the module symbol. The module class can be accessed calling moduleClass
on this symbol.
Example usage:
given Quotes = ???
import quotes.reflect.*
val moduleName: String = Symbol.freshName("MyModule")
val parents = List(TypeTree.of[Object])
def decls(cls: Symbol): List[Symbol] =
List(Symbol.newMethod(cls, "run", MethodType(Nil)(_ => Nil, _ => TypeRepr.of[Unit]), Flags.EmptyFlags, Symbol.noSymbol))
val mod = Symbol.newModule(Symbol.spliceOwner, moduleName, Flags.EmptyFlags, Flags.EmptyFlags, parents.map(_.tpe), decls, Symbol.noSymbol)
val cls = mod.moduleClass
val runSym = cls.declaredMethod("run").head
val runDef = DefDef(runSym, _ => Some('{ println("run") }.asTerm))
val modDef = ClassDef.module(mod, parents, body = List(runDef))
val callRun = Apply(Select(Ref(mod), runSym), Nil)
Block(modDef.toList, callRun)
constructs the equivalent to
given Quotes = ???
import quotes.reflect.*
'{
object MyModule$macro$1 extends Object:
def run(): Unit = println("run")
MyModule$macro$1.run()
}
Value parameters
- clsFlags
-
extra flags with which the module class symbol should be constructed
- decls
-
A function that takes the symbol of the module class as input and return the symbols of its declared members
- modFlags
-
extra flags with which the module symbol should be constructed
- name
-
The name of the class
- parent
-
The owner of the class
- parents
-
The parent classes of the class. The first parent must not be a trait.
- privateWithin
-
the symbol within which this new method symbol should be private. May be noSymbol. This symbol starts without an accompanying definition. It is the meta-programmer's responsibility to provide exactly one corresponding definition by passing this symbol to
ClassDef.module
.
Attributes
- Note
-
As a macro can only splice code into the point at which it is expanded, all generated symbols must be direct or indirect children of the reflection context's owner.
- Experimental
- true
- Source
- Quotes.scala