@@ -52,6 +52,11 @@ trait SymbolOpsImpl extends scala.tasty.reflect.SymbolOps with TastyCoreImpl {
5252 case _ => throw new Exception (" not a ValSymbol" )
5353 }
5454
55+ def asBind (implicit ctx : Context ): BindSymbol = symbol match {
56+ case IsBindSymbol (symbol) => symbol
57+ case _ => throw new Exception (" not a BindSymbol" )
58+ }
59+
5560 def asType (implicit ctx : Context ): TypeSymbol = symbol match {
5661 case IsTypeSymbol (symbol) => symbol.asType
5762 case _ => throw new Exception (" not a TypeSymbol" )
@@ -70,6 +75,24 @@ trait SymbolOpsImpl extends scala.tasty.reflect.SymbolOps with TastyCoreImpl {
7075
7176 }
7277
78+ object IsPackageSymbol extends IsPackageSymbolExtractor {
79+ def unapply (symbol : Symbol )(implicit ctx : Context ): Option [PackageSymbol ] =
80+ if (symbol.is(Flags .Package )) Some (symbol) else None
81+ }
82+
83+ def PackageSymbolDeco (symbol : PackageSymbol ): PackageSymbolAPI = new PackageSymbolAPI {
84+ def tree (implicit ctx : Context ): PackageDef = FromSymbol .packageDefFromSym(symbol)
85+ }
86+
87+ object IsTypeSymbol extends IsTypeSymbolExtractor {
88+ def unapply (symbol : Symbol )(implicit ctx : Context ): Option [TypeSymbol ] =
89+ if (symbol.isType) Some (symbol.asType) else None
90+ }
91+
92+ def TypeSymbolDeco (symbol : TypeSymbol ): TypeSymbolAPI = new TypeSymbolAPI {
93+ def tree (implicit ctx : Context ): TypeDef = FromSymbol .typeDefFromSym(symbol)
94+ }
95+
7396 object IsClassSymbol extends IsClassSymbolExtractor {
7497 def unapply (symbol : Symbol )(implicit ctx : Context ): Option [ClassSymbol ] =
7598 if (symbol.isClass) Some (symbol.asClass) else None
@@ -90,29 +113,20 @@ trait SymbolOpsImpl extends scala.tasty.reflect.SymbolOps with TastyCoreImpl {
90113
91114 object IsValSymbol extends IsValSymbolExtractor {
92115 def unapply (symbol : Symbol )(implicit ctx : Context ): Option [ValSymbol ] =
93- if (symbol.isTerm && ! symbol.is(Flags .Method )) Some (symbol.asTerm) else None
116+ if (symbol.isTerm && ! symbol.is(Flags .Method ) && ! symbol.is( Flags . Case ) ) Some (symbol.asTerm) else None
94117 }
95118
96119 def ValSymbolDeco (symbol : ValSymbol ): ValSymbolAPI = new ValSymbolAPI {
97120 def tree (implicit ctx : Context ): ValDef = FromSymbol .valDefFromSym(symbol)
98121 }
99122
100- object IsTypeSymbol extends IsTypeSymbolExtractor {
101- def unapply (symbol : Symbol )(implicit ctx : Context ): Option [TypeSymbol ] =
102- if (symbol.isType) Some (symbol.asType ) else None
123+ object IsBindSymbol extends IsBindSymbolExtractor {
124+ def unapply (symbol : Symbol )(implicit ctx : Context ): Option [BindSymbol ] =
125+ if (symbol.isTerm && symbol.is( Flags . Case )) Some (symbol.asTerm ) else None // TODO
103126 }
104127
105- def TypeSymbolDeco (symbol : TypeSymbol ): TypeSymbolAPI = new TypeSymbolAPI {
106- def tree (implicit ctx : Context ): TypeDef = FromSymbol .typeDefFromSym(symbol)
107- }
108-
109- object IsPackageSymbol extends IsPackageSymbolExtractor {
110- def unapply (symbol : Symbol )(implicit ctx : Context ): Option [PackageSymbol ] =
111- if (symbol.is(Flags .Package )) Some (symbol) else None
112- }
113-
114- def PackageSymbolDeco (symbol : PackageSymbol ): PackageSymbolAPI = new PackageSymbolAPI {
115- def tree (implicit ctx : Context ): PackageDef = FromSymbol .packageDefFromSym(symbol)
128+ def BindSymbolDeco (symbol : BindSymbol ): BindSymbolAPI = new BindSymbolAPI {
129+ def tree (implicit ctx : Context ): Bind = FromSymbol .bindFromSym(symbol)
116130 }
117131
118132 object NoSymbol extends NoSymbolExtractor {
0 commit comments