Skip to content

Commit 2eebb70

Browse files
Merge pull request #6277 from dotty-staging/samMethod-safety
Add safety checks to `samMethod`
2 parents 58d5dca + 833a71e commit 2eebb70

File tree

80 files changed

+87
-81
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

80 files changed

+87
-81
lines changed

compiler/src/dotty/tools/backend/jvm/DottyBackendInterface.scala

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -841,8 +841,14 @@ class DottyBackendInterface(outputDirectory: AbstractFile, val superCallsMap: Ma
841841

842842
def addRemoteRemoteExceptionAnnotation: Unit = ()
843843

844-
def samMethod(): Symbol =
845-
toDenot(sym).info.abstractTermMembers.headOption.getOrElse(toDenot(sym).info.member(nme.apply)).symbol
844+
def samMethod(): Symbol = ctx.atPhase(ctx.erasurePhase) { implicit ctx =>
845+
toDenot(sym).info.abstractTermMembers.toList match {
846+
case x :: Nil => x.symbol
847+
case Nil => abort(s"${sym.show} is not a functional interface. It doesn't have abstract methods")
848+
case xs => abort(s"${sym.show} is not a functional interface. " +
849+
s"It has the following abstract methods: ${xs.map(_.name).mkString(", ")}")
850+
}
851+
}
846852

847853
def isFunctionClass: Boolean =
848854
defn.isFunctionClass(sym)

library/src/dotty/runtime/function/JFunction1$mcDD$sp.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
package dotty.runtime.function;
77

88
@FunctionalInterface
9-
public interface JFunction1$mcDD$sp extends JFunction1 {
9+
public interface JFunction1$mcDD$sp extends JFunction1<Object, Object> {
1010
abstract double apply$mcDD$sp(double v1);
1111

1212
default Object apply(Object t) { return (Double) apply$mcDD$sp(scala.runtime.BoxesRunTime.unboxToDouble(t)); }

library/src/dotty/runtime/function/JFunction1$mcDF$sp.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
package dotty.runtime.function;
77

88
@FunctionalInterface
9-
public interface JFunction1$mcDF$sp extends JFunction1 {
9+
public interface JFunction1$mcDF$sp extends JFunction1<Object, Object> {
1010
abstract double apply$mcDF$sp(float v1);
1111

1212
default Object apply(Object t) { return (Double) apply$mcDF$sp(scala.runtime.BoxesRunTime.unboxToFloat(t)); }

library/src/dotty/runtime/function/JFunction1$mcDI$sp.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
package dotty.runtime.function;
77

88
@FunctionalInterface
9-
public interface JFunction1$mcDI$sp extends JFunction1 {
9+
public interface JFunction1$mcDI$sp extends JFunction1<Object, Object> {
1010
abstract double apply$mcDI$sp(int v1);
1111

1212
default Object apply(Object t) { return (Double) apply$mcDI$sp(scala.runtime.BoxesRunTime.unboxToInt(t)); }

library/src/dotty/runtime/function/JFunction1$mcDJ$sp.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
package dotty.runtime.function;
77

88
@FunctionalInterface
9-
public interface JFunction1$mcDJ$sp extends JFunction1 {
9+
public interface JFunction1$mcDJ$sp extends JFunction1<Object, Object> {
1010
abstract double apply$mcDJ$sp(long v1);
1111

1212
default Object apply(Object t) { return (Double) apply$mcDJ$sp(scala.runtime.BoxesRunTime.unboxToLong(t)); }

library/src/dotty/runtime/function/JFunction1$mcFD$sp.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
package dotty.runtime.function;
77

88
@FunctionalInterface
9-
public interface JFunction1$mcFD$sp extends JFunction1 {
9+
public interface JFunction1$mcFD$sp extends JFunction1<Object, Object> {
1010
abstract float apply$mcFD$sp(double v1);
1111

1212
default Object apply(Object t) { return (Float) apply$mcFD$sp(scala.runtime.BoxesRunTime.unboxToDouble(t)); }

library/src/dotty/runtime/function/JFunction1$mcFF$sp.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
package dotty.runtime.function;
77

88
@FunctionalInterface
9-
public interface JFunction1$mcFF$sp extends JFunction1 {
9+
public interface JFunction1$mcFF$sp extends JFunction1<Object, Object> {
1010
abstract float apply$mcFF$sp(float v1);
1111

1212
default Object apply(Object t) { return (Float) apply$mcFF$sp(scala.runtime.BoxesRunTime.unboxToFloat(t)); }

library/src/dotty/runtime/function/JFunction1$mcFI$sp.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
package dotty.runtime.function;
77

88
@FunctionalInterface
9-
public interface JFunction1$mcFI$sp extends JFunction1 {
9+
public interface JFunction1$mcFI$sp extends JFunction1<Object, Object> {
1010
abstract float apply$mcFI$sp(int v1);
1111

1212
default Object apply(Object t) { return (Float) apply$mcFI$sp(scala.runtime.BoxesRunTime.unboxToInt(t)); }

library/src/dotty/runtime/function/JFunction1$mcFJ$sp.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
package dotty.runtime.function;
77

88
@FunctionalInterface
9-
public interface JFunction1$mcFJ$sp extends JFunction1 {
9+
public interface JFunction1$mcFJ$sp extends JFunction1<Object, Object> {
1010
abstract float apply$mcFJ$sp(long v1);
1111

1212
default Object apply(Object t) { return (Float) apply$mcFJ$sp(scala.runtime.BoxesRunTime.unboxToLong(t)); }

library/src/dotty/runtime/function/JFunction1$mcID$sp.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
package dotty.runtime.function;
77

88
@FunctionalInterface
9-
public interface JFunction1$mcID$sp extends JFunction1 {
9+
public interface JFunction1$mcID$sp extends JFunction1<Object, Object> {
1010
abstract int apply$mcID$sp(double v1);
1111

1212
default Object apply(Object t) { return (Integer) apply$mcID$sp(scala.runtime.BoxesRunTime.unboxToDouble(t)); }

0 commit comments

Comments
 (0)