Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Follow JDK 11+ spec for signature polymorphic methods #9530

Merged
merged 1 commit into from Mar 4, 2021

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
Projects
None yet
5 participants