@@ -2,7 +2,7 @@ package dotty.tools.dotc
22package transform
33
44import java .io .{PrintWriter , StringWriter }
5- import java .lang .reflect .{InvocationTargetException , Method }
5+ import java .lang .reflect .{InvocationTargetException , Method => JLRMethod }
66
77import dotty .tools .dotc .ast .tpd
88import dotty .tools .dotc .ast .Trees ._
@@ -194,10 +194,13 @@ object Splicer {
194194 interpretNew(fn.symbol, args.flatten.map(interpretTree))
195195 else if (fn.symbol.is(Module ))
196196 interpretModuleAccess(fn.symbol)
197- else if (fn.symbol.isStatic) {
197+ else if (fn.symbol.is( Method ) && fn.symbol. isStatic) {
198198 val staticMethodCall = interpretedStaticMethodCall(fn.symbol.owner, fn.symbol)
199199 staticMethodCall(args.flatten.map(interpretTree))
200200 }
201+ else if (fn.symbol.isStatic)
202+ assert(args.isEmpty)
203+ interpretedStaticFieldAccess(fn.symbol)
201204 else if (fn.qualifier.symbol.is(Module ) && fn.qualifier.symbol.isStatic)
202205 if (fn.name == nme.asInstanceOfPM)
203206 interpretModuleAccess(fn.qualifier.symbol)
@@ -277,6 +280,12 @@ object Splicer {
277280 (args : List [Object ]) => stopIfRuntimeException(method.invoke(inst, args : _* ), method)
278281 }
279282
283+ private def interpretedStaticFieldAccess (sym : Symbol )(implicit env : Env ): Object = {
284+ val clazz = loadClass(sym.owner.fullName.toString)
285+ val field = clazz.getField(sym.name.toString)
286+ field.get(null )
287+ }
288+
280289 private def interpretModuleAccess (fn : Symbol )(implicit env : Env ): Object =
281290 loadModule(fn.moduleClass)
282291
@@ -319,15 +328,15 @@ object Splicer {
319328 throw new StopInterpretation (msg, pos)
320329 }
321330
322- private def getMethod (clazz : Class [? ], name : Name , paramClasses : List [Class [? ]]): Method =
331+ private def getMethod (clazz : Class [? ], name : Name , paramClasses : List [Class [? ]]): JLRMethod =
323332 try clazz.getMethod(name.toString, paramClasses : _* )
324333 catch {
325334 case _ : NoSuchMethodException =>
326335 val msg = em " Could not find method ${clazz.getCanonicalName}. $name with parameters ( $paramClasses%, %) "
327336 throw new StopInterpretation (msg, pos)
328337 }
329338
330- private def stopIfRuntimeException [T ](thunk : => T , method : Method ): T =
339+ private def stopIfRuntimeException [T ](thunk : => T , method : JLRMethod ): T =
331340 try thunk
332341 catch {
333342 case ex : RuntimeException =>
0 commit comments