Skip to content

Follow JDK 11+ spec for signature polymorphic methods#9530

Merged
lrytz merged 1 commit intoscala:2.13.xfrom
lrytz:t12348
Mar 4, 2021
Merged

Follow JDK 11+ spec for signature polymorphic methods#9530
lrytz merged 1 commit intoscala:2.13.xfrom
lrytz:t12348

Conversation

@lrytz
Copy link
Member

@lrytz lrytz commented Mar 3, 2021

No test case because JDK 11...

Fixes scala/bug#12348

@lrytz lrytz requested a review from retronym March 3, 2021 19:01
@scala-jenkins scala-jenkins added this to the 2.13.6 milestone Mar 3, 2021
@SethTisue SethTisue self-assigned this Mar 3, 2021
val resultType =
if (fun.symbol.tpe.resultType.typeSymbol != ObjectClass) fun.symbol.tpe.resultType
else if (isFullyDefined(pt)) pt
else ObjectTpe
Copy link
Member

@retronym retronym Mar 3, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for this, I'd just noticed a problem here yesterday!

Before:

scala> import java.lang.invoke._
import java.lang.invoke._

scala> class Data { var a: Int = 0; def aHandle = MethodHandles.lookup().findVarHandle(getClass, "a", classOf[Int])}
defined class Data

scala>

scala> val d = new Data
d: Data = Data@15c4b1a4

scala>  d.aHandle.set(d, 2)
java.lang.NoSuchMethodError: VarHandle.set(Data,int)Object
  at java.base/java.lang.invoke.MethodHandleNatives.newNoSuchMethodErrorOnVarHandle(MethodHandleNatives.java:589)
  at java.base/java.lang.invoke.MethodHandleNatives.varHandleOperationLinkerMethod(MethodHandleNatives.java:542)
  at java.base/java.lang.invoke.MethodHandleNatives.linkMethodImpl(MethodHandleNatives.java:475)
  at java.base/java.lang.invoke.MethodHandleNatives.linkMethod(MethodHandleNatives.java:463)
  ... 28 elided

scala>  d.aHandle.set(d, 2): Unit // workaround, fully define expected type as Unit

scala> d.a
res2: Int = 2

With your PR:

scala> d.aHandle.set(d, 2)

scala> d.a
val res9: Int = 2

@lrytz lrytz merged commit 262f6e9 into scala:2.13.x Mar 4, 2021
@SethTisue SethTisue removed their assignment Mar 4, 2021
@szegedi
Copy link

szegedi commented Mar 4, 2021

Thanks, @lrytz!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Can't invoke VarHandle.setVolatile from Scala

5 participants