diff options
-rw-r--r-- | bincompat-backward.whitelist.conf | 217 | ||||
-rw-r--r-- | bincompat-forward.whitelist.conf | 1270 | ||||
-rw-r--r-- | build.xml | 2 | ||||
-rw-r--r-- | src/reflect/scala/reflect/internal/Types.scala | 35 | ||||
-rw-r--r-- | test/files/neg/t8146-non-finitary-2.check | 9 | ||||
-rw-r--r-- | test/files/neg/t8146-non-finitary-2.scala | 8 | ||||
-rw-r--r-- | test/files/neg/t8146-non-finitary.check | 9 | ||||
-rw-r--r-- | test/files/neg/t8146-non-finitary.scala | 7 | ||||
-rw-r--r-- | test/files/pos/t8146a.scala | 9 | ||||
-rw-r--r-- | test/files/pos/t8146b.scala | 77 |
10 files changed, 137 insertions, 1506 deletions
diff --git a/bincompat-backward.whitelist.conf b/bincompat-backward.whitelist.conf index 0500ec10ab..2d3c20370d 100644 --- a/bincompat-backward.whitelist.conf +++ b/bincompat-backward.whitelist.conf @@ -1,4 +1,7 @@ filter { + packages = [ + "scala.reflect.internal" + ] problems=[ # Scala library { @@ -61,136 +64,6 @@ filter { # problemName=IncompatibleResultTypeProblem # }, - - # scala.reflect.internal - { - matchName="scala.reflect.internal.TreeInfo.scala$reflect$internal$TreeInfo$$isVarPatternDeep0$1" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.TreeInfo.typeArguments" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.TreeInfo.applyDepth" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.TreeInfo.firstTypeArg" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.TreeInfo.methPart" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.TreeInfo.firstArgument" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Trees.DefDef" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.ExistentialsAndSkolems.deskolemizeTypeParams" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.SymbolTable.deAlias" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.SymbolTable.deskolemizeTypeParams" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.AnnotationInfos#Annotatable.addThrowsAnnotation" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.StdAttachments#Attachable.setAttachments" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Types#TypeVar.scala$reflect$internal$Types$TypeVar$$addBound$1" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.AnnotationCheckers$AnnotationChecker" - problemName=IncompatibleTemplateDefProblem - }, - { - matchName="scala.reflect.internal.Types.deAlias" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Types.inheritsJavaVarArgsMethod" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Types.nonTrivialMembers" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Types.isJavaVarargsAncestor" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Types.nestedMemberType" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Types.normalizeAliases" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Trees#ChangeOwnerTraverser.changeOwner" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.StdAttachments.SuppressMacroExpansionAttachment" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.Statistics#RelCounter.scala$reflect$internal$util$Statistics$RelCounter$$super$prefix" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Names#NameOps.name" - problemName=MissingFieldProblem - }, - { - matchName="scala.reflect.internal.ExistentialsAndSkolems.existentialTransform$default$3" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.ExistentialsAndSkolems.existentialTransform" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.ExistentialsAndSkolems.packSymbols" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.ExistentialsAndSkolems.packSymbols$default$3" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.ExistentialsAndSkolems.isRawParameter" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Trees.substituteInfoParamsIntoDefDef" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.ClassfileConstants.xxxunusedxxxx" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Types#TypeVar.setInst" - problemName=IncompatibleResultTypeProblem - }, # scala.concurrent.forkjoin (SI-7442) { matchName="scala.concurrent.forkjoin.ForkJoinTask.internalGetCompleter" @@ -221,96 +94,12 @@ filter { problemName=IncompatibleResultTypeProblem }, { - matchName="scala.reflect.internal.Definitions#DefinitionsClass.getClassMethods" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Definitions#DefinitionsClass.primitiveGetClassMethods" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.StdAttachments.unsuppressMacroExpansion" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.StdAttachments.suppressMacroExpansion" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.StdAttachments.isMacroExpansionSuppressed" - problemName=MissingMethodProblem - }, - { matchName="scala.reflect.runtime.JavaUniverse.isInvalidClassName" problemName=MissingMethodProblem }, { matchName="scala.reflect.runtime.SymbolLoaders.isInvalidClassName" problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Types.uncheckedBounds" - problemName=MissingMethodProblem - } - { - matchName="scala.reflect.internal.Trees.scala$reflect$internal$Trees$$duplicator" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Trees.duplicateAndKeepPositions" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Trees.scala$reflect$internal$Trees$$duplicator" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.SymbolTable.scala$reflect$internal$Trees$$duplicator" - problemName=IncompatibleResultTypeProblem - }, - { - matchName="scala.reflect.internal.StdNames.compactifyName" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet" - problemName=FinalClassProblem - }, - { - matchName="scala.reflect.internal.util.WeakReferenceWithEquals" - problemName=MissingClassProblem - }, - { - matchName="scala.reflect.internal.SymbolTable.scala$reflect$internal$Types$$uniques" - problemName=IncompatibleResultTypeProblem - }, - { - matchName="scala.reflect.internal.SymbolTable.scala$reflect$internal$Types$$uniques_=" - problemName=IncompatibleMethTypeProblem - }, - { - matchName="scala.reflect.internal.Types.scala$reflect$internal$Types$$uniques" - problemName=IncompatibleResultTypeProblem - }, - { - matchName="scala.reflect.internal.Types.scala$reflect$internal$Types$$uniques_=" - problemName=IncompatibleMethTypeProblem - }, - { - matchName="scala.reflect.internal.Types.scala$reflect$internal$Types$$uniques" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Types.scala$reflect$internal$Types$$uniques_=" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.HasFlags.isDeferredOrDefault" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.HasFlags.isDeferredNotDefault" - problemName=MissingMethodProblem } ] } diff --git a/bincompat-forward.whitelist.conf b/bincompat-forward.whitelist.conf index 3b61a02bce..087fa07b37 100644 --- a/bincompat-forward.whitelist.conf +++ b/bincompat-forward.whitelist.conf @@ -1,4 +1,7 @@ filter { + packages = [ + "scala.reflect.internal" + ] problems=[ # rework d526f8bd74 to duplicate tailImpl as a private method # { @@ -98,339 +101,6 @@ filter { # problemName=MissingMethodProblem # }, - # scala.reflect.internal - { - matchName="scala.reflect.internal.Types#Type.dealiasWidenChain" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Types#Type.dealiasWiden" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Types#Type.addThrowsAnnotation" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Types#TypeVar.scala$reflect$internal$Types$TypeVar$$unifySpecific$1" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Types#SubstSymMap.mapTreeSymbols" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Types#SubstSymMap.this" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.PrivateWithin" - problemName=MissingClassProblem - }, - { - matchName="scala.reflect.internal.TreeInfo$Applied" - problemName=MissingClassProblem - }, - { - matchName="scala.reflect.internal.AnnotationInfos#Annotatable.addThrowsAnnotation" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Types.inheritsJavaVarArgsMethod" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Types.nonTrivialMembers" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Types.isJavaVarargsAncestor" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Types.normalizeAliases" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Types.nestedMemberType" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Types.deAlias" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.ExistentialsAndSkolems.deskolemizeTypeParams" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.StdAttachments#Attachable.setAttachments" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.AnnotationInfos#AnnotationInfo.completeInfo" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Symbols#Symbol.isCompileTimeOnly" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Symbols#Symbol.addThrowsAnnotation" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Symbols#Symbol.toOption" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Symbols#Symbol.compileTimeOnlyMessage" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Symbols#Symbol.setAttachments" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Symbols#Symbol.addAnnotation" - problemName=IncompatibleMethTypeProblem - }, - { - matchName="scala.reflect.internal.Trees.DefDef" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Trees$TreeStackTraverser" - problemName=MissingClassProblem - }, - { - matchName="scala.reflect.internal.Trees#ChangeOwnerTraverser.change" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.AnnotationCheckers$AnnotationChecker" - problemName=IncompatibleTemplateDefProblem - }, - { - matchName="scala.reflect.internal.TreeInfo$Applied$" - problemName=MissingClassProblem - }, - { - matchName="scala.reflect.internal.Trees#Tree.setAttachments" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.StdNames#TermNames.DEFAULT_CASE" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.TreeInfo.Applied" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.TreeInfo.isWildcardStarType" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.TreeInfo.isSyntheticDefaultCase" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.TreeInfo.StripCast" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.TreeInfo.dissectApplied" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.TreeInfo.stripCast" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.SymbolTable" - problemName=MissingTypesProblem - }, - { - matchName="scala.reflect.internal.SymbolTable.StringContextStripMarginOps" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.SymbolTable.inheritsJavaVarArgsMethod" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.SymbolTable.assertCorrectThread" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.SymbolTable.SuppressMacroExpansionAttachment" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.SymbolTable.nonTrivialMembers" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.SymbolTable.isJavaVarargsAncestor" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.SymbolTable.normalizeAliases" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.SymbolTable.DefDef" - problemName=IncompatibleMethTypeProblem - }, - { - matchName="scala.reflect.internal.SymbolTable.nestedMemberType" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.SymbolTable.importPrivateWithinFromJavaFlags" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.StdAttachments.SuppressMacroExpansionAttachment" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Definitions#DefinitionsClass.ArrayModule_genericApply" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Definitions#DefinitionsClass.allParameters" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Definitions#DefinitionsClass.Predef_wrapArray" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Definitions#DefinitionsClass.dropNullaryMethod" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Definitions#DefinitionsClass.ArrayModule_apply" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Definitions#DefinitionsClass.OptionModule" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Definitions#DefinitionsClass.Option_apply" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Definitions#DefinitionsClass.CompileTimeOnlyAttr" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.AnnotationInfos#LazyAnnotationInfo.completeInfo" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.package" - problemName=MissingClassProblem - }, - { - matchName="scala.reflect.internal.util.package$" - problemName=MissingClassProblem - }, - { - matchName="scala.reflect.internal.util.StripMarginInterpolator" - problemName=MissingClassProblem - }, - { - matchName="scala.reflect.internal.util.package$StringContextStripMarginOps" - problemName=MissingClassProblem - }, - { - matchName="scala.reflect.internal.annotations.compileTimeOnly" - problemName=MissingClassProblem - }, - { - matchName="scala.reflect.internal.StdNames#TermNames.SelectFromTypeTree" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.ExistentialsAndSkolems.existentialTransform$default$3" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.ExistentialsAndSkolems.existentialTransform" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.ExistentialsAndSkolems.packSymbols" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.ExistentialsAndSkolems.packSymbols$default$3" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.ExistentialsAndSkolems.isRawParameter" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Trees.substituteInfoParamsIntoDefDef" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.SymbolTable.existentialTransform$default$3" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.SymbolTable.existentialTransform" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.SymbolTable.substituteInfoParamsIntoDefDef" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.SymbolTable.packSymbols" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.SymbolTable.packSymbols$default$3" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.SymbolTable.isRawParameter" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.ClassfileConstants.CONSTANT_INVOKEDYNAMIC" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.ClassfileConstants.invokedynamic" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.ClassfileConstants.CONSTANT_METHODHANDLE" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.ClassfileConstants.CONSTANT_METHODTYPE" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Types#TypeVar.setInst" - problemName=IncompatibleResultTypeProblem - }, - { - matchName="scala.reflect.internal.TreeInfo.effectivePatternArity" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.ModifierFlags.DEFAULTMETHOD" - problemName=MissingMethodProblem - }, # scala.concurrent.forkjoin (SI-7442) { matchName="scala.concurrent.forkjoin.ForkJoinPool.registerWorker" @@ -481,38 +151,6 @@ filter { problemName=MissingMethodProblem }, { - matchName="scala.reflect.internal.Definitions#DefinitionsClass.getClassMethods" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Definitions#DefinitionsClass.primitiveGetClassMethods" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.StdAttachments.unsuppressMacroExpansion" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.StdAttachments.suppressMacroExpansion" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.StdAttachments.isMacroExpansionSuppressed" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.SymbolTable.unsuppressMacroExpansion" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.SymbolTable.suppressMacroExpansion" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.SymbolTable.isMacroExpansionSuppressed" - problemName=MissingMethodProblem - }, - { matchName="scala.reflect.runtime.JavaMirrors#JavaMirror#FromJavaClassCompleter.scala$reflect$runtime$JavaMirrors$JavaMirror$FromJavaClassCompleter$$enterEmptyCtorIfNecessary$1" problemName=MissingMethodProblem }, @@ -529,912 +167,12 @@ filter { problemName=MissingMethodProblem }, { - matchName="scala.reflect.runtime.SymbolLoaders.isInvalidClassName" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.SymbolTable.uncheckedBounds" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Types.uncheckedBounds" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Definitions#DefinitionsClass.UncheckedBoundsClass" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.annotations.uncheckedBounds" - problemName=MissingClassProblem - } - { - matchName="scala.reflect.internal.Trees$Duplicator" - problemName=MissingClassProblem - }, - { - matchName="scala.reflect.internal.Trees.duplicateAndKeepPositions" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Trees.scala$reflect$internal$Trees$$duplicator" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Trees.scala$reflect$internal$Trees$$duplicator" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.SymbolTable.duplicateAndKeepPositions" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.SymbolTable.scala$reflect$internal$Trees$$duplicator" - problemName=IncompatibleResultTypeProblem - }, - { matchName="scala.reflect.runtime.JavaMirrors#JavaMirror.scala$reflect$runtime$JavaMirrors$JavaMirror$$PackageAndClassPattern" problemName=MissingMethodProblem }, { - matchName="scala.reflect.internal.SymbolTable.compactifyName" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.StdNames.compactifyName" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet$Diagnostics" - problemName=MissingClassProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet$Entry" - problemName=MissingClassProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet$" - problemName=MissingClassProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet" - problemName=MissingTypesProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.newBuilder" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.min" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.initialCapacity" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.foldLeft" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.toIterable" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.toIterable" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.union" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.union" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.groupBy" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.groupBy" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.toSet" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.toSet" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.toSeq" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.toSeq" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.toIndexedSeq" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.unzip3" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.nonEmpty" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.slice" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.max" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.addString" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.addString" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.addString" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.subsetOf" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.fold" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.toIterator" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.foreach" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.flatten" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.headOption" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.mapResult" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.scala$reflect$internal$util$WeakHashSet$$bucketFor" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.toTraversable" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.toTraversable" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.filter" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.tails" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.last" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.collect" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.takeRight" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.lastOption" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.reduceRightOption" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.+" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.+" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.+" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.+" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.+" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.+" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.take" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.zipWithIndex" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.foldRight" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.hasDefiniteSize" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.<<" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.sliceWithKnownBound" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.to" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.result" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.result" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.isTraversableAgain" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.add" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.partition" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.toBuffer" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.update" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.view" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.view" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.view" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.view" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.tail" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.zipAll" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.retain" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.find" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.withFilter" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.init" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.findEntryOrUpdate" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.diagnostics" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.zip" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.drop" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.:\\" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.companion" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.toMap" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.toMap" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.genericBuilder" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.unzip" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.seq" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.seq" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.seq" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.seq" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.seq" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.seq" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.seq" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.&~" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.toStream" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.-=" - problemName=IncompatibleResultTypeProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.-=" - problemName=IncompatibleResultTypeProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.-=" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.splitAt" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.addEntry" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.aggregate" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.parCombiner" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.maxBy" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.sliding" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.sliding" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.repr" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.repr" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.scan" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.span" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.toArray" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.findEntry" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.toVector" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.scala$collection$SetLike$$super$map" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.dropWhile" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.forall" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.reduce" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.intersect" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.this" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.--=" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.loadFactor" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.copyToArray" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.copyToArray" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.copyToArray" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.canEqual" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.inits" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.sliceWithKnownDelta" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.grouped" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.minBy" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet./:" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.--" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.--" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.sameElements" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.par" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.equals" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.sizeHint" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.sizeHint" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.sizeHint" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet./:\\" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.threshhold_=" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.++" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.++" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.++" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.map" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.clone" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.clone" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.diff" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.diff" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.isEmpty" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.&" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.head" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.toCollection" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.toCollection" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.++:" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.++:" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.mkString" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.mkString" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.mkString" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.threshhold" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.iterator" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.toList" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.-" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.-" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.-" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.-" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.-" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.-" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.-" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.++=" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.takeWhile" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.exists" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.scanRight" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.transpose" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.sizeHintBounded" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.hashCode" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.scala$collection$mutable$Cloneable$$super$clone" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.remove" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.|" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.reduceLeft" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.count" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.scanLeft" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.reduceLeftOption" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.dropRight" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.collectFirst" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.flatMap" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.+=" - problemName=IncompatibleResultTypeProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.+=" - problemName=IncompatibleResultTypeProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.+=" - problemName=IncompatibleResultTypeProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.+=" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.reversed" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.sum" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.filterNot" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.product" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.thisCollection" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.thisCollection" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.copyToBuffer" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.subsets" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.subsets" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.reduceRight" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.empty" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.empty" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.empty" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.stringPrefix" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.util.WeakHashSet.reduceOption" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.SymbolTable.scala$reflect$internal$Types$$uniques" - problemName=IncompatibleResultTypeProblem - }, - { - matchName="scala.reflect.internal.SymbolTable.scala$reflect$internal$Types$$uniques_=" - problemName=IncompatibleMethTypeProblem - }, - { - matchName="scala.reflect.internal.Types.scala$reflect$internal$Types$$uniques" - problemName=IncompatibleResultTypeProblem - }, - { - matchName="scala.reflect.internal.Types.scala$reflect$internal$Types$$uniques_=" - problemName=IncompatibleMethTypeProblem - }, - { - matchName="scala.reflect.internal.Types.scala$reflect$internal$Types$$uniques" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Types.scala$reflect$internal$Types$$uniques_=" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Symbols#Symbol.isDeferredOrDefault" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Symbols#Symbol.isDeferredNotDefault" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.HasFlags.isDeferredOrDefault" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.HasFlags.isDeferredNotDefault" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Trees#Modifiers.isDeferredOrDefault" - problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Trees#Modifiers.isDeferredNotDefault" + matchName="scala.reflect.runtime.SymbolLoaders.isInvalidClassName" problemName=MissingMethodProblem - }, - { - matchName="scala.reflect.internal.Symbols#Symbol.rawInfoIsNoType" - problemName=MissingMethodProblem } ] } @@ -1605,7 +1605,7 @@ TODO: <mkdir dir="${bc-build.dir}"/> <!-- Pull down MIMA --> <artifact:dependencies pathId="mima.classpath"> - <dependency groupId="com.typesafe" artifactId="mima-reporter_2.9.2" version="0.1.5"/> + <dependency groupId="com.typesafe" artifactId="mima-reporter_2.10" version="0.1.6"/> </artifact:dependencies> <artifact:dependencies pathId="old.bc.classpath"> <dependency groupId="org.scala-lang" artifactId="scala-swing" version="${bc-reference-version}"/> diff --git a/src/reflect/scala/reflect/internal/Types.scala b/src/reflect/scala/reflect/internal/Types.scala index c684f4d690..2f49995030 100644 --- a/src/reflect/scala/reflect/internal/Types.scala +++ b/src/reflect/scala/reflect/internal/Types.scala @@ -5230,30 +5230,15 @@ trait Types extends api.Types { self: SymbolTable => } } - class SubTypePair(val tp1: Type, val tp2: Type) { - override def hashCode = tp1.hashCode * 41 + tp2.hashCode - override def equals(other: Any) = other match { - case stp: SubTypePair => - // suspend TypeVars in types compared by =:=, - // since we don't want to mutate them simply to check whether a subtype test is pending - // in addition to making subtyping "more correct" for type vars, - // it should avoid the stackoverflow that's been plaguing us (https://groups.google.com/d/topic/scala-internals/2gHzNjtB4xA/discussion) - // this method is only called when subtyping hits a recursion threshold (subsametypeRecursions >= LogPendingSubTypesThreshold) - def suspend(tp: Type) = - if (tp.isGround) null else suspendTypeVarsInType(tp) - def revive(suspension: List[TypeVar]) = - if (suspension ne null) suspension foreach (_.suspended = false) - - val suspensions = Array(tp1, stp.tp1, tp2, stp.tp2) map suspend - - val sameTypes = (tp1 =:= stp.tp1) && (tp2 =:= stp.tp2) - - suspensions foreach revive - - sameTypes - case _ => - false - } + final case class SubTypePair(tp1: Type, tp2: Type) { + // SI-8146 we used to implement equality here in terms of pairwise =:=. + // But, this was inconsistent with hashCode, which was based on the + // Type#hashCode, based on the structure of types, not the meaning. + // Now, we use `Type#{equals,hashCode}` as the (consistent) basis for + // detecting cycles (aka keeping subtyping decidable.) + // + // I added tests to show that we detect the cycle: neg/t8146-no-finitary* + override def toString = tp1+" <:<? "+tp2 } @@ -5819,7 +5804,7 @@ trait Types extends api.Types { self: SymbolTable => if (subsametypeRecursions >= LogPendingSubTypesThreshold) { val p = new SubTypePair(tp1, tp2) if (pendingSubTypes(p)) - false + false // see neg/t8146-no-finitary* else try { pendingSubTypes += p diff --git a/test/files/neg/t8146-non-finitary-2.check b/test/files/neg/t8146-non-finitary-2.check new file mode 100644 index 0000000000..8c2e1436c2 --- /dev/null +++ b/test/files/neg/t8146-non-finitary-2.check @@ -0,0 +1,9 @@ +t8146-non-finitary-2.scala:5: error: class graph is not finitary because type parameter X is expansively recursive +trait C[X] extends N[N[C[D[X]]]] + ^ +t8146-non-finitary-2.scala:7: error: type mismatch; + found : C[Int] + required: N[C[Int]] + def foo(c: C[Int]): N[C[Int]] = c + ^ +two errors found diff --git a/test/files/neg/t8146-non-finitary-2.scala b/test/files/neg/t8146-non-finitary-2.scala new file mode 100644 index 0000000000..c12f5f8f49 --- /dev/null +++ b/test/files/neg/t8146-non-finitary-2.scala @@ -0,0 +1,8 @@ +// Example 3 from "On Decidability of Nominal Subtyping with Variance" (Pierce, Kennedy) +// http://research.microsoft.com/pubs/64041/fool2007.pdf +trait N[-Z] +trait D[Y] +trait C[X] extends N[N[C[D[X]]]] +object Test { + def foo(c: C[Int]): N[C[Int]] = c +} diff --git a/test/files/neg/t8146-non-finitary.check b/test/files/neg/t8146-non-finitary.check new file mode 100644 index 0000000000..8363b750ca --- /dev/null +++ b/test/files/neg/t8146-non-finitary.check @@ -0,0 +1,9 @@ +t8146-non-finitary.scala:4: error: class graph is not finitary because type parameter A is expansively recursive +trait C[A] extends N[N[C[C[A]]]] + ^ +t8146-non-finitary.scala:6: error: type mismatch; + found : C[Int] + required: N[C[Int]] + def foo(c: C[Int]): N[C[Int]] = c + ^ +two errors found diff --git a/test/files/neg/t8146-non-finitary.scala b/test/files/neg/t8146-non-finitary.scala new file mode 100644 index 0000000000..3d8a3074c7 --- /dev/null +++ b/test/files/neg/t8146-non-finitary.scala @@ -0,0 +1,7 @@ +// Example 3 from "On Decidability of Nominal Subtyping with Variance" (Pierce, Kennedy) +// http://research.microsoft.com/pubs/64041/fool2007.pdf +trait N[-A] +trait C[A] extends N[N[C[C[A]]]] +object Test { + def foo(c: C[Int]): N[C[Int]] = c +} diff --git a/test/files/pos/t8146a.scala b/test/files/pos/t8146a.scala new file mode 100644 index 0000000000..e4eb8d3fd1 --- /dev/null +++ b/test/files/pos/t8146a.scala @@ -0,0 +1,9 @@ +trait M[+A] + +object Test { + type Inty = Int + def t1( + x: M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[Int @unchecked]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] + ): M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[Inty @unchecked]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] + = x +} diff --git a/test/files/pos/t8146b.scala b/test/files/pos/t8146b.scala new file mode 100644 index 0000000000..dd031f66c8 --- /dev/null +++ b/test/files/pos/t8146b.scala @@ -0,0 +1,77 @@ +// non-deterministic type errors, non-termination. +// seems to be due to inconsistent hashing/equality in SubTypePair + +import scala.language.{existentials, implicitConversions} +import scala.annotation.unchecked.uncheckedVariance + +trait Column[T] + +// Turning this into a trait reduces (eliminates?) the likelihood of type errors (but not of non-termination) +abstract class Shape[Level <: ShapeLevel, -Mixed_, Unpacked_, Packed_] + +trait ShapeLevel +trait NestedShapeLevel extends ShapeLevel +trait FlatShapeLevel extends NestedShapeLevel +trait ColumnsShapeLevel extends FlatShapeLevel + +trait ProvenShape[U] + +object ProvenShape { + implicit def proveShapeOf[T, U](v: T)(implicit sh: Shape[_ <: FlatShapeLevel, T, U, _]): ProvenShape[U] = ??? +} + +sealed abstract class HList { + type Self <: HList + type :: [E] = HCons[E, Self] + final def :: [E](elem: E): :: [E] = ??? +} + +final class HCons[+H, +T <: HList](val head: H, val tail: T) extends HList { + type Self = HCons[H @uncheckedVariance, T @uncheckedVariance] +} + +final object HNil extends HList { + type Self = HNil.type +} + +// Success is more likely when not using these aliases +object syntax { + type :: [+H, +T <: HList] = HCons[H, T] + type HNil = HNil.type +} + +class HListBench { + + import syntax._ + + implicit def columnShape[T, Level <: ShapeLevel]: Shape[Level, Column[T], T, Column[T]] = ??? + implicit def provenShape[T, P](implicit shape: Shape[_ <: FlatShapeLevel, T, _, P]): Shape[FlatShapeLevel, ProvenShape[T], T, P] = ??? + final class HListShape[Level <: ShapeLevel, M <: HList, U <: HList, P <: HList](val shapes: Seq[Shape[_ <: ShapeLevel, _, _, _]]) extends Shape[Level, M, U, P] + implicit def hnilShape[Level <: ShapeLevel] = new HListShape[Level, HNil.type, HNil.type, HNil.type](Nil) + implicit def hconsShape[Level <: ShapeLevel, M1, M2 <: HList, U1, U2 <: HList, P1, P2 <: HList] + (implicit s1: Shape[_ <: Level, M1, U1, P1], s2: HListShape[_ <: Level, M2, U2, P2]) = + new HListShape[Level, M1 :: M2, U1 :: U2, P1 :: P2](s1 +: s2.shapes) + + trait A[T] { + def * : ProvenShape[T] + } + + trait B extends A[ + Int :: Int :: Int :: Int :: Int :: + Int :: Int :: Int :: Int :: Int :: + Int :: Int :: Int :: Int :: Int :: + Int :: Int :: Int :: Int :: Int :: + Int :: Int :: Int :: Int :: Int :: + Int :: Int :: HNil ] { + + def c: Column[Int] + + def * = c :: c :: c :: c :: c :: + c :: c :: c :: c :: c :: + c :: c :: c :: c :: c :: + c :: c :: c :: c :: c :: + c :: c :: c :: c :: c :: + c :: c :: HNil + + } +} |