diff --git a/COMMITTERS.md b/COMMITTERS.md index 3ece57ba8..9d76da1a3 100644 --- a/COMMITTERS.md +++ b/COMMITTERS.md @@ -8,12 +8,15 @@ Please see our [Project Governance](https://github.com/twitter/analytics-infra-g |------------------------|-----------------------------------------------------------| | Alex Levenson | [@isnotinvain](https://github.com/isnotinvain) | | Ben Pence | [@benpence](https://github.com/benpence) | +| Erik Osheim | [@non](https://github.com/non) | | Ian O'Connell | [@ianoc](https://github.com/ianoc) | | Joe Nievelt | [@jnievelt](https://github.com/jnievelt) | | Oscar Boykin | [@johnynek](https://github.com/johnynek) | | Pankaj Gupta | [@pankajroark](https://github.com/pankajroark) | | Piyush Narang | [@piyushnarang](https://github.com/piyushnarang) | | Ruban Monu | [@rubanm](https://github.com/rubanm) | +| Sam Ritchie | [@sritchie](https://github.com/sritchie) | | Sriram Krishnan | [@sriramkrishnan](https://github.com/sriramkrishnan) | +| Travis Brown | [@travisbrown](https://github.com/travisbrown) | -##Emeritus +## Emeritus diff --git a/bijection-core/src/main/scala/com/twitter/bijection/Bufferable.scala b/bijection-core/src/main/scala/com/twitter/bijection/Bufferable.scala index 545e6ec54..5c02321dd 100644 --- a/bijection-core/src/main/scala/com/twitter/bijection/Bufferable.scala +++ b/bijection-core/src/main/scala/com/twitter/bijection/Bufferable.scala @@ -18,10 +18,9 @@ package com.twitter.bijection import java.io.Serializable import java.nio.{ByteBuffer, BufferOverflowException} -import java.nio.channels.Channel import scala.annotation.implicitNotFound import scala.annotation.tailrec -import scala.collection.mutable.{Builder, Map => MMap, Set => MSet, Buffer => MBuffer} +import scala.collection.mutable.{Map => MMap, Set => MSet, Buffer => MBuffer} import scala.collection.generic.CanBuildFrom import scala.util.{Failure, Success, Try} import com.twitter.bijection.Inversion.attempt @@ -129,12 +128,13 @@ object Bufferable extends GeneratedTupleBufferable with Serializable { } // This automatically doubles the ByteBuffer if we get a buffer-overflow + @tailrec def reallocatingPut(bb: ByteBuffer)(putfn: (ByteBuffer) => ByteBuffer): ByteBuffer = { val init = bb.duplicate try { putfn(init) } catch { - case ex: BufferOverflowException => reallocatingPut(reallocate(bb))(putfn) + case _: BufferOverflowException => reallocatingPut(reallocate(bb))(putfn) } } diff --git a/bijection-core/src/main/scala/com/twitter/bijection/CollectionBijections.scala b/bijection-core/src/main/scala/com/twitter/bijection/CollectionBijections.scala index 173e6ad31..41de92e76 100644 --- a/bijection-core/src/main/scala/com/twitter/bijection/CollectionBijections.scala +++ b/bijection-core/src/main/scala/com/twitter/bijection/CollectionBijections.scala @@ -26,14 +26,12 @@ import java.util.{ Map => JMap, Set => JSet } -import java.util.concurrent.{ConcurrentMap => JConcurrentMap} import scala.collection.JavaConverters._ import scala.collection.mutable import collection.generic.CanBuildFrom import scala.reflect.ClassTag trait CollectionBijections extends BinaryBijections { - import Conversion.asMethod /** * Bijections between collection types defined in scala.collection.JavaConverters. diff --git a/bijection-core/src/main/scala/com/twitter/bijection/CollectionInjections.scala b/bijection-core/src/main/scala/com/twitter/bijection/CollectionInjections.scala index 2db704548..2cefab197 100644 --- a/bijection-core/src/main/scala/com/twitter/bijection/CollectionInjections.scala +++ b/bijection-core/src/main/scala/com/twitter/bijection/CollectionInjections.scala @@ -16,19 +16,6 @@ limitations under the License. package com.twitter.bijection -import java.lang.{Iterable => JIterable} -import java.util.{ - Collection => JCollection, - Dictionary => JDictionary, - Enumeration => JEnumeration, - Iterator => JIterator, - List => JList, - Map => JMap, - Set => JSet -} -import java.util.concurrent.{ConcurrentMap => JConcurrentMap} -import scala.collection.JavaConverters._ -import scala.collection.mutable import scala.collection.generic.CanBuildFrom import scala.util.{Success, Try} diff --git a/bijection-core/src/main/scala/com/twitter/bijection/InversionFailure.scala b/bijection-core/src/main/scala/com/twitter/bijection/InversionFailure.scala index f15fd425b..f10fa962d 100644 --- a/bijection-core/src/main/scala/com/twitter/bijection/InversionFailure.scala +++ b/bijection-core/src/main/scala/com/twitter/bijection/InversionFailure.scala @@ -15,7 +15,7 @@ limitations under the License. */ package com.twitter.bijection -import scala.util.{Failure, Success, Try} +import scala.util.{Failure, Try} import scala.util.control.NonFatal /** diff --git a/bijection-core/src/main/scala/com/twitter/bijection/JavaSerializationInjection.scala b/bijection-core/src/main/scala/com/twitter/bijection/JavaSerializationInjection.scala index 19150dd66..061dca097 100644 --- a/bijection-core/src/main/scala/com/twitter/bijection/JavaSerializationInjection.scala +++ b/bijection-core/src/main/scala/com/twitter/bijection/JavaSerializationInjection.scala @@ -18,8 +18,6 @@ package com.twitter.bijection import java.io._ import scala.util.{Failure, Try} -import scala.util.control.Exception.allCatch -import com.twitter.bijection.Inversion.attempt import scala.reflect.ClassTag object JavaSerializationInjection extends Serializable { diff --git a/bijection-core/src/main/scala/com/twitter/bijection/NumericBijections.scala b/bijection-core/src/main/scala/com/twitter/bijection/NumericBijections.scala index 698c1682f..d2debab98 100644 --- a/bijection-core/src/main/scala/com/twitter/bijection/NumericBijections.scala +++ b/bijection-core/src/main/scala/com/twitter/bijection/NumericBijections.scala @@ -26,11 +26,8 @@ import java.lang.{ } import java.math.BigInteger -import java.nio.ByteBuffer import java.util.UUID -import Bijection.{build, fromInjection} - trait NumericBijections extends GeneratedTupleBijections { /** diff --git a/bijection-core/src/main/scala/com/twitter/bijection/NumericInjections.scala b/bijection-core/src/main/scala/com/twitter/bijection/NumericInjections.scala index fbbced28b..ee428af08 100644 --- a/bijection-core/src/main/scala/com/twitter/bijection/NumericInjections.scala +++ b/bijection-core/src/main/scala/com/twitter/bijection/NumericInjections.scala @@ -25,9 +25,7 @@ import java.lang.{ Byte => JByte } import java.nio.ByteBuffer -import java.util.UUID import scala.util.Success -import Bijection.build import Inversion.{attempt, attemptWhen} trait NumericInjections extends GeneratedTupleInjections { diff --git a/bijection-core/src/main/scala/com/twitter/bijection/StringBijections.scala b/bijection-core/src/main/scala/com/twitter/bijection/StringBijections.scala index a635390dc..7fc79f492 100644 --- a/bijection-core/src/main/scala/com/twitter/bijection/StringBijections.scala +++ b/bijection-core/src/main/scala/com/twitter/bijection/StringBijections.scala @@ -16,9 +16,6 @@ limitations under the License. package com.twitter.bijection -import java.net.URL -import java.util.UUID - import scala.annotation.tailrec import scala.collection.generic.CanBuildFrom diff --git a/bijection-core/src/main/scala/com/twitter/bijection/StringInjections.scala b/bijection-core/src/main/scala/com/twitter/bijection/StringInjections.scala index ba69799b5..1d7d6c31e 100644 --- a/bijection-core/src/main/scala/com/twitter/bijection/StringInjections.scala +++ b/bijection-core/src/main/scala/com/twitter/bijection/StringInjections.scala @@ -21,8 +21,6 @@ import java.net.{URLDecoder, URLEncoder, URL} import java.nio.charset.{Charset, CharsetDecoder, CoderResult, CodingErrorAction} import java.nio.{ByteBuffer, CharBuffer} import java.util.UUID -import scala.annotation.tailrec -import scala.collection.generic.CanBuildFrom import scala.util.Try trait StringInjections extends NumericInjections { diff --git a/bijection-core/src/test/scala/com/twitter/bijection/BaseProperties.scala b/bijection-core/src/test/scala/com/twitter/bijection/BaseProperties.scala index dc5d5fa93..9f21d64c0 100644 --- a/bijection-core/src/test/scala/com/twitter/bijection/BaseProperties.scala +++ b/bijection-core/src/test/scala/com/twitter/bijection/BaseProperties.scala @@ -23,11 +23,8 @@ import java.io.{ ObjectInputStream, Serializable } -import java.util.Arrays import org.scalacheck.Arbitrary import org.scalacheck.Prop.forAll -import org.scalatest.prop.PropertyChecks -import org.scalatest.{PropSpec, MustMatchers} import scala.math.Equiv import scala.reflect.ClassTag import scala.util.Success @@ -141,3 +138,5 @@ trait BaseProperties { def arbitraryViaInjection[A, B](implicit inj: Injection[A, B], arb: Arbitrary[A]): Arbitrary[B] = Arbitrary { arb.arbitrary.map { inj(_) } } } + +object BaseProperties extends BaseProperties diff --git a/bijection-core/src/test/scala/com/twitter/bijection/CollectionLaws.scala b/bijection-core/src/test/scala/com/twitter/bijection/CollectionLaws.scala index 49f82eb92..87c77778b 100644 --- a/bijection-core/src/test/scala/com/twitter/bijection/CollectionLaws.scala +++ b/bijection-core/src/test/scala/com/twitter/bijection/CollectionLaws.scala @@ -83,6 +83,18 @@ class CollectionLaws extends CheckProperties with BaseProperties { isBijection[Vector[Int], IndexedSeq[Int]] } + property("Seq[Long] <=> IndexedSeq[Long]") { + isBijection[Seq[Long], IndexedSeq[Long]] + } + + property("Seq[Long] <=> List[Long]") { + isBijection[Seq[Long], List[Long]] + } + + property("IndexedSeq[Long] <=> IndexedSeq[(Int, Int)]") { + isBijection[IndexedSeq[Long], IndexedSeq[(Int, Int)]] + } + property("List[Int] <=> IndexedSeq[String @@ Rep[Int]]") { isBijection[List[Int], IndexedSeq[String @@ Rep[Int]]] } @@ -102,4 +114,16 @@ class CollectionLaws extends CheckProperties with BaseProperties { property("round trip Set[Int] -> List[String]") { isInjection[Set[Int], List[String]] } + + property("round trip Set[Int] -> Vector[String]") { + isInjection[Set[Int], Vector[String]] + } + + property("round trip List[Int] -> List[String]") { + isInjection[List[Int], List[String]] + } + + property("round trip Set[Int] -> Set[String]") { + isInjection[Set[Int], Set[String]] + } } diff --git a/bijection-core/src/test/scala/com/twitter/bijection/EnglishIntLaws.scala b/bijection-core/src/test/scala/com/twitter/bijection/EnglishIntLaws.scala index 15d1d0ced..14afdf2db 100644 --- a/bijection-core/src/test/scala/com/twitter/bijection/EnglishIntLaws.scala +++ b/bijection-core/src/test/scala/com/twitter/bijection/EnglishIntLaws.scala @@ -17,9 +17,7 @@ limitations under the License. package com.twitter.bijection import org.scalacheck.{Prop, Gen} -import org.scalacheck.Prop.forAll -import org.scalatest.{PropSpec, MustMatchers} -import org.scalatest.prop.PropertyChecks +import org.scalatest.MustMatchers import Conversion.asMethod // get the .as syntax diff --git a/bijection-core/src/test/scala/com/twitter/bijection/NumericBijectionLaws.scala b/bijection-core/src/test/scala/com/twitter/bijection/NumericBijectionLaws.scala index 08f4f77fb..e4d4d5de9 100644 --- a/bijection-core/src/test/scala/com/twitter/bijection/NumericBijectionLaws.scala +++ b/bijection-core/src/test/scala/com/twitter/bijection/NumericBijectionLaws.scala @@ -28,15 +28,17 @@ import java.lang.{ import java.math.BigInteger import java.util.UUID -import org.scalacheck.Gen -import org.scalacheck.Prop.forAll +import org.scalacheck.{ Gen, Prop } -import org.scalatest.{PropSpec, MustMatchers} -import org.scalatest.prop.PropertyChecks +import org.scalatest.{PropSpec, Tag => stTag} +import org.scalatest.prop.{ Checkers, PropertyChecks } +import Checkers.check +import PropertyChecks.forAll import Conversion.asMethod // get the .as syntax -object JavaNumArbs extends BaseProperties { +object JavaNumArbs { + import BaseProperties._ implicit val byteA = arbitraryViaFn { v: Byte => JByte.valueOf(v) @@ -61,138 +63,135 @@ object JavaNumArbs extends BaseProperties { } } -class NumericBijectionLaws - extends PropSpec - with PropertyChecks - with MustMatchers - with BaseProperties { +class NumericBijectionLaws extends PropSpec { import StringArbs._ import JavaNumArbs._ + import BaseProperties._ property("round trips byte -> jbyte") { - isBijection[Byte, JByte] + check(isBijection[Byte, JByte]) } property("round trips short -> jshort") { - isBijection[Short, JShort] + check(isBijection[Short, JShort]) } property("round trips int -> jint") { - isBijection[Int, JInt] + check(isBijection[Int, JInt]) } property("round trips long -> jlong") { - isBijection[Long, JLong] + check(isBijection[Long, JLong]) } property("round trips float -> jfloat") { - isBijection[Float, JFloat] + check(isBijection[Float, JFloat]) } property("round trips double -> jdouble") { - isBijection[Double, JDouble] + check(isBijection[Double, JDouble]) } property("round trips BigInt <-> java.math.BigInteger") { - isBijection[BigInt, BigInteger] + check(isBijection[BigInt, BigInteger]) } property("round trips byte -> string") { - isBijection[Byte, String @@ Rep[Byte]] + check(isBijection[Byte, String @@ Rep[Byte]]) } property("round trips short -> string") { - isBijection[Short, String @@ Rep[Short]] + check(isBijection[Short, String @@ Rep[Short]]) } property("round trips int -> string") { - isBijection[Int, String @@ Rep[Int]] + check(isBijection[Int, String @@ Rep[Int]]) } property("round trips long -> string") { - isBijection[Long, String @@ Rep[Long]] + check(isBijection[Long, String @@ Rep[Long]]) } property("round trips float -> string") { - isBijection[Float, String @@ Rep[Float]] + check(isBijection[Float, String @@ Rep[Float]]) } property("round trips double -> string") { - isBijection[Double, String @@ Rep[Double]] + check(isBijection[Double, String @@ Rep[Double]]) } // Embedding in larger numbers: property("round trips Short <-> (Byte,Byte)") { - isBijection[Short, (Byte, Byte)] + check(isBijection[Short, (Byte, Byte)]) } property("round trips Int <-> (Short,Short)") { - isBijection[Int, (Short, Short)] + check(isBijection[Int, (Short, Short)]) } property("round trips Long <-> (Int,Int)") { - isBijection[Long, (Int, Int)] + check(isBijection[Long, (Int, Int)]) } // Upcasting: property("byte -> short") { - isInjection[Byte, Short] + check(isInjection[Byte, Short]) } property("short -> int") { - isInjection[Short, Int] + check(isInjection[Short, Int]) } property("int -> long") { - isInjection[Int, Long] + check(isInjection[Int, Long]) } property("long -> BigInt") { - isInjection[Long, BigInt] + check(isInjection[Long, BigInt]) } property("int -> double") { - isLooseInjection[Int, Double] + check(isLooseInjection[Int, Double]) } property("float -> double") { - isLooseInjection[Float, Double] + check(isLooseInjection[Float, Double]) } // ModDiv property("Int -> (Int,Int) by ModDiv") { forAll(Gen.choose(1, Int.MaxValue)) { mod => implicit val modDiv: Injection[Int, (Int, Int)] = new IntModDivInjection(mod) - isInjection[Int, (Int, Int)] + check(isInjection[Int, (Int, Int)]) } } property("Long -> (Long,Long) by ModDiv") { forAll(Gen.choose(1L, Long.MaxValue)) { mod => implicit val modDiv: Injection[Long, (Long, Long)] = new LongModDivInjection(mod) - isInjection[Long, (Long, Long)] + check(isInjection[Long, (Long, Long)]) } } // TODO need Rep[Int], etc... on the Array[Byte] property("round trips short -> Array[Byte]") { - isLooseInjection[Short, Array[Byte]] + check(isLooseInjection[Short, Array[Byte]]) } property("round trips int -> Array[Byte]") { - isLooseInjection[Int, Array[Byte]] + check(isLooseInjection[Int, Array[Byte]]) } property("round trips long -> Array[Byte]") { - isLooseInjection[Long, Array[Byte]] + check(isLooseInjection[Long, Array[Byte]]) } property("round trips float -> Array[Byte]") { - isLooseInjection[Float, Array[Byte]] + check(isLooseInjection[Float, Array[Byte]]) } property("round trips double -> Array[Byte]") { - isLooseInjection[Double, Array[Byte]] + check(isLooseInjection[Double, Array[Byte]]) } // Some other types through numbers: @@ -203,11 +202,11 @@ class NumericBijectionLaws new java.util.Date(dtime) } property("round trips (Long,Long) -> UUID") { - isBijection[(Long, Long), UUID] + check(isBijection[(Long, Long), UUID]) } property("round trips Long -> Date") { - isBijection[Long, java.util.Date] + check(isBijection[Long, java.util.Date]) } property("as works") { diff --git a/bijection-core/src/test/scala/com/twitter/bijection/StringBijectionLaws.scala b/bijection-core/src/test/scala/com/twitter/bijection/StringBijectionLaws.scala index b698d87aa..aa78f167e 100644 --- a/bijection-core/src/test/scala/com/twitter/bijection/StringBijectionLaws.scala +++ b/bijection-core/src/test/scala/com/twitter/bijection/StringBijectionLaws.scala @@ -26,7 +26,8 @@ import org.scalatest.FunSuite import scala.util.Try -object StringArbs extends BaseProperties { +object StringArbs { + import BaseProperties._ implicit val strByte = arbitraryViaBijection[Byte, String @@ Rep[Byte]] implicit val strShort = arbitraryViaBijection[Short, String @@ Rep[Short]] diff --git a/bijection-core/src/test/scala/com/twitter/bijection/TupleBijectionLaws.scala b/bijection-core/src/test/scala/com/twitter/bijection/TupleBijectionLaws.scala index 238c5e72f..4824d66d7 100644 --- a/bijection-core/src/test/scala/com/twitter/bijection/TupleBijectionLaws.scala +++ b/bijection-core/src/test/scala/com/twitter/bijection/TupleBijectionLaws.scala @@ -16,18 +16,6 @@ limitations under the License. package com.twitter.bijection -import java.lang.{ - Short => JShort, - Integer => JInt, - Long => JLong, - Float => JFloat, - Double => JDouble, - Byte => JByte -} - -import org.scalatest.{PropSpec, MustMatchers} -import org.scalatest.prop.PropertyChecks - class TupleBijectionLaws extends CheckProperties with BaseProperties { import StringArbs._ diff --git a/build.sbt b/build.sbt index 51039964b..847c3d9ce 100644 --- a/build.sbt +++ b/build.sbt @@ -19,17 +19,17 @@ val scroogeSerializerVersion = "4.13.0" def util(mod: String, scalaVersion: String) = { val version = versionFallback(scalaVersion, utilVersion210, utilVersion) - "com.twitter" %% (s"util-$mod") % version + "com.twitter" %% (s"util-$mod") % version % "provided" } def finagle(mod: String, scalaVersion: String) = { val version = versionFallback(scalaVersion, finagleVersion210, finagleVersion) - "com.twitter" %% (s"finagle-$mod") % version + "com.twitter" %% (s"finagle-$mod") % version % "provided" } def scroogeSerializer(scalaVersion: String) = { val version = versionFallback(scalaVersion, scroogeSerializerVersion210, scroogeSerializerVersion) - "com.twitter" %% "scrooge-serializer" % version + "com.twitter" %% "scrooge-serializer" % version % "provided" } def versionFallback(scalaVersion: String, packageVersion210: String, version: String) = { @@ -280,7 +280,7 @@ lazy val bijectionScrooge = { "org.apache.thrift" % "libthrift" % "0.6.1" exclude ("junit", "junit"), scroogeSerializer(scalaVersion.value), util("core", scalaVersion.value), - finagle("core", scalaVersion.value) % "test" + finagle("core", scalaVersion.value) ) ).dependsOn( bijectionCore % "test->test;compile->compile", diff --git a/project/build.properties b/project/build.properties index 27e88aa11..c091b86ca 100644 --- a/project/build.properties +++ b/project/build.properties @@ -1 +1 @@ -sbt.version=0.13.13 +sbt.version=0.13.16 diff --git a/project/plugins.sbt b/project/plugins.sbt index 3ff8bcaf1..935c58e92 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -2,10 +2,10 @@ resolvers ++= Seq( "jgit-repo" at "http://download.eclipse.org/jgit/maven" ) -addSbtPlugin("com.github.gseitz" % "sbt-release" % "1.0.3") +addSbtPlugin("com.github.gseitz" % "sbt-release" % "1.0.6") addSbtPlugin("com.eed3si9n" % "sbt-doge" % "0.1.5") -addSbtPlugin("com.jsuereth" % "sbt-pgp" % "1.0.0") -addSbtPlugin("com.typesafe" % "sbt-mima-plugin" % "0.1.12") +addSbtPlugin("com.jsuereth" % "sbt-pgp" % "1.1.0") +addSbtPlugin("com.typesafe" % "sbt-mima-plugin" % "0.1.17") addSbtPlugin("com.typesafe.sbt" % "sbt-ghpages" % "0.5.4") addSbtPlugin("com.typesafe.sbt" % "sbt-osgi" % "0.8.0") addSbtPlugin("org.scoverage" % "sbt-scoverage" % "1.5.0") diff --git a/version.sbt b/version.sbt index 1d2b81528..e82bdc0d4 100644 --- a/version.sbt +++ b/version.sbt @@ -1 +1 @@ -version in ThisBuild := "0.9.5" +version in ThisBuild := "0.9.6"