Skip to content

Commit 738d75d

Browse files
committed
maybe scala/scala#7270 ? ``` package example import scala.reflect.NameTransformer object A{ Main.a = 1 } object B{ Main.b = 1 } object Main { var a: Int = 0 var b: Int = 0 def initializeByConstructor(): Int = { this.a = 0 val List(constructor) = Class.forName("example.A$").getDeclaredConstructors.toList constructor.setAccessible(true) constructor.newInstance() val result = Main.a this.a = 0 result } def initializeByMODULE_field(): Int = { this.b = 0 Class.forName("example.B$").getDeclaredField(NameTransformer.MODULE_INSTANCE_NAME).get(null) val result = Main.b this.b = 0 result } def main(args: Array[String]): Unit = { println((A, B)) println(scala.util.Properties.versionString) println(initializeByConstructor()) println(initializeByMODULE_field()) } } ``` ``` [info] version 2.12.11 [info] 1 [info] 0 ``` ``` [info] version 2.13.2 [info] 0 [info] 0 ```
1 parent 05700d6 commit 738d75d

File tree

1 file changed

+8
-4
lines changed

1 file changed

+8
-4
lines changed

common/jvm/src/main/scala/org/specs2/reflect/Classes.scala

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package org.specs2
22
package reflect
33

4-
import scala.reflect.ClassTag
4+
import scala.reflect.{ClassTag, NameTransformer}
55
import ClassName._
66
import control._
77
import scala.util.control.NonFatal
@@ -70,9 +70,13 @@ trait Classes extends ClassOperations {
7070
defaultInstances: =>List[AnyRef]): Operation[T] = {
7171

7272
constructor.setAccessible(true)
73-
if (constructor.getParameterTypes.isEmpty)
74-
newInstance(klass, constructor.newInstance())
75-
73+
if (constructor.getParameterTypes.isEmpty) {
74+
if (klass.getName.endsWith("$")) {
75+
newInstance(klass, klass.getDeclaredField(NameTransformer.MODULE_INSTANCE_NAME).get(null))
76+
} else {
77+
newInstance(klass, constructor.newInstance())
78+
}
79+
}
7680
else if (constructor.getParameterTypes.size == 1) {
7781
defaultInstances.find(i => constructor.getParameterTypes.apply(0) isAssignableFrom i.getClass) match {
7882
case None =>

0 commit comments

Comments
 (0)