diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2013-05-17 02:40:02 -0700 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2013-05-17 02:40:02 -0700 |
commit | 4f8c306aca703c63282295c9f74f0cb35f9f85d4 (patch) | |
tree | fb66db2a855fb55b07b1c7300378db7c21772fe0 /src | |
parent | 7415430ca7f7995f870dd81b2f020afeeb6e316e (diff) | |
parent | 5e715396af47cc96d6bada426d1e496934011599 (diff) | |
download | scala-4f8c306aca703c63282295c9f74f0cb35f9f85d4.tar.gz scala-4f8c306aca703c63282295c9f74f0cb35f9f85d4.tar.bz2 scala-4f8c306aca703c63282295c9f74f0cb35f9f85d4.zip |
Merge pull request #2504 from scalamacros/ticket/7464
SI-7464 allows FieldMirror.set to update vals
Diffstat (limited to 'src')
-rw-r--r-- | src/reflect/scala/reflect/api/Mirrors.scala | 4 | ||||
-rw-r--r-- | src/reflect/scala/reflect/runtime/JavaMirrors.scala | 4 |
2 files changed, 4 insertions, 4 deletions
diff --git a/src/reflect/scala/reflect/api/Mirrors.scala b/src/reflect/scala/reflect/api/Mirrors.scala index d0d8a37584..76a75940ff 100644 --- a/src/reflect/scala/reflect/api/Mirrors.scala +++ b/src/reflect/scala/reflect/api/Mirrors.scala @@ -133,9 +133,7 @@ package api * scala> fmX.get * res0: Any = 2 * - * scala> fmX.set(3) - * scala.ScalaReflectionException: cannot set an immutable field x - * ... + * scala> fmX.set(3) // NOTE: can set an underlying value of an immutable field! * * scala> val fieldY = typeOf[C].declaration(newTermName("y")).asTerm.accessed.asTerm * fieldY: reflect.runtime.universe.TermSymbol = variable y diff --git a/src/reflect/scala/reflect/runtime/JavaMirrors.scala b/src/reflect/scala/reflect/runtime/JavaMirrors.scala index 3442e3d22e..09b07bb2c7 100644 --- a/src/reflect/scala/reflect/runtime/JavaMirrors.scala +++ b/src/reflect/scala/reflect/runtime/JavaMirrors.scala @@ -133,6 +133,7 @@ private[reflect] trait JavaMirrors extends internal.SymbolTable with api.JavaUni sm"""Scala field ${sym.name} isn't represented as a Java field, neither it has a Java accessor method |note that private parameters of class constructors don't get mapped onto fields and/or accessors, |unless they are used outside of their declaring constructors.""") + @deprecated("corresponding check has been removed from FieldMirror.set, this method is also being phased out", "2.11.0") private def ErrorSetImmutableField(sym: Symbol) = throw new ScalaReflectionException(s"cannot set an immutable field ${sym.name}") private def ErrorNotConstructor(sym: Symbol, owner: Symbol) = throw new ScalaReflectionException(s"expected a constructor of $owner, you provided $sym") private def ErrorFree(member: Symbol, freeType: Symbol) = throw new ScalaReflectionException(s"cannot reflect ${member.kindString} ${member.name}, because it's a member of a weak type ${freeType.name}") @@ -282,7 +283,8 @@ private[reflect] trait JavaMirrors extends internal.SymbolTable with api.JavaUni } def get = jfield.get(receiver) def set(value: Any) = { - if (!symbol.isMutable) ErrorSetImmutableField(symbol) + // it appears useful to be able to set values of vals, therefore I'm disabling this check + // if (!symbol.isMutable) ErrorSetImmutableField(symbol) jfield.set(receiver, value) } override def toString = s"field mirror for ${symbol.fullName} (bound to $receiver)" |