Ivan
Ivan

Reputation: 64207

What does "reflective access of structural type member method should be enabled..." warning mean in Scala?

After switching to Scala 2.10 I get tons of warnings:

reflective access of structural type member method ... should be enabled by making the implicit value language.reflectiveCalls visible

What does it mean?

Upvotes: 17

Views: 5768

Answers (3)

Matthew
Matthew

Reputation: 11

I ran into this warning with a function I was using to divide an Option[Double or Long] by 100:

  def safeDivideBy100[T <: AnyVal { def toDouble: Double }](number: Option[T]): Option[Double] =
     number match {
       case None    => None
       case Some(x) => Some(x.toDouble / 100)
     }

Fixing it simply required adding to the top of the file:

import scala.language.reflectiveCalls

Upvotes: 1

Eugene Burmako
Eugene Burmako

Reputation: 13048

The warning actually tells where to look in the documentation for an explanation:

Test.scala:9: warning: reflective access of structural type member method y should be enabled
by making the implicit value language.reflectiveCalls visible.
This can be achieved by adding the import clause 'import scala.language.reflectiveCalls'
or by setting the compiler option -language:reflectiveCalls.
See the Scala docs for value scala.language.reflectiveCalls for a discussion
why the feature should be explicitly enabled.

Referenced Scaladoc entry (be sure to click the |> arrow to the left to expand the documentation entry).

Upvotes: 18

Gil Zhaiek
Gil Zhaiek

Reputation: 31

From Scala Docs:

Why control it? Reflection is not available on all platforms. Popular tools such as ProGuard have problems dealing with it. Even where reflection is available, reflective dispatch can lead to surprising performance degradations.

Think about this code that uses an anonymous subclass:

class Student(val id:Int)
val specialStudent = new Student(0) {
   val greeting = "I am a special student with id " + id // Warning: id can be obfuscated
} 

Link to Scala Docs

Upvotes: 3

Related Questions