From 6058d2000c5e5b0f86baaa9df02b16ee368764c3 Mon Sep 17 00:00:00 2001 From: Nicolas Stucki Date: Wed, 17 Oct 2018 12:47:14 +0200 Subject: [PATCH 1/2] Fix #5270: Make TupleXXL extend Product --- library/src/scala/TupleXXL.scala | 7 ++++++- tests/{pending => run}/tuple-erased.scala | 0 2 files changed, 6 insertions(+), 1 deletion(-) rename tests/{pending => run}/tuple-erased.scala (100%) diff --git a/library/src/scala/TupleXXL.scala b/library/src/scala/TupleXXL.scala index fe46225a206b..35cba3dbed6a 100644 --- a/library/src/scala/TupleXXL.scala +++ b/library/src/scala/TupleXXL.scala @@ -1,10 +1,15 @@ package scala import java.util.Arrays.{deepEquals, deepHashCode} -final class TupleXXL private (es: Array[Object]) { +final class TupleXXL private (es: Array[Object]) extends Product { assert(es.length > 22) + + def productElement(n: Int): Any = es(n) + def productArity: Int = es.length + override def toString = elems.mkString("(", ",", ")") override def hashCode = getClass.hashCode * 41 + deepHashCode(elems) + override def canEqual(that: Any): Boolean = that.isInstanceOf[TupleXXL] override def equals(that: Any) = that match { case that: TupleXXL => deepEquals(this.elems, that.elems) case _ => false diff --git a/tests/pending/tuple-erased.scala b/tests/run/tuple-erased.scala similarity index 100% rename from tests/pending/tuple-erased.scala rename to tests/run/tuple-erased.scala From 747a6079d9ba9546ae67739c40b1fc855fd00e0c Mon Sep 17 00:00:00 2001 From: Nicolas Stucki Date: Wed, 17 Oct 2018 15:15:22 +0200 Subject: [PATCH 2/2] Improve TupleXXL canEqual --- library/src/scala/TupleXXL.scala | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/library/src/scala/TupleXXL.scala b/library/src/scala/TupleXXL.scala index 35cba3dbed6a..cb79ff68a4a8 100644 --- a/library/src/scala/TupleXXL.scala +++ b/library/src/scala/TupleXXL.scala @@ -9,7 +9,11 @@ final class TupleXXL private (es: Array[Object]) extends Product { override def toString = elems.mkString("(", ",", ")") override def hashCode = getClass.hashCode * 41 + deepHashCode(elems) - override def canEqual(that: Any): Boolean = that.isInstanceOf[TupleXXL] + override def canEqual(that: Any): Boolean = that match { + case that: TupleXXL => that.productArity == this.productArity + case _ => false + } + override def equals(that: Any) = that match { case that: TupleXXL => deepEquals(this.elems, that.elems) case _ => false