binary compat

53 views
Skip to first unread message

Paul Phillips

unread,
Feb 2, 2013, 3:44:09 PM2/2/13
to scala-i...@googlegroups.com
Just a little mood music. I need to take some time off from the github churn to work on something else. I'll be scarce until mid-next-week (when I come to SF.) Try not to commit anything too exciting in the absence of my obstructionism.

% mima --prev /scala/inst/210/lib/scala-library.jar --curr /packs/scala-v2.10.0-458-gad2a69e313/pack/lib/scala-library.jar

Found 8 binary incompatibiities
===============================
 * synthetic method
   scala$collection$immutable$Stream$$loop$5(Int,Int,scala.Function1)scala.collection.immutable.Stream
   in object scala.collection.immutable.Stream does not have a correspondent in
   new version
 * synthetic method
   scala$collection$immutable$Stream$$loop$4(Int,scala.collection.immutable.Stream,java.lang.Object)scala.collection.immutable.Stream
   in class scala.collection.immutable.Stream does not have a correspondent in
   new version
 * class scala.collection.immutable.Vector#VectorReusableCBF does not have a
   correspondent in new version
 * class scala.collection.generic.GenTraversableFactory#ReusableCBF does not
   have a correspondent in new version
 * method :+(java.lang.Object,scala.reflect.ClassTag)java.lang.Object in
   trait scala.collection.mutable.ArrayOps does not have a correspondent in old
   version
 * method +:(java.lang.Object,scala.reflect.ClassTag)java.lang.Object in
   trait scala.collection.mutable.ArrayOps does not have a correspondent in old
   version
 * synthetic method
   scala$collection$mutable$PriorityQueueProxy$$super$ord()scala.math.Ordering
   in class scala.collection.mutable.PriorityQueueProxy does not have a
   correspondent in new version
 * synthetic method scala$util$parsing$input$StreamReader$$super$offset()Int
   in class scala.util.parsing.input.StreamReader does not have a correspondent
   in new version

% mima --prev /scala/inst/210/lib/scala-reflect.jar --curr /packs/scala-v2.10.0-458-gad2a69e313/pack/lib/scala-reflect.jar

Found 35 binary incompatibiities
================================
 * method
   initClassModule(scala.reflect.internal.Symbols#Symbol,scala.reflect.internal.Symbols#Symbol,scala.reflect.internal.Types#LazyType)Unit
   in class scala.reflect.runtime.JavaUniverse does not have a correspondent in
   new version
 * method
   createClassModule(scala.reflect.internal.Symbols#Symbol,scala.reflect.internal.Names#TypeName,scala.Function2)scala.Tuple2
   in class scala.reflect.runtime.JavaUniverse does not have a correspondent in
   new version
 * synthetic method
   scala$reflect$runtime$JavaMirrors$JavaMirror$JavaBytecodelessMethodMirror$$super$symbol()scala.reflect.internal.Symbols#MethodSymbol
   in class
   scala.reflect.runtime.JavaMirrors#JavaMirror#JavaBytecodelessMethodMirror
   does not have a correspondent in new version
 * synthetic method
   scala$reflect$runtime$JavaMirrors$JavaMirror$$jclassAsScala(java.lang.Class,scala.reflect.internal.Symbols#Symbol)scala.reflect.internal.Symbols#ClassSymbol
   in class scala.reflect.runtime.JavaMirrors#JavaMirror does not have a
   correspondent in new version
 * synthetic method
   scala$reflect$runtime$JavaMirrors$JavaMirror$$jclassAsScala(java.lang.Class)scala.reflect.internal.Symbols#Symbol
   in class scala.reflect.runtime.JavaMirrors#JavaMirror has now a different
   result type; was: scala.reflect.internal.Symbols#Symbol, is now:
   scala.reflect.internal.Symbols#ClassSymbol
 * method
   initClassModule(scala.reflect.internal.Symbols#Symbol,scala.reflect.internal.Symbols#Symbol,scala.reflect.internal.Types#LazyType)Unit
   in trait scala.reflect.runtime.SymbolLoaders does not have a correspondent
   in new version
 * method
   createClassModule(scala.reflect.internal.Symbols#Symbol,scala.reflect.internal.Names#TypeName,scala.Function2)scala.Tuple2
   in trait scala.reflect.runtime.SymbolLoaders does not have a correspondent
   in new version
 * method
   initClassAndModule(scala.reflect.internal.Symbols#Symbol,scala.reflect.internal.Symbols#Symbol,scala.reflect.internal.Types#LazyType)Unit
   in trait scala.reflect.runtime.SymbolLoaders does not have a correspondent
   in old version
 * method
   initAndEnterClassAndModule(scala.reflect.internal.Symbols#Symbol,scala.reflect.internal.Names#TypeName,scala.Function2)scala.Tuple2
   in trait scala.reflect.runtime.SymbolLoaders does not have a correspondent
   in old version
 * method
   typeArguments(scala.reflect.internal.Trees#Tree)scala.collection.immutable.List
   in class scala.reflect.internal.TreeInfo does not have a correspondent in
   new version
 * synthetic method
   scala$reflect$internal$TreeInfo$$isVarPatternDeep0$1(scala.reflect.internal.Trees#Tree)Boolean
   in class scala.reflect.internal.TreeInfo does not have a correspondent in
   new version
 * method applyDepth(scala.reflect.internal.Trees#Tree)Int in class
   scala.reflect.internal.TreeInfo does not have a correspondent in new version
 * method
   firstTypeArg(scala.reflect.internal.Trees#Tree)scala.reflect.internal.Trees#Tree
   in class scala.reflect.internal.TreeInfo does not have a correspondent in
   new version
 * method
   methPart(scala.reflect.internal.Trees#Tree)scala.reflect.internal.Trees#Tree
   in class scala.reflect.internal.TreeInfo does not have a correspondent in
   new version
 * method
   firstArgument(scala.reflect.internal.Trees#Tree)scala.reflect.internal.Trees#Tree
   in class scala.reflect.internal.TreeInfo does not have a correspondent in
   new version
 * method
   New(scala.reflect.internal.Types#Type,scala.collection.immutable.List)scala.reflect.internal.Trees#Tree
   in trait scala.reflect.internal.Trees does not have a correspondent in old
   version
 * method pendingSuperCall()scala.reflect.internal.Trees#pendingSuperCall#
   in trait scala.reflect.internal.Trees does not have a correspondent in old
   version
 * method deAlias()scala.reflect.internal.Types#deAlias# in class
   scala.reflect.internal.SymbolTable does not have a correspondent in new
   version
 * method changeOwner(scala.reflect.internal.Trees#Tree)Unit in class
   scala.reflect.internal.Trees#ChangeOwnerTraverser does not have a
   correspondent in new version
 * method
   setAttachments(scala.reflect.macros.Attachments)scala.reflect.internal.StdAttachments#Attachable
   in trait scala.reflect.internal.StdAttachments#Attachable does not have a
   correspondent in old version
 * method emptyValDef()scala.reflect.api.Trees#TreeApi in class
   scala.reflect.internal.BuildUtils#BuildImpl does not have a correspondent in
   new version
 * method emptyValDef()scala.reflect.internal.Trees#ValDef in class
   scala.reflect.internal.BuildUtils#BuildImpl does not have a correspondent in
   new version
 * method
   SuppressMacroExpansionAttachment()scala.reflect.internal.StdAttachments#SuppressMacroExpansionAttachment#
   in trait scala.reflect.internal.StdAttachments does not have a correspondent
   in old version
 * synthetic method
   scala$reflect$internal$Types$TypeVar$$addBound$1(scala.reflect.internal.Types#Type,Boolean,Boolean)Unit
   in class scala.reflect.internal.Types#TypeVar does not have a correspondent
   in new version
 * method deAlias()scala.reflect.internal.Types#deAlias# in trait
   scala.reflect.internal.Types does not have a correspondent in new version
 * method
   nonTrivialMembers(scala.reflect.internal.Symbols#Symbol)scala.collection.Iterable
   in trait scala.reflect.internal.Types does not have a correspondent in old
   version
 * method
   inheritsJavaVarArgsMethod(scala.reflect.internal.Symbols#Symbol)Boolean in
   trait scala.reflect.internal.Types does not have a correspondent in old
   version
 * method
   isJavaVarargsAncestor(scala.reflect.internal.Symbols#Symbol)Boolean in trait
   scala.reflect.internal.Types does not have a correspondent in old version
 * method normalizeAliases()scala.reflect.internal.Types#normalizeAliases#
   in trait scala.reflect.internal.Types does not have a correspondent in old
   version
 * synthetic method
   scala$reflect$internal$util$Statistics$RelCounter$$super$prefix()java.lang.String
   in class scala.reflect.internal.util.Statistics#RelCounter does not have a
   correspondent in new version
 * abstract method
   companionsInPkgObjs()scala.reflect.internal.settings.MutableSettings#SettingValue
   in class scala.reflect.internal.settings.MutableSettings does not have a
   correspondent in old version
 * class scala.reflect.macros.Attachments#NonemptyAttachments does not have
   a correspondent in new version
 * method pendingSuperCall()scala.reflect.api.Trees#TreeApi in trait
   scala.reflect.api.Trees does not have a correspondent in old version
 * method canHaveAttrs()Boolean in trait scala.reflect.api.Trees#TreeApi
   does not have a correspondent in old version
 * abstract method emptyValDef()scala.reflect.api.Trees#TreeApi in class
   scala.reflect.api.BuildUtils#BuildApi does not have a correspondent in new
   version

Eugene Burmako

unread,
Feb 2, 2013, 3:52:22 PM2/2/13
to <scala-internals@googlegroups.com>
Is it possible to filter out certain packages? From what I remember we decided to ignore compatibility issues for scala.reflect.internal and scala.reflect.runtime.


--
You received this message because you are subscribed to the Google Groups "scala-internals" group.
To unsubscribe from this group and stop receiving emails from it, send an email to scala-interna...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

Jason Zaugg

unread,
Feb 2, 2013, 4:02:14 PM2/2/13
to scala-i...@googlegroups.com
On Sat, Feb 2, 2013 at 9:44 PM, Paul Phillips <pa...@improving.org> wrote:
Just a little mood music. I need to take some time off from the github churn to work on something else. I'll be scarce until mid-next-week (when I come to SF.) Try not to commit anything too exciting in the absence of my obstructionism.

% mima --prev /scala/inst/210/lib/scala-library.jar --curr /packs/scala-v2.10.0-458-gad2a69e313/pack/lib/scala-library.jar

Found 8 binary incompatibiities
===============================
 
 * synthetic method
   scala$collection$immutable$Stream$$loop$5(Int,Int,scala.Function1)scala.collection.immutable.Stream
   in object scala.collection.immutable.Stream does not have a correspondent in
   new version
 * synthetic method
   scala$collection$immutable$Stream$$loop$4(Int,scala.collection.immutable.Stream,java.lang.Object)scala.collection.immutable.Stream
   in class scala.collection.immutable.Stream does not have a correspondent in
   new version

Spurious, to my mind, should only be called within Stream.
 
 * class scala.collection.immutable.Vector#VectorReusableCBF does not have a
   correspondent in new version
 * class scala.collection.generic.GenTraversableFactory#ReusableCBF does not
   have a correspondent in new version

 
 * method :+(java.lang.Object,scala.reflect.ClassTag)java.lang.Object in
   trait scala.collection.mutable.ArrayOps does not have a correspondent in old
   version
 * method +:(java.lang.Object,scala.reflect.ClassTag)java.lang.Object in
   trait scala.collection.mutable.ArrayOps does not have a correspondent in old
   version

 
 * synthetic method
   scala$collection$mutable$PriorityQueueProxy$$super$ord()scala.math.Ordering
   in class scala.collection.mutable.PriorityQueueProxy does not have a
   correspondent in new version
 * synthetic method scala$util$parsing$input$StreamReader$$super$offset()Int
   in class scala.util.parsing.input.StreamReader does not have a correspondent
   in new version

Is anyone bothered by these?
 

% mima --prev /scala/inst/210/lib/scala-reflect.jar --curr /packs/scala-v2.10.0-458-gad2a69e313/pack/lib/scala-reflect.jar

Found 35 binary incompatibiities
================================
 * method
   initClassModule(scala.reflect.internal.Symbols#Symbol,scala.reflect.internal.Symbols#Symbol,scala.reflect.internal.Types#LazyType)Unit
   in class scala.reflect.runtime.JavaUniverse does not have a correspondent in
   new version
 * method
   createClassModule(scala.reflect.internal.Symbols#Symbol,scala.reflect.internal.Names#TypeName,scala.Function2)scala.Tuple2
   in class scala.reflect.runtime.JavaUniverse does not have a correspondent in
   new version

I propose that we document reflect.internal as non binary compatible (forward or backward). We discussed this a bit over on the recent @compileTimeOnly pull request. https://github.com/scala/scala/pull/2019
 
 * synthetic method
   scala$reflect$runtime$JavaMirrors$JavaMirror$JavaBytecodelessMethodMirror$$super$symbol()scala.reflect.internal.Symbols#MethodSymbol
   in class
   scala.reflect.runtime.JavaMirrors#JavaMirror#JavaBytecodelessMethodMirror
   does not have a correspondent in new version
 * synthetic method
   scala$reflect$runtime$JavaMirrors$JavaMirror$$jclassAsScala(java.lang.Class,scala.reflect.internal.Symbols#Symbol)scala.reflect.internal.Symbols#ClassSymbol
   in class scala.reflect.runtime.JavaMirrors#JavaMirror does not have a
   correspondent in new version
 * synthetic method
   scala$reflect$runtime$JavaMirrors$JavaMirror$$jclassAsScala(java.lang.Class)scala.reflect.internal.Symbols#Symbol
   in class scala.reflect.runtime.JavaMirrors#JavaMirror has now a different
   result type; was: scala.reflect.internal.Symbols#Symbol, is now:
   scala.reflect.internal.Symbols#ClassSymbol

More synthetics.
More internal._

 
 * method emptyValDef()scala.reflect.api.Trees#TreeApi in class
   scala.reflect.internal.BuildUtils#BuildImpl does not have a correspondent in
   new version

Eugene: can we leave this one out of `api`?
internal...
 
 * class scala.reflect.macros.Attachments#NonemptyAttachments does not have
   a correspondent in new version

A formerly nested private class, now top-level private.
 
 * method pendingSuperCall()scala.reflect.api.Trees#TreeApi in trait
   scala.reflect.api.Trees does not have a correspondent in old version
 * method canHaveAttrs()Boolean in trait scala.reflect.api.Trees#TreeApi
   does not have a correspondent in old version
 * abstract method emptyValDef()scala.reflect.api.Trees#TreeApi in class
   scala.reflect.api.BuildUtils#BuildApi does not have a correspondent in new
   version

 These should be removed form the api until 2.11.

-jason 

Jason Zaugg

unread,
Feb 2, 2013, 4:11:44 PM2/2/13
to scala-i...@googlegroups.com
On Sat, Feb 2, 2013 at 9:52 PM, Eugene Burmako <eugene....@epfl.ch> wrote:
Is it possible to filter out certain packages? From what I remember we decided to ignore compatibility issues for scala.reflect.internal and scala.reflect.runtime.

We've got to be a bit careful with the latter; code synthesized for type tag materialization refers to, for example, `reflect.runtime.universe.runtimeMirror`. We must ensure that such generated code is forward and backward compatible.

One way is via policy that the entire package is forward + backward binary compatible. In any case, we should also write a test (probably external to scala/scala) that exercises this scenario. With that test in place, we might be able to make a few exceptions in that package.

-jason

Paul Phillips

unread,
Feb 2, 2013, 4:43:47 PM2/2/13
to scala-i...@googlegroups.com
Oh, and if that didn't set the mood enough, didn't we say we're keeping both forward and backward binary compat? That was just in the easy direction. Here's what happens if you look backward from 2.10.x on the library. I'm not even going to bother with reflect.

% mima --curr /scala/inst/210/lib/scala-library.jar --prev /packs/scala-v2.10.0-458-gad2a69e313/pack/lib/scala-library.jar

Found 37 binary incompatibiities
================================
 * method Integral()scala.math.Integral# in object scala.package does not
   have a correspondent in new version
 * method Fractional()scala.math.Fractional# in object scala.package does
   not have a correspondent in new version
 * trait scala.concurrent.BatchingExecutor does not have a correspondent in
   new version
 * class scala.concurrent.BatchingExecutor#Batch does not have a
   correspondent in new version
 * the type hierarchy of object scala.collection.IndexedSeq has changed in
   new version. Missing types {scala.collection.generic.IndexedSeqFactory}
 * the type hierarchy of object scala.collection.immutable.IndexedSeq has
   changed in new version. Missing types
   {scala.collection.generic.IndexedSeqFactory}
 * synthetic method
   scala$collection$immutable$Stream$$loop$6(Int,Int,scala.Function1)scala.collection.immutable.Stream
   in object scala.collection.immutable.Stream does not have a correspondent in
   new version
 * method head()Int in class scala.collection.immutable.Range has now a
   different result type; was: Int, is now: java.lang.Object
 * the type hierarchy of object scala.collection.immutable.Vector has
   changed in new version. Missing types
   {scala.collection.generic.IndexedSeqFactory}
 * synthetic method
   scala$collection$immutable$Stream$$loop$5(Int,scala.collection.immutable.Stream,java.lang.Object)scala.collection.immutable.Stream
   in class scala.collection.immutable.Stream does not have a correspondent in
   new version
 * synthetic method
   scala$collection$immutable$Stream$$loop$4(scala.collection.immutable.Set,scala.collection.immutable.Stream)scala.collection.immutable.Stream
   in class scala.collection.immutable.Stream does not have a correspondent in
   new version
 * class scala.collection.generic.IndexedSeqFactory does not have a
   correspondent in new version
 * method :+(java.lang.Object,scala.reflect.ClassTag)java.lang.Object in
   class scala.collection.mutable.ArrayOps#ofFloat's type has changed; was
   (java.lang.Object,scala.reflect.ClassTag)java.lang.Object, is now:
   (java.lang.Object,scala.collection.generic.CanBuildFrom)java.lang.Object
 * method +:(java.lang.Object,scala.reflect.ClassTag)java.lang.Object in
   class scala.collection.mutable.ArrayOps#ofFloat's type has changed; was
   (java.lang.Object,scala.reflect.ClassTag)java.lang.Object, is now:
   (java.lang.Object,scala.collection.generic.CanBuildFrom)java.lang.Object
 * method :+(java.lang.Object,scala.reflect.ClassTag)java.lang.Object in
   class scala.collection.mutable.ArrayOps#ofInt's type has changed; was
   (java.lang.Object,scala.reflect.ClassTag)java.lang.Object, is now:
   (java.lang.Object,scala.collection.generic.CanBuildFrom)java.lang.Object
 * method +:(java.lang.Object,scala.reflect.ClassTag)java.lang.Object in
   class scala.collection.mutable.ArrayOps#ofInt's type has changed; was
   (java.lang.Object,scala.reflect.ClassTag)java.lang.Object, is now:
   (java.lang.Object,scala.collection.generic.CanBuildFrom)java.lang.Object
 * method :+(java.lang.Object,scala.reflect.ClassTag)java.lang.Object in
   class scala.collection.mutable.ArrayOps#ofRef's type has changed; was
   (java.lang.Object,scala.reflect.ClassTag)java.lang.Object, is now:
   (java.lang.Object,scala.collection.generic.CanBuildFrom)java.lang.Object
 * method +:(java.lang.Object,scala.reflect.ClassTag)java.lang.Object in
   class scala.collection.mutable.ArrayOps#ofRef's type has changed; was
   (java.lang.Object,scala.reflect.ClassTag)java.lang.Object, is now:
   (java.lang.Object,scala.collection.generic.CanBuildFrom)java.lang.Object
 * method :+(java.lang.Object,scala.reflect.ClassTag)java.lang.Object in
   class scala.collection.mutable.ArrayOps#ofUnit's type has changed; was
   (java.lang.Object,scala.reflect.ClassTag)java.lang.Object, is now:
   (java.lang.Object,scala.collection.generic.CanBuildFrom)java.lang.Object
 * method +:(java.lang.Object,scala.reflect.ClassTag)java.lang.Object in
   class scala.collection.mutable.ArrayOps#ofUnit's type has changed; was
   (java.lang.Object,scala.reflect.ClassTag)java.lang.Object, is now:
   (java.lang.Object,scala.collection.generic.CanBuildFrom)java.lang.Object
 * method :+(java.lang.Object,scala.reflect.ClassTag)java.lang.Object in
   class scala.collection.mutable.ArrayOps#ofLong's type has changed; was
   (java.lang.Object,scala.reflect.ClassTag)java.lang.Object, is now:
   (java.lang.Object,scala.collection.generic.CanBuildFrom)java.lang.Object
 * method +:(java.lang.Object,scala.reflect.ClassTag)java.lang.Object in
   class scala.collection.mutable.ArrayOps#ofLong's type has changed; was
   (java.lang.Object,scala.reflect.ClassTag)java.lang.Object, is now:
   (java.lang.Object,scala.collection.generic.CanBuildFrom)java.lang.Object
 * method :+(java.lang.Object,scala.reflect.ClassTag)java.lang.Object in
   class scala.collection.mutable.ArrayOps#ofByte's type has changed; was
   (java.lang.Object,scala.reflect.ClassTag)java.lang.Object, is now:
   (java.lang.Object,scala.collection.generic.CanBuildFrom)java.lang.Object
 * method +:(java.lang.Object,scala.reflect.ClassTag)java.lang.Object in
   class scala.collection.mutable.ArrayOps#ofByte's type has changed; was
   (java.lang.Object,scala.reflect.ClassTag)java.lang.Object, is now:
   (java.lang.Object,scala.collection.generic.CanBuildFrom)java.lang.Object
 * method tailImpl(scala.collection.mutable.MutableList)Unit in class
   scala.collection.mutable.MutableList does not have a correspondent in new
   version
 * method :+(java.lang.Object,scala.reflect.ClassTag)java.lang.Object in
   class scala.collection.mutable.ArrayOps#ofShort's type has changed; was
   (java.lang.Object,scala.reflect.ClassTag)java.lang.Object, is now:
   (java.lang.Object,scala.collection.generic.CanBuildFrom)java.lang.Object
 * method +:(java.lang.Object,scala.reflect.ClassTag)java.lang.Object in
   class scala.collection.mutable.ArrayOps#ofShort's type has changed; was
   (java.lang.Object,scala.reflect.ClassTag)java.lang.Object, is now:
   (java.lang.Object,scala.collection.generic.CanBuildFrom)java.lang.Object
 * method :+(java.lang.Object,scala.reflect.ClassTag)java.lang.Object in
   trait scala.collection.mutable.ArrayOps's type has changed; was
   (java.lang.Object,scala.reflect.ClassTag)java.lang.Object, is now:
   (java.lang.Object,scala.collection.generic.CanBuildFrom)java.lang.Object
 * method +:(java.lang.Object,scala.reflect.ClassTag)java.lang.Object in
   trait scala.collection.mutable.ArrayOps's type has changed; was
   (java.lang.Object,scala.reflect.ClassTag)java.lang.Object, is now:
   (java.lang.Object,scala.collection.generic.CanBuildFrom)java.lang.Object
 * method :+(java.lang.Object,scala.reflect.ClassTag)java.lang.Object in
   class scala.collection.mutable.ArrayOps#ofChar's type has changed; was
   (java.lang.Object,scala.reflect.ClassTag)java.lang.Object, is now:
   (java.lang.Object,scala.collection.generic.CanBuildFrom)java.lang.Object
 * method +:(java.lang.Object,scala.reflect.ClassTag)java.lang.Object in
   class scala.collection.mutable.ArrayOps#ofChar's type has changed; was
   (java.lang.Object,scala.reflect.ClassTag)java.lang.Object, is now:
   (java.lang.Object,scala.collection.generic.CanBuildFrom)java.lang.Object
 * method :+(java.lang.Object,scala.reflect.ClassTag)java.lang.Object in
   class scala.collection.mutable.ArrayOps#ofDouble's type has changed; was
   (java.lang.Object,scala.reflect.ClassTag)java.lang.Object, is now:
   (java.lang.Object,scala.collection.generic.CanBuildFrom)java.lang.Object
 * method +:(java.lang.Object,scala.reflect.ClassTag)java.lang.Object in
   class scala.collection.mutable.ArrayOps#ofDouble's type has changed; was
   (java.lang.Object,scala.reflect.ClassTag)java.lang.Object, is now:
   (java.lang.Object,scala.collection.generic.CanBuildFrom)java.lang.Object
 * method :+(java.lang.Object,scala.reflect.ClassTag)java.lang.Object in
   class scala.collection.mutable.ArrayOps#ofBoolean's type has changed; was
   (java.lang.Object,scala.reflect.ClassTag)java.lang.Object, is now:
   (java.lang.Object,scala.collection.generic.CanBuildFrom)java.lang.Object
 * method +:(java.lang.Object,scala.reflect.ClassTag)java.lang.Object in
   class scala.collection.mutable.ArrayOps#ofBoolean's type has changed; was
   (java.lang.Object,scala.reflect.ClassTag)java.lang.Object, is now:
   (java.lang.Object,scala.collection.generic.CanBuildFrom)java.lang.Object
 * the type hierarchy of object scala.util.Random has changed in new
   version. Missing types {scala.Serializable,java.io.Serializable}
 * the type hierarchy of class scala.util.Random has changed in new version.
   Missing types {scala.Serializable,java.io.Serializable}

Paul Phillips

unread,
Feb 2, 2013, 4:45:45 PM2/2/13
to scala-i...@googlegroups.com
Okay, not as bad as I thought. A mere 70 more.

Found 70 binary incompatibiities
================================
 * method
   initClassAndModule(scala.reflect.internal.Symbols#Symbol,scala.reflect.internal.Symbols#Symbol,scala.reflect.internal.Types#LazyType)Unit
   in trait scala.reflect.runtime.SymbolLoaders does not have a correspondent
   in new version
 * method
   initAndEnterClassAndModule(scala.reflect.internal.Symbols#Symbol,scala.reflect.internal.Names#TypeName,scala.Function2)scala.Tuple2
   in trait scala.reflect.runtime.SymbolLoaders does not have a correspondent
   in new version
 * method
   initClassModule(scala.reflect.internal.Symbols#Symbol,scala.reflect.internal.Symbols#Symbol,scala.reflect.internal.Types#LazyType)Unit
   in trait scala.reflect.runtime.SymbolLoaders does not have a correspondent
   in old version
 * method
   createClassModule(scala.reflect.internal.Symbols#Symbol,scala.reflect.internal.Names#TypeName,scala.Function2)scala.Tuple2
   in trait scala.reflect.runtime.SymbolLoaders does not have a correspondent
   in old version
 * method
   initClassAndModule(scala.reflect.internal.Symbols#Symbol,scala.reflect.internal.Symbols#Symbol,scala.reflect.internal.Types#LazyType)Unit
   in class scala.reflect.runtime.JavaUniverse does not have a correspondent in
   new version
 * method
   initAndEnterClassAndModule(scala.reflect.internal.Symbols#Symbol,scala.reflect.internal.Names#TypeName,scala.Function2)scala.Tuple2
   in class scala.reflect.runtime.JavaUniverse does not have a correspondent in
   new version
 * synthetic method
   scala$reflect$runtime$JavaMirrors$JavaMirror$$jclassAsScala(java.lang.Class)scala.reflect.internal.Symbols#ClassSymbol
   in class scala.reflect.runtime.JavaMirrors#JavaMirror has now a different
   result type; was: scala.reflect.internal.Symbols#ClassSymbol, is now:
   scala.reflect.internal.Symbols#Symbol
 * synthetic method
   scala$reflect$runtime$JavaMirrors$JavaMirror$$jclassAsScala1(java.lang.Class)scala.reflect.internal.Symbols#ClassSymbol
   in class scala.reflect.runtime.JavaMirrors#JavaMirror does not have a
   correspondent in new version
 * method
   companionsInPkgObjs()scala.reflect.internal.settings.MutableSettings#SettingValue
   in class scala.reflect.runtime.Settings does not have a correspondent in new
   version
 * method companionsInPkgObjs()scala.reflect.runtime.Settings#BooleanSetting
   in class scala.reflect.runtime.Settings does not have a correspondent in new
   version
 * method
   New(scala.reflect.internal.Types#Type,scala.collection.immutable.List)scala.reflect.internal.Trees#Tree
   in trait scala.reflect.internal.Trees does not have a correspondent in new
   version
 * method pendingSuperCall()scala.reflect.internal.Trees#pendingSuperCall#
   in trait scala.reflect.internal.Trees does not have a correspondent in new
   version
 * method dealiasWiden()scala.reflect.internal.Types#Type in class
   scala.reflect.internal.Types#Type does not have a correspondent in new
   version
 * method dealiasWidenChain()scala.collection.immutable.List in class
   scala.reflect.internal.Types#Type does not have a correspondent in new
   version
 * method this(scala.reflect.internal.SymbolTable,scala.collection.Seq)Unit
   in class scala.reflect.internal.Types#SubstSymMap does not have a
   correspondent in new version
 * method StringContextStripMarginOps()scala.Function1 in class
   scala.reflect.internal.SymbolTable does not have a correspondent in new
   version
 * method
   nonTrivialMembers(scala.reflect.internal.Symbols#Symbol)scala.collection.Iterable
   in class scala.reflect.internal.SymbolTable does not have a correspondent in
   new version
 * method normalizeAliases()scala.reflect.internal.Types#normalizeAliases#
   in class scala.reflect.internal.SymbolTable does not have a correspondent in
   new version
 * method
   inheritsJavaVarArgsMethod(scala.reflect.internal.Symbols#Symbol)Boolean in
   class scala.reflect.internal.SymbolTable does not have a correspondent in
   new version
 * method
   New(scala.reflect.internal.Types#Type,scala.collection.immutable.List)scala.reflect.internal.Trees#Tree
   in class scala.reflect.internal.SymbolTable does not have a correspondent
   with same parameter signature among
   (scala.reflect.api.Types#TypeApi,scala.collection.Seq)scala.reflect.api.Trees#TreeApi,
   (scala.reflect.api.Trees#TreeApi,scala.collection.immutable.List)scala.reflect.api.Trees#TreeApi,
   (scala.reflect.api.Symbols#SymbolApi,scala.collection.Seq)scala.reflect.api.Trees#TreeApi,
   (scala.reflect.internal.Symbols#Symbol,scala.collection.Seq)scala.reflect.internal.Trees#Tree,
   (scala.reflect.internal.Trees#Tree,scala.collection.immutable.List)scala.reflect.internal.Trees#Tree,
   (scala.reflect.internal.Types#Type,scala.collection.Seq)scala.reflect.internal.Trees#Tree
 * method assertCorrectThread()Unit in class
   scala.reflect.internal.SymbolTable does not have a correspondent in new
   version
 * method pendingSuperCall()scala.reflect.api.Trees#TreeApi in class
   scala.reflect.internal.SymbolTable does not have a correspondent in new
   version
 * method pendingSuperCall()scala.reflect.internal.Trees#pendingSuperCall#
   in class scala.reflect.internal.SymbolTable does not have a correspondent in
   new version
 * method
   SuppressMacroExpansionAttachment()scala.reflect.internal.StdAttachments#SuppressMacroExpansionAttachment#
   in class scala.reflect.internal.SymbolTable does not have a correspondent in
   new version
 * method
   isJavaVarargsAncestor(scala.reflect.internal.Symbols#Symbol)Boolean in class
   scala.reflect.internal.SymbolTable does not have a correspondent in new
   version
 * trait scala.reflect.internal.Trees#CannotHaveAttrs does not have a
   correspondent in new version
 * method
   setAttachments(scala.reflect.macros.Attachments)scala.reflect.internal.StdAttachments#Attachable
   in trait scala.reflect.internal.StdAttachments#Attachable does not have a
   correspondent in new version
 * method pendingSuperCall()scala.reflect.internal.Names#TermName in class
   scala.reflect.internal.StdNames#TermNames does not have a correspondent in
   new version
 * class scala.reflect.internal.TreeInfo#Applied does not have a
   correspondent in new version
 * object scala.reflect.internal.TreeInfo#Applied does not have a
   correspondent in new version
 * method change(scala.reflect.internal.Symbols#Symbol)Unit in class
   scala.reflect.internal.Trees#ChangeOwnerTraverser does not have a
   correspondent in new version
 * method
   setAttachments(scala.reflect.macros.Attachments)scala.reflect.internal.StdAttachments#Attachable
   in class scala.reflect.internal.Trees#Tree does not have a correspondent in
   new version
 * method canHaveAttrs()Boolean in class scala.reflect.internal.Trees#Tree
   does not have a correspondent in new version
 * method
   ArrayModule_apply(scala.reflect.internal.Types#Type)scala.reflect.internal.Symbols#Symbol
   in class scala.reflect.internal.Definitions#DefinitionsClass does not have a
   correspondent in new version
 * method OptionModule()scala.reflect.internal.Symbols#ModuleSymbol in class
   scala.reflect.internal.Definitions#DefinitionsClass does not have a
   correspondent in new version
 * method ArrayModule_genericApply()scala.reflect.internal.Symbols#Symbol in
   class scala.reflect.internal.Definitions#DefinitionsClass does not have a
   correspondent in new version
 * method
   Predef_wrapArray(scala.reflect.internal.Types#Type)scala.reflect.internal.Symbols#TermSymbol
   in class scala.reflect.internal.Definitions#DefinitionsClass does not have a
   correspondent in new version
 * method Option_apply()scala.reflect.internal.Symbols#TermSymbol in class
   scala.reflect.internal.Definitions#DefinitionsClass does not have a
   correspondent in new version
 * method CompileTimeOnlyAttr()scala.reflect.internal.Symbols#Symbol in
   class scala.reflect.internal.Definitions#DefinitionsClass does not have a
   correspondent in new version
 * method completeInfo()Unit in class
   scala.reflect.internal.AnnotationInfos#AnnotationInfo does not have a
   correspondent in new version
 * method
   SuppressMacroExpansionAttachment()scala.reflect.internal.StdAttachments#SuppressMacroExpansionAttachment#
   in trait scala.reflect.internal.StdAttachments does not have a correspondent
   in new version
 * method
   setAttachments(scala.reflect.macros.Attachments)scala.reflect.internal.StdAttachments#Attachable
   in class scala.reflect.internal.Symbols#Symbol does not have a correspondent
   in new version
 * method toOption()scala.Option in class
   scala.reflect.internal.Symbols#Symbol does not have a correspondent in new
   version
 * method isCompileTimeOnly()Boolean in class
   scala.reflect.internal.Symbols#Symbol does not have a correspondent in new
   version
 * method compileTimeOnlyMessage()scala.Option in class
   scala.reflect.internal.Symbols#Symbol does not have a correspondent in new
   version
 * method
   addAnnotation(scala.reflect.internal.Types#Type,scala.collection.Seq)scala.reflect.internal.Symbols#Symbol
   in class scala.reflect.internal.Symbols#Symbol's type has changed; was
   (scala.reflect.internal.Types#Type,scala.collection.Seq)scala.reflect.internal.Symbols#Symbol,
   is now:
   (scala.reflect.internal.Symbols#Symbol,scala.collection.Seq)scala.reflect.internal.Symbols#Symbol
 * method
   nonTrivialMembers(scala.reflect.internal.Symbols#Symbol)scala.collection.Iterable
   in trait scala.reflect.internal.Types does not have a correspondent in new
   version
 * method normalizeAliases()scala.reflect.internal.Types#normalizeAliases#
   in trait scala.reflect.internal.Types does not have a correspondent in new
   version
 * method
   inheritsJavaVarArgsMethod(scala.reflect.internal.Symbols#Symbol)Boolean in
   trait scala.reflect.internal.Types does not have a correspondent in new
   version
 * method
   isJavaVarargsAncestor(scala.reflect.internal.Symbols#Symbol)Boolean in trait
   scala.reflect.internal.Types does not have a correspondent in new version
 * method deAlias()scala.reflect.internal.Types#deAlias# in trait
   scala.reflect.internal.Types does not have a correspondent in old version
 * method isTraitRef(scala.reflect.internal.Trees#Tree)Boolean in class
   scala.reflect.internal.TreeInfo does not have a correspondent in new version
 * method
   dissectApplied(scala.reflect.internal.Trees#Tree)scala.reflect.internal.TreeInfo#Applied
   in class scala.reflect.internal.TreeInfo does not have a correspondent in
   new version
 * method
   stripCast(scala.reflect.internal.Trees#Tree)scala.reflect.internal.Trees#Tree
   in class scala.reflect.internal.TreeInfo does not have a correspondent in
   new version
 * method StripCast()scala.reflect.internal.TreeInfo#StripCast# in class
   scala.reflect.internal.TreeInfo does not have a correspondent in new version
 * method Applied()scala.reflect.internal.TreeInfo#Applied# in class
   scala.reflect.internal.TreeInfo does not have a correspondent in new version
 * method hasUntypedPreSuperFields(scala.collection.immutable.List)Boolean
   in class scala.reflect.internal.TreeInfo does not have a correspondent in
   new version
 * trait scala.reflect.internal.Trees#TreeStackTraverser does not have a
   correspondent in new version
 * synthetic method
   scala$reflect$internal$Types$TypeVar$$unifySpecific$1(scala.reflect.internal.Types#Type,Boolean,Boolean)Boolean
   in class scala.reflect.internal.Types#TypeVar does not have a correspondent
   in new version
 * method completeInfo()Unit in class
   scala.reflect.internal.AnnotationInfos#LazyAnnotationInfo does not have a
   correspondent in new version
 * class scala.reflect.internal.annotations.compileTimeOnly does not have a
   correspondent in new version
 * class scala.reflect.internal.util.package does not have a correspondent
   in new version
 * class scala.reflect.internal.util.package#StringContextStripMarginOps
   does not have a correspondent in new version
 * trait scala.reflect.internal.util.StripMarginInterpolator does not have a
   correspondent in new version
 * object scala.reflect.internal.util.package does not have a correspondent
   in new version
 * abstract method
   companionsInPkgObjs()scala.reflect.internal.settings.MutableSettings#SettingValue
   in class scala.reflect.internal.settings.MutableSettings does not have a
   correspondent in new version
 * class scala.reflect.macros.NonemptyAttachments does not have a
   correspondent in new version
 * method canHaveAttrs()Boolean in trait scala.reflect.api.Trees#TreeApi
   does not have a correspondent in new version
 * abstract method emptyValDef()scala.reflect.api.Trees#TreeApi in class
   scala.reflect.api.BuildUtils#BuildApi does not have a correspondent in old
   version
 * method pendingSuperCall()scala.reflect.api.Trees#TreeApi in trait
   scala.reflect.api.Trees does not have a correspondent in new version

Reply all
Reply to author
Forward
0 new messages