Substitution implemented for flexible occurrences of Java type parameters

This commit is contained in:
Andrey Breslav
2014-08-12 21:03:20 +04:00
parent bf53222bd9
commit dd2e95b3bc
63 changed files with 177 additions and 117 deletions
@@ -2,5 +2,5 @@ package test
public final class ArrayTypeVariance { public final class ArrayTypeVariance {
public constructor ArrayTypeVariance() public constructor ArrayTypeVariance()
public final fun toArray(/*0*/ p0: kotlin.Array<out kotlin.Any>?): kotlin.Array<kotlin.Any>? public final fun toArray(/*0*/ p0: kotlin.Array<(out) kotlin.Any!>!): kotlin.Array<(out) kotlin.Any!>!
} }
@@ -2,13 +2,13 @@ package test
public abstract class ClassDoesNotOverrideMethod : java.util.Date { public abstract class ClassDoesNotOverrideMethod : java.util.Date {
public constructor ClassDoesNotOverrideMethod() public constructor ClassDoesNotOverrideMethod()
invisible_fake final override /*1*/ /*fake_override*/ var cdate: sun.util.calendar.BaseCalendar.Date? invisible_fake final override /*1*/ /*fake_override*/ var cdate: sun.util.calendar.BaseCalendar.Date!
invisible_fake final override /*1*/ /*fake_override*/ var fastTime: kotlin.Long invisible_fake final override /*1*/ /*fake_override*/ var fastTime: kotlin.Long
public open override /*1*/ /*fake_override*/ fun after(/*0*/ p0: java.util.Date): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun after(/*0*/ p0: java.util.Date!): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun before(/*0*/ p0: java.util.Date): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun before(/*0*/ p0: java.util.Date!): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun clone(): kotlin.Any public open override /*1*/ /*fake_override*/ fun clone(): kotlin.Any
public open override /*1*/ /*fake_override*/ fun compareTo(/*0*/ other: java.util.Date): kotlin.Int public open override /*1*/ /*fake_override*/ fun compareTo(/*0*/ other: java.util.Date!): kotlin.Int
invisible_fake final override /*1*/ /*fake_override*/ fun getCalendarDate(): sun.util.calendar.BaseCalendar.Date? invisible_fake final override /*1*/ /*fake_override*/ fun getCalendarDate(): sun.util.calendar.BaseCalendar.Date!
kotlin.deprecated(value = "Deprecated in Java": kotlin.String) public open override /*1*/ /*fake_override*/ fun getDate(): kotlin.Int kotlin.deprecated(value = "Deprecated in Java": kotlin.String) public open override /*1*/ /*fake_override*/ fun getDate(): kotlin.Int
kotlin.deprecated(value = "Deprecated in Java": kotlin.String) public open override /*1*/ /*fake_override*/ fun getDay(): kotlin.Int kotlin.deprecated(value = "Deprecated in Java": kotlin.String) public open override /*1*/ /*fake_override*/ fun getDay(): kotlin.Int
kotlin.deprecated(value = "Deprecated in Java": kotlin.String) public open override /*1*/ /*fake_override*/ fun getHours(): kotlin.Int kotlin.deprecated(value = "Deprecated in Java": kotlin.String) public open override /*1*/ /*fake_override*/ fun getHours(): kotlin.Int
@@ -19,9 +19,9 @@ public abstract class ClassDoesNotOverrideMethod : java.util.Date {
invisible_fake final override /*1*/ /*fake_override*/ fun getTimeImpl(): kotlin.Long invisible_fake final override /*1*/ /*fake_override*/ fun getTimeImpl(): kotlin.Long
kotlin.deprecated(value = "Deprecated in Java": kotlin.String) public open override /*1*/ /*fake_override*/ fun getTimezoneOffset(): kotlin.Int kotlin.deprecated(value = "Deprecated in Java": kotlin.String) public open override /*1*/ /*fake_override*/ fun getTimezoneOffset(): kotlin.Int
kotlin.deprecated(value = "Deprecated in Java": kotlin.String) public open override /*1*/ /*fake_override*/ fun getYear(): kotlin.Int kotlin.deprecated(value = "Deprecated in Java": kotlin.String) public open override /*1*/ /*fake_override*/ fun getYear(): kotlin.Int
invisible_fake final override /*1*/ /*fake_override*/ fun normalize(): sun.util.calendar.BaseCalendar.Date? invisible_fake final override /*1*/ /*fake_override*/ fun normalize(): sun.util.calendar.BaseCalendar.Date!
invisible_fake final override /*1*/ /*fake_override*/ fun normalize(/*0*/ p0: sun.util.calendar.BaseCalendar.Date?): sun.util.calendar.BaseCalendar.Date? invisible_fake final override /*1*/ /*fake_override*/ fun normalize(/*0*/ p0: sun.util.calendar.BaseCalendar.Date!): sun.util.calendar.BaseCalendar.Date!
invisible_fake open override /*1*/ /*fake_override*/ fun readObject(/*0*/ p0: java.io.ObjectInputStream?): kotlin.Unit invisible_fake open override /*1*/ /*fake_override*/ fun readObject(/*0*/ p0: java.io.ObjectInputStream!): kotlin.Unit
kotlin.deprecated(value = "Deprecated in Java": kotlin.String) public open override /*1*/ /*fake_override*/ fun setDate(/*0*/ p0: kotlin.Int): kotlin.Unit kotlin.deprecated(value = "Deprecated in Java": kotlin.String) public open override /*1*/ /*fake_override*/ fun setDate(/*0*/ p0: kotlin.Int): kotlin.Unit
kotlin.deprecated(value = "Deprecated in Java": kotlin.String) public open override /*1*/ /*fake_override*/ fun setHours(/*0*/ p0: kotlin.Int): kotlin.Unit kotlin.deprecated(value = "Deprecated in Java": kotlin.String) public open override /*1*/ /*fake_override*/ fun setHours(/*0*/ p0: kotlin.Int): kotlin.Unit
kotlin.deprecated(value = "Deprecated in Java": kotlin.String) public open override /*1*/ /*fake_override*/ fun setMinutes(/*0*/ p0: kotlin.Int): kotlin.Unit kotlin.deprecated(value = "Deprecated in Java": kotlin.String) public open override /*1*/ /*fake_override*/ fun setMinutes(/*0*/ p0: kotlin.Int): kotlin.Unit
@@ -29,7 +29,7 @@ public abstract class ClassDoesNotOverrideMethod : java.util.Date {
kotlin.deprecated(value = "Deprecated in Java": kotlin.String) public open override /*1*/ /*fake_override*/ fun setSeconds(/*0*/ p0: kotlin.Int): kotlin.Unit kotlin.deprecated(value = "Deprecated in Java": kotlin.String) public open override /*1*/ /*fake_override*/ fun setSeconds(/*0*/ p0: kotlin.Int): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun setTime(/*0*/ p0: kotlin.Long): kotlin.Unit public open override /*1*/ /*fake_override*/ fun setTime(/*0*/ p0: kotlin.Long): kotlin.Unit
kotlin.deprecated(value = "Deprecated in Java": kotlin.String) public open override /*1*/ /*fake_override*/ fun setYear(/*0*/ p0: kotlin.Int): kotlin.Unit kotlin.deprecated(value = "Deprecated in Java": kotlin.String) public open override /*1*/ /*fake_override*/ fun setYear(/*0*/ p0: kotlin.Int): kotlin.Unit
kotlin.deprecated(value = "Deprecated in Java": kotlin.String) public open override /*1*/ /*fake_override*/ fun toGMTString(): kotlin.String kotlin.deprecated(value = "Deprecated in Java": kotlin.String) public open override /*1*/ /*fake_override*/ fun toGMTString(): kotlin.String!
kotlin.deprecated(value = "Deprecated in Java": kotlin.String) public open override /*1*/ /*fake_override*/ fun toLocaleString(): kotlin.String kotlin.deprecated(value = "Deprecated in Java": kotlin.String) public open override /*1*/ /*fake_override*/ fun toLocaleString(): kotlin.String!
invisible_fake open override /*1*/ /*fake_override*/ fun writeObject(/*0*/ p0: java.io.ObjectOutputStream?): kotlin.Unit invisible_fake open override /*1*/ /*fake_override*/ fun writeObject(/*0*/ p0: java.io.ObjectOutputStream!): kotlin.Unit
} }
@@ -1,6 +1,6 @@
package test package test
public abstract class ClassWithTypePExtendsIterableP</*0*/ P> : kotlin.MutableIterable<P> { public abstract class ClassWithTypePExtendsIterableP</*0*/ P> : kotlin.MutableIterable<P!> {
public constructor ClassWithTypePExtendsIterableP</*0*/ P>() public constructor ClassWithTypePExtendsIterableP</*0*/ P>()
public abstract override /*1*/ /*fake_override*/ fun iterator(): kotlin.MutableIterator<P> public abstract override /*1*/ /*fake_override*/ fun iterator(): kotlin.MutableIterator<P!>
} }
@@ -1,5 +1,5 @@
package test package test
public final class ClassWithTypePP</*0*/ P, /*1*/ Q : P> { public final class ClassWithTypePP</*0*/ P, /*1*/ Q : P!> {
public constructor ClassWithTypePP</*0*/ P, /*1*/ Q : P>() public constructor ClassWithTypePP</*0*/ P, /*1*/ Q : P!>()
} }
@@ -1,5 +1,5 @@
package test package test
public open class ClassWithTypePRefNext</*0*/ R : kotlin.Iterable<P>?, /*1*/ P> { public open class ClassWithTypePRefNext</*0*/ R : kotlin.(Mutable)Iterable<P!>!, /*1*/ P> {
public constructor ClassWithTypePRefNext</*0*/ R : kotlin.Iterable<P>?, /*1*/ P>() public constructor ClassWithTypePRefNext</*0*/ R : kotlin.(Mutable)Iterable<P!>!, /*1*/ P>()
} }
@@ -1,5 +1,5 @@
package test package test
public final class ClassWithTypePRefSelf</*0*/ P : kotlin.Enum<P>?> { public final class ClassWithTypePRefSelf</*0*/ P : kotlin.Enum<P!>!> {
public constructor ClassWithTypePRefSelf</*0*/ P : kotlin.Enum<P>?>() public constructor ClassWithTypePRefSelf</*0*/ P : kotlin.Enum<P!>!>()
} }
@@ -1,5 +1,5 @@
package test package test
public final class ClassWithTypePRefSelfAndClass</*0*/ P : test.ClassWithTypePRefSelfAndClass<P>?> { public final class ClassWithTypePRefSelfAndClass</*0*/ P : test.ClassWithTypePRefSelfAndClass<P!>!> {
public constructor ClassWithTypePRefSelfAndClass</*0*/ P : test.ClassWithTypePRefSelfAndClass<P>?>() public constructor ClassWithTypePRefSelfAndClass</*0*/ P : test.ClassWithTypePRefSelfAndClass<P!>!>()
} }
@@ -2,5 +2,5 @@ package test
public open class FieldOfArrayType { public open class FieldOfArrayType {
public constructor FieldOfArrayType() public constructor FieldOfArrayType()
public final var files: kotlin.Array<java.io.File>? public final var files: kotlin.Array<(out) java.io.File!>!
} }
@@ -4,17 +4,17 @@ public final class InheritMethodsDifferentReturnTypes {
public constructor InheritMethodsDifferentReturnTypes() public constructor InheritMethodsDifferentReturnTypes()
public trait Sub : test.InheritMethodsDifferentReturnTypes.Super1, test.InheritMethodsDifferentReturnTypes.Super2 { public trait Sub : test.InheritMethodsDifferentReturnTypes.Super1, test.InheritMethodsDifferentReturnTypes.Super2 {
public abstract override /*2*/ /*fake_override*/ fun bar(): kotlin.String? public abstract override /*2*/ /*fake_override*/ fun bar(): kotlin.String!
public abstract override /*2*/ /*fake_override*/ fun foo(): kotlin.String? public abstract override /*2*/ /*fake_override*/ fun foo(): kotlin.String!
} }
public trait Super1 { public trait Super1 {
public abstract fun bar(): kotlin.String? public abstract fun bar(): kotlin.String!
public abstract fun foo(): kotlin.CharSequence? public abstract fun foo(): kotlin.CharSequence!
} }
public trait Super2 { public trait Super2 {
public abstract fun bar(): kotlin.CharSequence? public abstract fun bar(): kotlin.CharSequence!
public abstract fun foo(): kotlin.String? public abstract fun foo(): kotlin.String!
} }
} }
@@ -3,18 +3,18 @@ package test
public final class InheritMethodsDifferentReturnTypesGeneric { public final class InheritMethodsDifferentReturnTypesGeneric {
public constructor InheritMethodsDifferentReturnTypesGeneric() public constructor InheritMethodsDifferentReturnTypesGeneric()
public trait Sub : test.InheritMethodsDifferentReturnTypesGeneric.Super1<kotlin.String, kotlin.CharSequence>, test.InheritMethodsDifferentReturnTypesGeneric.Super2<kotlin.CharSequence, kotlin.String> { public trait Sub : test.InheritMethodsDifferentReturnTypesGeneric.Super1<kotlin.String!, kotlin.CharSequence!>, test.InheritMethodsDifferentReturnTypesGeneric.Super2<kotlin.CharSequence!, kotlin.String!> {
public abstract override /*2*/ /*fake_override*/ fun bar(): kotlin.String? public abstract override /*2*/ /*fake_override*/ fun bar(): kotlin.String!
public abstract override /*2*/ /*fake_override*/ fun foo(): kotlin.String? public abstract override /*2*/ /*fake_override*/ fun foo(): kotlin.String!
} }
public trait Super1</*0*/ F, /*1*/ B> { public trait Super1</*0*/ F, /*1*/ B> {
public abstract fun bar(): B? public abstract fun bar(): B!
public abstract fun foo(): F? public abstract fun foo(): F!
} }
public trait Super2</*0*/ FF, /*1*/ BB> { public trait Super2</*0*/ FF, /*1*/ BB> {
public abstract fun bar(): BB? public abstract fun bar(): BB!
public abstract fun foo(): FF? public abstract fun foo(): FF!
} }
} }
@@ -9,6 +9,6 @@ public open class InnerClassesInGeneric</*0*/ P, /*1*/ Q> {
public open inner class Inner2 : test.InnerClassesInGeneric.Inner { public open inner class Inner2 : test.InnerClassesInGeneric.Inner {
public constructor Inner2() public constructor Inner2()
public open fun iterator(): kotlin.MutableIterator<P>? public open fun iterator(): kotlin.(Mutable)Iterator<P!>!
} }
} }
@@ -5,6 +5,6 @@ public final class MethodReferencesOuterClassTP</*0*/ P> {
public final inner class Inner { public final inner class Inner {
public constructor Inner() public constructor Inner()
public final fun </*0*/ Q : P> f(): kotlin.Unit public final fun </*0*/ Q : P!> f(): kotlin.Unit
} }
} }
@@ -2,5 +2,5 @@ package test
public open class MethodTypePOneUpperBound { public open class MethodTypePOneUpperBound {
public constructor MethodTypePOneUpperBound() public constructor MethodTypePOneUpperBound()
public open fun </*0*/ T : kotlin.Cloneable?> bar(): kotlin.Unit public open fun </*0*/ T : kotlin.Cloneable!> bar(): kotlin.Unit
} }
@@ -2,5 +2,5 @@ package test
public open class MethodTypePTwoUpperBounds { public open class MethodTypePTwoUpperBounds {
public constructor MethodTypePTwoUpperBounds() public constructor MethodTypePTwoUpperBounds()
public open fun </*0*/ T : kotlin.Cloneable?> foo(): kotlin.Unit where T : java.lang.Runnable? public open fun </*0*/ T : kotlin.Cloneable!> foo(): kotlin.Unit where T : java.lang.Runnable!
} }
@@ -2,5 +2,5 @@ package test
public final class MethodWithTypePP { public final class MethodWithTypePP {
public constructor MethodWithTypePP() public constructor MethodWithTypePP()
public final fun </*0*/ P, /*1*/ Q : P> f(): kotlin.Unit public final fun </*0*/ P, /*1*/ Q : P!> f(): kotlin.Unit
} }
@@ -2,5 +2,5 @@ package test
public open class MethodWithTypePRefClassP</*0*/ P> { public open class MethodWithTypePRefClassP</*0*/ P> {
public constructor MethodWithTypePRefClassP</*0*/ P>() public constructor MethodWithTypePRefClassP</*0*/ P>()
public final fun </*0*/ Q : P> f(): kotlin.Unit public final fun </*0*/ Q : P!> f(): kotlin.Unit
} }
@@ -2,5 +2,5 @@ package test
public final class MethosWithPRefTP { public final class MethosWithPRefTP {
public constructor MethosWithPRefTP() public constructor MethosWithPRefTP()
public final fun </*0*/ P> f(/*0*/ p0: P?): kotlin.Unit public final fun </*0*/ P> f(/*0*/ p0: P!): kotlin.Unit
} }
@@ -1,5 +1,5 @@
package test package test
public open class MyException { public open class MyException {
public constructor MyException(/*0*/ p0: kotlin.String?, /*1*/ p1: kotlin.Throwable?) public constructor MyException(/*0*/ p0: kotlin.String!, /*1*/ p1: kotlin.Throwable!)
} }
@@ -3,12 +3,12 @@ package test
public trait RawTypeWithUpperBound { public trait RawTypeWithUpperBound {
public trait Bar { public trait Bar {
public abstract fun f(/*0*/ p0: test.RawTypeWithUpperBound.Foo<out kotlin.CharSequence?>?): kotlin.Unit public abstract fun f(/*0*/ p0: test.RawTypeWithUpperBound.Foo<out kotlin.CharSequence!>!): kotlin.Unit
} }
public trait Foo</*0*/ T : kotlin.CharSequence?> { public trait Foo</*0*/ T : kotlin.CharSequence!> {
} }
// Static members // Static members
public final /*synthesized*/ fun Bar(/*0*/ function: (test.RawTypeWithUpperBound.Foo<out kotlin.CharSequence?>?) -> kotlin.Unit): test.RawTypeWithUpperBound.Bar public /*synthesized*/ fun Bar(/*0*/ function: (test.RawTypeWithUpperBound.Foo<out kotlin.CharSequence!>!) -> kotlin.Unit): test.RawTypeWithUpperBound.Bar
} }
@@ -1,6 +1,6 @@
package test package test
public trait RemoveRedundantProjectionKind { public trait RemoveRedundantProjectionKind {
public abstract fun f(/*0*/ p0: kotlin.Collection<kotlin.CharSequence?>?): kotlin.Unit public abstract fun f(/*0*/ p0: (kotlin.MutableCollection<out kotlin.CharSequence!>..kotlin.Collection<kotlin.CharSequence!>?)): kotlin.Unit
public abstract fun f(/*0*/ p0: kotlin.Comparable<kotlin.CharSequence?>?): kotlin.Unit public abstract fun f(/*0*/ p0: kotlin.Comparable<kotlin.CharSequence!>!): kotlin.Unit
} }
@@ -2,8 +2,8 @@ package test
public final class UnboundWildcard { public final class UnboundWildcard {
public constructor UnboundWildcard() public constructor UnboundWildcard()
public final fun foo(): test.UnboundWildcard.MyClass<out kotlin.CharSequence?>? public final fun foo(): test.UnboundWildcard.MyClass<out kotlin.CharSequence!>!
public trait MyClass</*0*/ T : kotlin.CharSequence?> { public trait MyClass</*0*/ T : kotlin.CharSequence!> {
} }
} }
@@ -1,5 +1,5 @@
package test package test
public open class ConstructorGenericDeep { public open class ConstructorGenericDeep {
public constructor ConstructorGenericDeep(/*0*/ p0: java.lang.Class<kotlin.Any?>?) public constructor ConstructorGenericDeep(/*0*/ p0: java.lang.Class<kotlin.Any!>!)
} }
@@ -1,5 +1,5 @@
package test package test
public open class ConstructorGenericSimple { public open class ConstructorGenericSimple {
public constructor ConstructorGenericSimple(/*0*/ p0: kotlin.Any?) public constructor ConstructorGenericSimple(/*0*/ p0: kotlin.Any!)
} }
@@ -1,5 +1,5 @@
package test package test
public open class ConstructorGenericUpperBound { public open class ConstructorGenericUpperBound {
public constructor ConstructorGenericUpperBound(/*0*/ p0: java.util.RandomAccess?) public constructor ConstructorGenericUpperBound(/*0*/ p0: java.util.RandomAccess!)
} }
@@ -3,5 +3,5 @@ package test
public open class DifferentGetterAndSetter { public open class DifferentGetterAndSetter {
public constructor DifferentGetterAndSetter() public constructor DifferentGetterAndSetter()
public open fun getSomething(): kotlin.Int public open fun getSomething(): kotlin.Int
public open fun setSomething(/*0*/ p0: kotlin.String?): kotlin.Unit public open fun setSomething(/*0*/ p0: kotlin.String!): kotlin.Unit
} }
@@ -2,5 +2,5 @@ package test
public open class JavaBeanVal { public open class JavaBeanVal {
public constructor JavaBeanVal() public constructor JavaBeanVal()
public open fun getColor(): kotlin.String? public open fun getColor(): kotlin.String!
} }
@@ -2,6 +2,6 @@ package test
public open class JavaBeanVar { public open class JavaBeanVar {
public constructor JavaBeanVar() public constructor JavaBeanVar()
public open fun getColor(): kotlin.String? public open fun getColor(): kotlin.String!
public open fun setColor(/*0*/ p0: kotlin.String?): kotlin.Unit public open fun setColor(/*0*/ p0: kotlin.String!): kotlin.Unit
} }
@@ -2,6 +2,6 @@ package test
public open class JavaBeanVarOfGenericType</*0*/ P> { public open class JavaBeanVarOfGenericType</*0*/ P> {
public constructor JavaBeanVarOfGenericType</*0*/ P>() public constructor JavaBeanVarOfGenericType</*0*/ P>()
public open fun getCharacters(): java.util.ArrayList<P>? public open fun getCharacters(): java.util.ArrayList<P!>!
public open fun setCharacters(/*0*/ p0: java.util.ArrayList<P>?): kotlin.Unit public open fun setCharacters(/*0*/ p0: java.util.ArrayList<P!>!): kotlin.Unit
} }
@@ -3,5 +3,5 @@ package test
public open class TwoSetters { public open class TwoSetters {
public constructor TwoSetters() public constructor TwoSetters()
public open fun setSize(/*0*/ p0: kotlin.Int): kotlin.Unit public open fun setSize(/*0*/ p0: kotlin.Int): kotlin.Unit
public open fun setSize(/*0*/ p0: kotlin.String?): kotlin.Unit public open fun setSize(/*0*/ p0: kotlin.String!): kotlin.Unit
} }
@@ -3,5 +3,5 @@ package test
public open class PropertySimpleType { public open class PropertySimpleType {
public constructor PropertySimpleType() public constructor PropertySimpleType()
public final var fieldOne: kotlin.String public final var fieldOne: kotlin.String
public final var fieldTwo: kotlin.String? public final var fieldTwo: kotlin.String!
} }
@@ -2,8 +2,8 @@ package test
public final class StarProjection { public final class StarProjection {
public constructor StarProjection() public constructor StarProjection()
public final fun foo(): test.StarProjection.MyClass<out kotlin.CharSequence?> public final fun foo(): test.StarProjection.MyClass<out kotlin.CharSequence!>
public trait MyClass</*0*/ T : kotlin.CharSequence?> { public trait MyClass</*0*/ T : kotlin.CharSequence!> {
} }
} }
@@ -2,5 +2,5 @@ package test
public open class ConflictingProjectionKind { public open class ConflictingProjectionKind {
public constructor ConflictingProjectionKind() public constructor ConflictingProjectionKind()
public open fun foo(/*0*/ p0: kotlin.List<kotlin.Number>?): kotlin.Unit public open fun foo(/*0*/ p0: kotlin.(Mutable)List<kotlin.Number!>!): kotlin.Unit
} }
@@ -2,5 +2,5 @@ package test
public open class ExplicitFieldGettersAndSetters { public open class ExplicitFieldGettersAndSetters {
public constructor ExplicitFieldGettersAndSetters() public constructor ExplicitFieldGettersAndSetters()
public final var foo: kotlin.String? public final var foo: kotlin.String!
} }
@@ -2,5 +2,5 @@ package test
public open class ExtraUpperBound { public open class ExtraUpperBound {
public constructor ExtraUpperBound() public constructor ExtraUpperBound()
public open fun </*0*/ A : java.lang.Runnable?> foo(): kotlin.String? public open fun </*0*/ A : java.lang.Runnable!> foo(): kotlin.String!
} }
@@ -2,5 +2,5 @@ package test
public open class MissingUpperBound { public open class MissingUpperBound {
public constructor MissingUpperBound() public constructor MissingUpperBound()
public open fun </*0*/ A : java.lang.Runnable?> foo(): kotlin.String? where A : kotlin.Cloneable? public open fun </*0*/ A : java.lang.Runnable!> foo(): kotlin.String! where A : kotlin.Cloneable!
} }
@@ -2,5 +2,5 @@ package test
public open class NoFieldTypeRef { public open class NoFieldTypeRef {
public constructor NoFieldTypeRef() public constructor NoFieldTypeRef()
public final var foo: kotlin.String? public final var foo: kotlin.String!
} }
@@ -2,5 +2,5 @@ package test
public open class NotVarargReplacedWithVararg { public open class NotVarargReplacedWithVararg {
public constructor NotVarargReplacedWithVararg() public constructor NotVarargReplacedWithVararg()
public open fun foo(/*0*/ p0: kotlin.String?): kotlin.Unit public open fun foo(/*0*/ p0: kotlin.String!): kotlin.Unit
} }
@@ -2,5 +2,5 @@ package test
public open class ReturnTypeMissing { public open class ReturnTypeMissing {
public constructor ReturnTypeMissing() public constructor ReturnTypeMissing()
public open fun foo(/*0*/ p0: kotlin.String?): kotlin.Int public open fun foo(/*0*/ p0: kotlin.String!): kotlin.Int
} }
@@ -2,5 +2,5 @@ package test
public open class SyntaxError { public open class SyntaxError {
public constructor SyntaxError() public constructor SyntaxError()
public open fun foo(): kotlin.Int? public open fun foo(): kotlin.Int!
} }
@@ -2,5 +2,5 @@ package test
public open class SyntaxErrorInFieldAnnotation { public open class SyntaxErrorInFieldAnnotation {
public constructor SyntaxErrorInFieldAnnotation() public constructor SyntaxErrorInFieldAnnotation()
public final var foo: kotlin.String? public final var foo: kotlin.String!
} }
@@ -2,5 +2,5 @@ package test
public open class VarargReplacedWithNotVararg { public open class VarargReplacedWithNotVararg {
public constructor VarargReplacedWithNotVararg() public constructor VarargReplacedWithNotVararg()
public open fun foo(/*0*/ vararg p0: kotlin.String? /*kotlin.Array<kotlin.String?>*/): kotlin.Unit public open fun foo(/*0*/ vararg p0: kotlin.String! /*kotlin.Array<(out) kotlin.String!>!*/): kotlin.Unit
} }
@@ -2,5 +2,5 @@ package test
public open class WrongFieldInitializer { public open class WrongFieldInitializer {
public constructor WrongFieldInitializer() public constructor WrongFieldInitializer()
public final var foo: kotlin.String? public final var foo: kotlin.String!
} }
@@ -2,6 +2,6 @@ package test
public open class WrongFieldMutability { public open class WrongFieldMutability {
public constructor WrongFieldMutability() public constructor WrongFieldMutability()
public final val fooFinal: kotlin.String? = "Test" public final val fooFinal: kotlin.String! = "Test"
public final var fooNotFinal: kotlin.String? public final var fooNotFinal: kotlin.String!
} }
@@ -2,5 +2,5 @@ package test
public open class WrongFieldName { public open class WrongFieldName {
public constructor WrongFieldName() public constructor WrongFieldName()
public final var foo: kotlin.String? public final var foo: kotlin.String!
} }
@@ -2,5 +2,5 @@ package test
public open class WrongMethodName { public open class WrongMethodName {
public constructor WrongMethodName() public constructor WrongMethodName()
public open fun foo(): kotlin.String? public open fun foo(): kotlin.String!
} }
@@ -2,5 +2,5 @@ package test
public open class WrongTypeName1 { public open class WrongTypeName1 {
public constructor WrongTypeName1() public constructor WrongTypeName1()
public open fun foo(/*0*/ p0: kotlin.String?): kotlin.String? public open fun foo(/*0*/ p0: kotlin.String!): kotlin.String!
} }
@@ -2,5 +2,5 @@ package test
public open class WrongTypeName2 { public open class WrongTypeName2 {
public constructor WrongTypeName2() public constructor WrongTypeName2()
public open fun foo(/*0*/ p0: kotlin.String?): kotlin.String? public open fun foo(/*0*/ p0: kotlin.String!): kotlin.String!
} }
@@ -2,5 +2,5 @@ package test
public open class WrongTypeName3 { public open class WrongTypeName3 {
public constructor WrongTypeName3() public constructor WrongTypeName3()
public open fun foo(/*0*/ p0: kotlin.String?): kotlin.String? public open fun foo(/*0*/ p0: kotlin.String!): kotlin.String!
} }
@@ -2,5 +2,5 @@ package test
public open class WrongTypeParameterBoundStructure1 { public open class WrongTypeParameterBoundStructure1 {
public constructor WrongTypeParameterBoundStructure1() public constructor WrongTypeParameterBoundStructure1()
public open fun </*0*/ A, /*1*/ B : java.lang.Runnable?> foo(/*0*/ p0: A?, /*1*/ p1: kotlin.List<B>?): kotlin.Unit where B : kotlin.List<kotlin.Cloneable>? public open fun </*0*/ A, /*1*/ B : java.lang.Runnable!> foo(/*0*/ p0: A!, /*1*/ p1: (kotlin.MutableList<out B!>..kotlin.List<B!>?)): kotlin.Unit where B : kotlin.(Mutable)List<kotlin.Cloneable!>!
} }
@@ -2,5 +2,5 @@ package test
public open class WrongTypeParameterBoundStructure2 { public open class WrongTypeParameterBoundStructure2 {
public constructor WrongTypeParameterBoundStructure2() public constructor WrongTypeParameterBoundStructure2()
public open fun </*0*/ A, /*1*/ B : java.lang.Runnable?> foo(/*0*/ p0: A?, /*1*/ p1: kotlin.List<B>?): kotlin.Unit where B : kotlin.List<kotlin.Cloneable>? public open fun </*0*/ A, /*1*/ B : java.lang.Runnable!> foo(/*0*/ p0: A!, /*1*/ p1: (kotlin.MutableList<out B!>..kotlin.List<B!>?)): kotlin.Unit where B : kotlin.(Mutable)List<kotlin.Cloneable!>!
} }
@@ -2,5 +2,5 @@ package test
public open class WrongTypeParametersCount { public open class WrongTypeParametersCount {
public constructor WrongTypeParametersCount() public constructor WrongTypeParametersCount()
public open fun </*0*/ A, /*1*/ B> foo(/*0*/ p0: A?, /*1*/ p1: kotlin.List<B>?): kotlin.Unit public open fun </*0*/ A, /*1*/ B> foo(/*0*/ p0: A!, /*1*/ p1: (kotlin.MutableList<out B!>..kotlin.List<B!>?)): kotlin.Unit
} }
@@ -2,5 +2,5 @@ package test
public open class WrongValueParametersCount { public open class WrongValueParametersCount {
public constructor WrongValueParametersCount() public constructor WrongValueParametersCount()
public open fun foo(): kotlin.Int? public open fun foo(): kotlin.Int!
} }
@@ -4,11 +4,11 @@ public trait NotNullToNullable {
public trait Sub : test.NotNullToNullable.Super { public trait Sub : test.NotNullToNullable.Super {
public abstract override /*1*/ /*fake_override*/ fun dummy(): kotlin.Unit public abstract override /*1*/ /*fake_override*/ fun dummy(): kotlin.Unit
public abstract override /*1*/ fun foo(/*0*/ p0: kotlin.String): kotlin.Unit public abstract override /*1*/ fun foo(/*0*/ p0: kotlin.String!): kotlin.Unit
} }
public trait Super { public trait Super {
public abstract fun dummy(): kotlin.Unit public abstract fun dummy(): kotlin.Unit
public abstract fun foo(/*0*/ p0: kotlin.String): kotlin.Unit public abstract fun foo(/*0*/ p0: kotlin.String!): kotlin.Unit
} }
} }
@@ -4,11 +4,11 @@ public trait NullableToNotNull {
public trait Sub : test.NullableToNotNull.Super { public trait Sub : test.NullableToNotNull.Super {
public abstract override /*1*/ /*fake_override*/ fun dummy(): kotlin.Unit public abstract override /*1*/ /*fake_override*/ fun dummy(): kotlin.Unit
public abstract override /*1*/ fun foo(/*0*/ p0: kotlin.String?): kotlin.Unit public abstract override /*1*/ fun foo(/*0*/ p0: kotlin.String!): kotlin.Unit
} }
public trait Super { public trait Super {
public abstract fun dummy(): kotlin.Unit public abstract fun dummy(): kotlin.Unit
public abstract fun foo(/*0*/ p0: kotlin.String?): kotlin.Unit public abstract fun foo(/*0*/ p0: kotlin.String!): kotlin.Unit
} }
} }
@@ -4,6 +4,6 @@ public open class SeveralSamParameters {
public constructor SeveralSamParameters() public constructor SeveralSamParameters()
// Static members // Static members
public /*synthesized*/ fun findMaxAndInvokeCallback(/*0*/ p0: ((kotlin.String, kotlin.String) -> kotlin.Int)?, /*1*/ p1: kotlin.String?, /*2*/ p2: kotlin.String?, /*3*/ p3: (() -> kotlin.Unit)?): kotlin.String? public /*synthesized*/ fun findMaxAndInvokeCallback(/*0*/ p0: ((kotlin.String!, kotlin.String!) -> kotlin.Int)!, /*1*/ p1: kotlin.String!, /*2*/ p2: kotlin.String!, /*3*/ p3: (() -> kotlin.Unit)!): kotlin.String!
public open fun findMaxAndInvokeCallback(/*0*/ p0: java.util.Comparator<kotlin.String!>!, /*1*/ p1: kotlin.String!, /*2*/ p2: kotlin.String!, /*3*/ p3: java.lang.Runnable!): kotlin.String! public open fun findMaxAndInvokeCallback(/*0*/ p0: java.util.Comparator<kotlin.String!>!, /*1*/ p1: kotlin.String!, /*2*/ p2: kotlin.String!, /*3*/ p3: java.lang.Runnable!): kotlin.String!
} }
@@ -2,6 +2,6 @@ package test
public open class TypeParameterOfClass</*0*/ T> { public open class TypeParameterOfClass</*0*/ T> {
public constructor TypeParameterOfClass</*0*/ T>() public constructor TypeParameterOfClass</*0*/ T>()
public final /*synthesized*/ fun foo(/*0*/ p0: ((T, T) -> kotlin.Int)?): kotlin.Unit public final /*synthesized*/ fun foo(/*0*/ p0: ((T!, T!) -> kotlin.Int)!): kotlin.Unit
public open fun foo(/*0*/ p0: java.util.Comparator<T!>!): kotlin.Unit public open fun foo(/*0*/ p0: java.util.Comparator<T!>!): kotlin.Unit
} }
@@ -4,10 +4,10 @@ public open class TypeParameterOfMethod {
public constructor TypeParameterOfMethod() public constructor TypeParameterOfMethod()
// Static members // Static members
public /*synthesized*/ fun </*0*/ T> max(/*0*/ p0: ((T, T) -> kotlin.Int)?, /*1*/ p1: T?, /*2*/ p2: T?): T? public /*synthesized*/ fun </*0*/ T> max(/*0*/ p0: ((T!, T!) -> kotlin.Int)!, /*1*/ p1: T!, /*2*/ p2: T!): T!
public open fun </*0*/ T> max(/*0*/ p0: java.util.Comparator<T!>!, /*1*/ p1: T!, /*2*/ p2: T!): T! public open fun </*0*/ T> max(/*0*/ p0: java.util.Comparator<T!>!, /*1*/ p1: T!, /*2*/ p2: T!): T!
public /*synthesized*/ fun </*0*/ T : kotlin.CharSequence?> max2(/*0*/ p0: ((T, T) -> kotlin.Int)?, /*1*/ p1: T?, /*2*/ p2: T?): T? public /*synthesized*/ fun </*0*/ T : kotlin.CharSequence!> max2(/*0*/ p0: ((T!, T!) -> kotlin.Int)!, /*1*/ p1: T!, /*2*/ p2: T!): T!
public open fun </*0*/ T : kotlin.CharSequence!> max2(/*0*/ p0: java.util.Comparator<T!>!, /*1*/ p1: T!, /*2*/ p2: T!): T! public open fun </*0*/ T : kotlin.CharSequence!> max2(/*0*/ p0: java.util.Comparator<T!>!, /*1*/ p1: T!, /*2*/ p2: T!): T!
public /*synthesized*/ fun </*0*/ A : kotlin.CharSequence?, /*1*/ B : kotlin.List<A>?> method(/*0*/ p0: ((A, A) -> kotlin.Int)?, /*1*/ p1: B?): kotlin.Unit public /*synthesized*/ fun </*0*/ A : kotlin.CharSequence!, /*1*/ B : kotlin.(Mutable)List<A!>!> method(/*0*/ p0: ((A!, A!) -> kotlin.Int)!, /*1*/ p1: B!): kotlin.Unit
public open fun </*0*/ A : kotlin.CharSequence!, /*1*/ B : kotlin.(Mutable)List<A!>!> method(/*0*/ p0: java.util.Comparator<A!>!, /*1*/ p1: B!): kotlin.Unit public open fun </*0*/ A : kotlin.CharSequence!, /*1*/ B : kotlin.(Mutable)List<A!>!> method(/*0*/ p0: java.util.Comparator<A!>!, /*1*/ p1: B!): kotlin.Unit
} }
@@ -5,7 +5,7 @@ public open class TypeParameterOfOuterClass</*0*/ T> {
public open inner class Inner { public open inner class Inner {
public constructor Inner() public constructor Inner()
public final /*synthesized*/ fun foo(/*0*/ p0: ((T, T) -> kotlin.Int)?): kotlin.Unit public final /*synthesized*/ fun foo(/*0*/ p0: ((T!, T!) -> kotlin.Int)!): kotlin.Unit
public open fun foo(/*0*/ p0: java.util.Comparator<T!>!): kotlin.Unit public open fun foo(/*0*/ p0: java.util.Comparator<T!>!): kotlin.Unit
} }
} }
@@ -3,28 +3,28 @@ package test
public trait InheritedSameAdaptersWithSubstitution { public trait InheritedSameAdaptersWithSubstitution {
public trait Sub : test.InheritedSameAdaptersWithSubstitution.Super1, test.InheritedSameAdaptersWithSubstitution.Super2Substituted { public trait Sub : test.InheritedSameAdaptersWithSubstitution.Super1, test.InheritedSameAdaptersWithSubstitution.Super2Substituted {
public final override /*2*/ /*fake_override*/ fun foo(/*0*/ p0: ((kotlin.String, kotlin.String) -> kotlin.Int)?): kotlin.Unit public final override /*2*/ /*fake_override*/ fun foo(/*0*/ p0: ((kotlin.String!, kotlin.String!) -> kotlin.Int)!): kotlin.Unit
public abstract override /*2*/ /*fake_override*/ fun foo(/*0*/ p0: java.util.Comparator<kotlin.String>?): kotlin.Unit public abstract override /*2*/ /*fake_override*/ fun foo(/*0*/ p0: java.util.Comparator<kotlin.String!>!): kotlin.Unit
} }
public trait Super1 { public trait Super1 {
public final /*synthesized*/ fun foo(/*0*/ p0: ((kotlin.String, kotlin.String) -> kotlin.Int)?): kotlin.Unit public final /*synthesized*/ fun foo(/*0*/ p0: ((kotlin.String!, kotlin.String!) -> kotlin.Int)!): kotlin.Unit
public abstract fun foo(/*0*/ p0: java.util.Comparator<kotlin.String>?): kotlin.Unit public abstract fun foo(/*0*/ p0: java.util.Comparator<kotlin.String!>!): kotlin.Unit
} }
public trait Super2</*0*/ T> { public trait Super2</*0*/ T> {
public final /*synthesized*/ fun foo(/*0*/ p0: ((T, T) -> kotlin.Int)?): kotlin.Unit public final /*synthesized*/ fun foo(/*0*/ p0: ((T!, T!) -> kotlin.Int)!): kotlin.Unit
public abstract fun foo(/*0*/ p0: java.util.Comparator<T>?): kotlin.Unit public abstract fun foo(/*0*/ p0: java.util.Comparator<T!>!): kotlin.Unit
} }
public trait Super2Substituted : test.InheritedSameAdaptersWithSubstitution.Super2<kotlin.String> { public trait Super2Substituted : test.InheritedSameAdaptersWithSubstitution.Super2<kotlin.String!> {
public final override /*1*/ /*fake_override*/ fun foo(/*0*/ p0: ((kotlin.String, kotlin.String) -> kotlin.Int)?): kotlin.Unit public final override /*1*/ /*fake_override*/ fun foo(/*0*/ p0: ((kotlin.String!, kotlin.String!) -> kotlin.Int)!): kotlin.Unit
public abstract override /*1*/ /*fake_override*/ fun foo(/*0*/ p0: java.util.Comparator<kotlin.String>?): kotlin.Unit public abstract override /*1*/ /*fake_override*/ fun foo(/*0*/ p0: java.util.Comparator<kotlin.String!>!): kotlin.Unit
} }
// Static members // Static members
public final /*synthesized*/ fun Sub(/*0*/ function: (java.util.Comparator<kotlin.String>?) -> kotlin.Unit): test.InheritedSameAdaptersWithSubstitution.Sub public /*synthesized*/ fun Sub(/*0*/ function: (java.util.Comparator<kotlin.String!>!) -> kotlin.Unit): test.InheritedSameAdaptersWithSubstitution.Sub
public final /*synthesized*/ fun Super1(/*0*/ function: (java.util.Comparator<kotlin.String>?) -> kotlin.Unit): test.InheritedSameAdaptersWithSubstitution.Super1 public /*synthesized*/ fun Super1(/*0*/ function: (java.util.Comparator<kotlin.String!>!) -> kotlin.Unit): test.InheritedSameAdaptersWithSubstitution.Super1
public final /*synthesized*/ fun </*0*/ T> Super2(/*0*/ function: (java.util.Comparator<T>?) -> kotlin.Unit): test.InheritedSameAdaptersWithSubstitution.Super2<T> public /*synthesized*/ fun </*0*/ T> Super2(/*0*/ function: (java.util.Comparator<T!>!) -> kotlin.Unit): test.InheritedSameAdaptersWithSubstitution.Super2<T>
public final /*synthesized*/ fun Super2Substituted(/*0*/ function: (java.util.Comparator<kotlin.String>?) -> kotlin.Unit): test.InheritedSameAdaptersWithSubstitution.Super2Substituted public /*synthesized*/ fun Super2Substituted(/*0*/ function: (java.util.Comparator<kotlin.String!>!) -> kotlin.Unit): test.InheritedSameAdaptersWithSubstitution.Super2Substituted
} }
@@ -45,7 +45,7 @@ class LazyJavaTypeResolver(
val canonicalText = javaType.getCanonicalText() val canonicalText = javaType.getCanonicalText()
val jetType = JavaToKotlinClassMap.getInstance().mapPrimitiveKotlinClass(canonicalText) val jetType = JavaToKotlinClassMap.getInstance().mapPrimitiveKotlinClass(canonicalText)
assert(jetType != null, "Primitive type is not found: " + canonicalText) assert(jetType != null, "Primitive type is not found: " + canonicalText)
return jetType!! jetType!!
} }
is JavaClassifierType -> if (PLATFORM_TYPES && attr.allowFlexible && attr.howThisTypeIsUsed != SUPERTYPE) is JavaClassifierType -> if (PLATFORM_TYPES && attr.allowFlexible && attr.howThisTypeIsUsed != SUPERTYPE)
LazyFlexibleJavaClassifierType(javaType, attr) LazyFlexibleJavaClassifierType(javaType, attr)
@@ -271,7 +271,20 @@ class LazyJavaTypeResolver(
) : DelegatingFlexibleType( ) : DelegatingFlexibleType(
LazyJavaClassifierType(javaType, attr.toFlexible(FLEXIBLE_LOWER_BOUND)), LazyJavaClassifierType(javaType, attr.toFlexible(FLEXIBLE_LOWER_BOUND)),
LazyJavaClassifierType(javaType, attr.toFlexible(FLEXIBLE_UPPER_BOUND)) LazyJavaClassifierType(javaType, attr.toFlexible(FLEXIBLE_UPPER_BOUND))
) ), CustomTypeVariable {
override val isTypeVariable: Boolean = lowerBound.getConstructor() == upperBound.getConstructor()
&& lowerBound.getConstructor().getDeclarationDescriptor() is TypeParameterDescriptor
override val typeParameterDescriptor: TypeParameterDescriptor? = if (isTypeVariable) lowerBound.getConstructor().getDeclarationDescriptor() as TypeParameterDescriptor else null
override fun substitutionResult(replacement: JetType): JetType {
return if (replacement.isFlexible()) replacement
else DelegatingFlexibleType(TypeUtils.makeNotNullable(replacement), TypeUtils.makeNullable(replacement))
}
}
private class JavaTypeVariable()
} }
trait JavaTypeAttributes { trait JavaTypeAttributes {
@@ -0,0 +1,35 @@
/*
* Copyright 2010-2014 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.jet.lang.types
import org.jetbrains.jet.lang.descriptors.TypeParameterDescriptor
// To facilitate laziness, any JetType implementation may inherit from this trait,
// even if it turns out that the type an instance represents is not actually a type variable
// (i.e. it is not derived from a type parameter), see isTypeVariable
public trait CustomTypeVariable : JetType {
val isTypeVariable: Boolean
// If typeParameterDescriptor != null <=> isTypeVariable == true, this is not a type variable
val typeParameterDescriptor: TypeParameterDescriptor?
// Throws an exception when isTypeVariable == false
fun substitutionResult(replacement: JetType): JetType
}
fun JetType.isCustomTypeVariable() = (this as? CustomTypeVariable)?.isTypeVariable ?: false
@@ -155,7 +155,7 @@ public class TypeSubstitutor {
// The type is within the substitution range, i.e. T or T? // The type is within the substitution range, i.e. T or T?
JetType type = originalProjection.getType(); JetType type = originalProjection.getType();
Variance originalProjectionKind = originalProjection.getProjectionKind(); Variance originalProjectionKind = originalProjection.getProjectionKind();
if (type instanceof FlexibleType) { if (type instanceof FlexibleType && !TypesPackage.isCustomTypeVariable(type)) {
FlexibleType flexibleType = (FlexibleType) type; FlexibleType flexibleType = (FlexibleType) type;
TypeProjection substitutedLower = TypeProjection substitutedLower =
unsafeSubstitute(new TypeProjectionImpl(originalProjectionKind, flexibleType.getLowerBound()), recursionDepth + 1); unsafeSubstitute(new TypeProjectionImpl(originalProjectionKind, flexibleType.getLowerBound()), recursionDepth + 1);
@@ -185,10 +185,17 @@ public class TypeSubstitutor {
//noinspection ConstantConditions //noinspection ConstantConditions
return TypeUtils.makeStarProjection(typeParameter); return TypeUtils.makeStarProjection(typeParameter);
case NO_CONFLICT: case NO_CONFLICT:
boolean resultingIsNullable = type.isNullable() || replacement.getType().isNullable(); JetType substitutedType;
JetType substitutedType = TypeUtils.makeNullableAsSpecified(replacement.getType(), resultingIsNullable); if (TypesPackage.isCustomTypeVariable(type)) {
Variance resultingProjectionKind = combine(originalProjectionKind, replacement.getProjectionKind()); CustomTypeVariable typeVariable = (CustomTypeVariable) type;
substitutedType = typeVariable.substitutionResult(replacement.getType());
}
else {
boolean resultingIsNullable = type.isNullable() || replacement.getType().isNullable();
substitutedType = TypeUtils.makeNullableAsSpecified(replacement.getType(), resultingIsNullable);
}
Variance resultingProjectionKind = combine(originalProjectionKind, replacement.getProjectionKind());
return new TypeProjectionImpl(resultingProjectionKind, substitutedType); return new TypeProjectionImpl(resultingProjectionKind, substitutedType);
default: default:
throw new IllegalStateException(); throw new IllegalStateException();
@@ -30,6 +30,11 @@ public open class DelegatingFlexibleType(
override val upperBound: JetType override val upperBound: JetType
) : DelegatingType(), FlexibleType { ) : DelegatingType(), FlexibleType {
{
assert (!lowerBound.isFlexible()) { "Lower bound of a flexible type can not be flexible: $lowerBound" }
assert (!upperBound.isFlexible()) { "Upper bound of a flexible type can not be flexible: $upperBound" }
}
override fun getDelegate() = lowerBound override fun getDelegate() = lowerBound
override fun toString() = "('$lowerBound'..'$upperBound')" override fun toString() = "('$lowerBound'..'$upperBound')"