Frontend changes for reified type parameters

Allowing reified only for inline functions and Intrinsics
This commit is contained in:
Denis Zharkov
2014-10-20 14:19:42 +04:00
committed by Andrey Breslav
parent 79c6f2b91b
commit b3691b7358
28 changed files with 822 additions and 414 deletions
@@ -1,6 +1,8 @@
fun <reified T> T.plus(<!UNUSED_PARAMETER!>p<!>: T): T = this
// !DIAGNOSTICS: -NOTHING_TO_INLINE -UNUSED_PARAMETER
fun <reified T> T.invoke(): T = this
inline fun <reified T> T.plus(p: T): T = this
inline fun <reified T> T.invoke(): T = this
fun <A> main(tp: A, any: Any) {
tp <!TYPE_PARAMETER_AS_REIFIED!>+<!> tp
@@ -1,51 +1,67 @@
LazyJavaPackageFragmentProvider@0 {
packageFragments('<root>': FqName@1) = LazyJavaPackageFragment@2['<root>']
packageFragments('A': FqName@3) = null
packageFragments('Any': FqName@4) = null
packageFragments('T': FqName@5) = null
packageFragments('java': FqName@6) = LazyJavaPackageFragment@7['java']
packageFragments('java.lang': FqName@8) = LazyJavaPackageFragment@9['lang']
packageFragments('java.lang.A': FqName@10) = null
packageFragments('java.lang.Any': FqName@11) = null
packageFragments('java.lang.T': FqName@12) = null
packageFragments('kotlin': FqName@13) = null
packageFragments('kotlin.A': FqName@14) = null
packageFragments('kotlin.Any': FqName@15) = null
packageFragments('kotlin.T': FqName@16) = null
packageFragments('kotlin.io': FqName@17) = null
packageFragments('kotlin.jvm': FqName@18) = null
LazyAnnotationDescriptor@0 {
resolutionResults = OverloadResolutionResultsImpl@1
type = JetTypeImpl@2['inline']
valueArguments(ValueParameterDescriptorImpl@3['strategy']) = null
}
LazyJavaPackageFragment@2['<root>'] {
classes('Any': Name@19) = null // through LazyPackageFragmentScopeForJavaPackage@20
classes('any': Name@21) = null // through LazyPackageFragmentScopeForJavaPackage@20
classes('invoke': Name@22) = null // through LazyPackageFragmentScopeForJavaPackage@20
classes('plus': Name@23) = null // through LazyPackageFragmentScopeForJavaPackage@20
classes('tp': Name@24) = null // through LazyPackageFragmentScopeForJavaPackage@20
deserializedPackageScope = Empty@25 // through LazyPackageFragmentScopeForJavaPackage@20
functions('any': Name@21) = EmptyList@26[empty] // through LazyPackageFragmentScopeForJavaPackage@20
functions('invoke': Name@22) = EmptyList@26[empty] // through LazyPackageFragmentScopeForJavaPackage@20
functions('plus': Name@23) = EmptyList@26[empty] // through LazyPackageFragmentScopeForJavaPackage@20
functions('tp': Name@24) = EmptyList@26[empty] // through LazyPackageFragmentScopeForJavaPackage@20
memberIndex = computeMemberIndex$1@27 // through LazyPackageFragmentScopeForJavaPackage@20
LazyAnnotationDescriptor@4 {
resolutionResults = OverloadResolutionResultsImpl@5
type = JetTypeImpl@6['inline']
valueArguments(ValueParameterDescriptorImpl@3['strategy']) = null
}
LazyJavaPackageFragment@7['java'] {
classes('lang': Name@28) = null // through LazyPackageFragmentScopeForJavaPackage@29
deserializedPackageScope = Empty@25 // through LazyPackageFragmentScopeForJavaPackage@29
functions('lang': Name@30) = EmptyList@26[empty] // through LazyPackageFragmentScopeForJavaPackage@29
memberIndex = computeMemberIndex$1@31 // through LazyPackageFragmentScopeForJavaPackage@29
LazyJavaPackageFragmentProvider@7 {
packageFragments('<root>': FqName@8) = LazyJavaPackageFragment@9['<root>']
packageFragments('A': FqName@10) = null
packageFragments('Any': FqName@11) = null
packageFragments('T': FqName@12) = null
packageFragments('inline': FqName@13) = null
packageFragments('java': FqName@14) = LazyJavaPackageFragment@15['java']
packageFragments('java.lang': FqName@16) = LazyJavaPackageFragment@17['lang']
packageFragments('java.lang.A': FqName@18) = null
packageFragments('java.lang.Any': FqName@19) = null
packageFragments('java.lang.T': FqName@20) = null
packageFragments('java.lang.inline': FqName@21) = null
packageFragments('kotlin': FqName@22) = null
packageFragments('kotlin.A': FqName@23) = null
packageFragments('kotlin.Any': FqName@24) = null
packageFragments('kotlin.T': FqName@25) = null
packageFragments('kotlin.inline': FqName@26) = null
packageFragments('kotlin.io': FqName@27) = null
packageFragments('kotlin.jvm': FqName@28) = null
}
LazyJavaPackageFragment@9['lang'] {
classes('any': Name@21) = null // through LazyPackageFragmentScopeForJavaPackage@32
classes('invoke': Name@22) = null // through LazyPackageFragmentScopeForJavaPackage@32
classes('plus': Name@23) = null // through LazyPackageFragmentScopeForJavaPackage@32
classes('tp': Name@24) = null // through LazyPackageFragmentScopeForJavaPackage@32
deserializedPackageScope = Empty@25 // through LazyPackageFragmentScopeForJavaPackage@32
functions('any': Name@21) = EmptyList@26[empty] // through LazyPackageFragmentScopeForJavaPackage@32
functions('invoke': Name@22) = EmptyList@26[empty] // through LazyPackageFragmentScopeForJavaPackage@32
functions('plus': Name@23) = EmptyList@26[empty] // through LazyPackageFragmentScopeForJavaPackage@32
functions('tp': Name@24) = EmptyList@26[empty] // through LazyPackageFragmentScopeForJavaPackage@32
memberIndex = computeMemberIndex$1@33 // through LazyPackageFragmentScopeForJavaPackage@32
LazyJavaPackageFragment@9['<root>'] {
classes('Any': Name@29) = null // through LazyPackageFragmentScopeForJavaPackage@30
classes('any': Name@31) = null // through LazyPackageFragmentScopeForJavaPackage@30
classes('inline': Name@32) = null // through LazyPackageFragmentScopeForJavaPackage@30
classes('invoke': Name@33) = null // through LazyPackageFragmentScopeForJavaPackage@30
classes('plus': Name@34) = null // through LazyPackageFragmentScopeForJavaPackage@30
classes('tp': Name@35) = null // through LazyPackageFragmentScopeForJavaPackage@30
deserializedPackageScope = Empty@36 // through LazyPackageFragmentScopeForJavaPackage@30
functions('any': Name@31) = EmptyList@37[empty] // through LazyPackageFragmentScopeForJavaPackage@30
functions('invoke': Name@33) = EmptyList@37[empty] // through LazyPackageFragmentScopeForJavaPackage@30
functions('plus': Name@34) = EmptyList@37[empty] // through LazyPackageFragmentScopeForJavaPackage@30
functions('tp': Name@35) = EmptyList@37[empty] // through LazyPackageFragmentScopeForJavaPackage@30
memberIndex = computeMemberIndex$1@38 // through LazyPackageFragmentScopeForJavaPackage@30
}
LazyJavaPackageFragment@15['java'] {
classes('lang': Name@39) = null // through LazyPackageFragmentScopeForJavaPackage@40
deserializedPackageScope = Empty@36 // through LazyPackageFragmentScopeForJavaPackage@40
functions('lang': Name@41) = EmptyList@37[empty] // through LazyPackageFragmentScopeForJavaPackage@40
memberIndex = computeMemberIndex$1@42 // through LazyPackageFragmentScopeForJavaPackage@40
}
LazyJavaPackageFragment@17['lang'] {
classes('any': Name@31) = null // through LazyPackageFragmentScopeForJavaPackage@43
classes('invoke': Name@33) = null // through LazyPackageFragmentScopeForJavaPackage@43
classes('plus': Name@34) = null // through LazyPackageFragmentScopeForJavaPackage@43
classes('tp': Name@35) = null // through LazyPackageFragmentScopeForJavaPackage@43
deserializedPackageScope = Empty@36 // through LazyPackageFragmentScopeForJavaPackage@43
functions('any': Name@31) = EmptyList@37[empty] // through LazyPackageFragmentScopeForJavaPackage@43
functions('invoke': Name@33) = EmptyList@37[empty] // through LazyPackageFragmentScopeForJavaPackage@43
functions('plus': Name@34) = EmptyList@37[empty] // through LazyPackageFragmentScopeForJavaPackage@43
functions('tp': Name@35) = EmptyList@37[empty] // through LazyPackageFragmentScopeForJavaPackage@43
memberIndex = computeMemberIndex$1@44 // through LazyPackageFragmentScopeForJavaPackage@43
}
@@ -1,5 +1,5 @@
package
internal fun </*0*/ A> main(/*0*/ tp: A, /*1*/ any: kotlin.Any): kotlin.Unit
internal fun </*0*/ reified T> T.invoke(): T
internal fun </*0*/ reified T> T.plus(/*0*/ p: T): T
kotlin.inline() internal fun </*0*/ reified T> T.invoke(): T
kotlin.inline() internal fun </*0*/ reified T> T.plus(/*0*/ p: T): T
@@ -1,4 +1,4 @@
class C<reified T>
class C<<!REIFIED_TYPE_PARAMETER_NO_INLINE!>reified<!> T>
fun <T> id(p: T): T = p
@@ -1,4 +1,6 @@
fun <reified T> f(): T = throw UnsupportedOperationException()
// !DIAGNOSTICS: -NOTHING_TO_INLINE -UNUSED_PARAMETER
inline fun <reified T> f(): T = throw UnsupportedOperationException()
fun <T> id(p: T): T = p
@@ -1,150 +1,160 @@
LazyJavaClassDescriptor@0['Exception'] {
typeConstructor = LazyJavaClassTypeConstructor@1['Exception']
LazyAnnotationDescriptor@0 {
resolutionResults = OverloadResolutionResultsImpl@1
type = JetTypeImpl@2['inline']
valueArguments(ValueParameterDescriptorImpl@3['strategy']) = null
}
LazyJavaClassDescriptor@2['RuntimeException'] {
typeConstructor = LazyJavaClassTypeConstructor@3['RuntimeException']
LazyJavaClassDescriptor@4['Exception'] {
typeConstructor = LazyJavaClassTypeConstructor@5['Exception']
}
LazyJavaClassDescriptor@4['UnsupportedOperationException'] {
constructors = ArrayList@5[4] { JavaConstructorDescriptor@6['<init>'], JavaConstructorDescriptor@7['<init>'], JavaConstructorDescriptor@8['<init>'], ... } // through LazyJavaClassMemberScope@9
defaultType = JetTypeImpl@10['UnsupportedOperationException']
LazyJavaClassDescriptor@6['RuntimeException'] {
typeConstructor = LazyJavaClassTypeConstructor@7['RuntimeException']
}
LazyJavaClassDescriptor@8['UnsupportedOperationException'] {
constructors = ArrayList@9[4] { JavaConstructorDescriptor@10['<init>'], JavaConstructorDescriptor@11['<init>'], JavaConstructorDescriptor@12['<init>'], ... } // through LazyJavaClassMemberScope@13
defaultType = JetTypeImpl@14['UnsupportedOperationException']
functionTypeForSamInterface = null
typeConstructor = LazyJavaClassTypeConstructor@11['UnsupportedOperationException']
typeConstructor = LazyJavaClassTypeConstructor@15['UnsupportedOperationException']
}
LazyJavaClassTypeConstructor@1['Exception'] {
parameters = ArrayList@12[empty]
supertypes = ArrayList@13[1] { LazyJavaClassifierType@14['Throwable'] }
LazyJavaClassTypeConstructor@5['Exception'] {
parameters = ArrayList@16[empty]
supertypes = ArrayList@17[1] { LazyJavaClassifierType@18['Throwable'] }
}
LazyJavaClassTypeConstructor@3['RuntimeException'] {
parameters = ArrayList@15[empty]
supertypes = ArrayList@16[1] { LazyJavaClassifierType@17['Exception'] }
LazyJavaClassTypeConstructor@7['RuntimeException'] {
parameters = ArrayList@19[empty]
supertypes = ArrayList@20[1] { LazyJavaClassifierType@21['Exception'] }
}
LazyJavaClassTypeConstructor@11['UnsupportedOperationException'] {
parameters = ArrayList@18[empty]
supertypes = ArrayList@19[1] { LazyJavaClassifierType@20['RuntimeException'] }
LazyJavaClassTypeConstructor@15['UnsupportedOperationException'] {
parameters = ArrayList@22[empty]
supertypes = ArrayList@23[1] { LazyJavaClassifierType@24['RuntimeException'] }
}
LazyJavaClassifierType@17['Exception'] {
arguments = ArrayList@21[empty]
classifier = JavaClassImpl@22['Exception']
typeConstructor = LazyJavaClassTypeConstructor@1['Exception']
LazyJavaClassifierType@21['Exception'] {
arguments = ArrayList@25[empty]
classifier = JavaClassImpl@26['Exception']
typeConstructor = LazyJavaClassTypeConstructor@5['Exception']
}
LazyJavaClassifierType@20['RuntimeException'] {
arguments = ArrayList@23[empty]
classifier = JavaClassImpl@24['RuntimeException']
typeConstructor = LazyJavaClassTypeConstructor@3['RuntimeException']
LazyJavaClassifierType@24['RuntimeException'] {
arguments = ArrayList@27[empty]
classifier = JavaClassImpl@28['RuntimeException']
typeConstructor = LazyJavaClassTypeConstructor@7['RuntimeException']
}
LazyJavaClassifierType@25['String'] {
arguments = ArrayList@26[empty]
classifier = JavaClassImpl@27['String']
nullable = 'false': Boolean@28
typeConstructor = DeserializedClassTypeConstructor@29
LazyJavaClassifierType@29['String'] {
arguments = ArrayList@30[empty]
classifier = JavaClassImpl@31['String']
nullable = 'false': Boolean@32
typeConstructor = DeserializedClassTypeConstructor@33
}
LazyJavaClassifierType@30['String'] {
arguments = ArrayList@31[empty]
classifier = JavaClassImpl@32['String']
nullable = 'false': Boolean@28
typeConstructor = DeserializedClassTypeConstructor@29
LazyJavaClassifierType@34['String'] {
arguments = ArrayList@35[empty]
classifier = JavaClassImpl@36['String']
nullable = 'false': Boolean@32
typeConstructor = DeserializedClassTypeConstructor@33
}
LazyJavaClassifierType@33['String'] {
arguments = ArrayList@34[empty]
classifier = JavaClassImpl@32['String']
nullable = 'true': Boolean@35
typeConstructor = DeserializedClassTypeConstructor@29
LazyJavaClassifierType@37['String'] {
arguments = ArrayList@38[empty]
classifier = JavaClassImpl@36['String']
nullable = 'true': Boolean@39
typeConstructor = DeserializedClassTypeConstructor@33
}
LazyJavaClassifierType@36['String'] {
arguments = ArrayList@37[empty]
classifier = JavaClassImpl@27['String']
nullable = 'true': Boolean@35
typeConstructor = DeserializedClassTypeConstructor@29
}
LazyJavaClassifierType@38['Throwable'] {
arguments = ArrayList@39[empty]
classifier = JavaClassImpl@40['Throwable']
nullable = 'false': Boolean@28
typeConstructor = DeserializedClassTypeConstructor@41
LazyJavaClassifierType@40['String'] {
arguments = ArrayList@41[empty]
classifier = JavaClassImpl@31['String']
nullable = 'true': Boolean@39
typeConstructor = DeserializedClassTypeConstructor@33
}
LazyJavaClassifierType@42['Throwable'] {
arguments = ArrayList@43[empty]
classifier = JavaClassImpl@44['Throwable']
nullable = 'false': Boolean@28
typeConstructor = DeserializedClassTypeConstructor@41
nullable = 'false': Boolean@32
typeConstructor = DeserializedClassTypeConstructor@45
}
LazyJavaClassifierType@45['Throwable'] {
arguments = ArrayList@46[empty]
classifier = JavaClassImpl@40['Throwable']
nullable = 'true': Boolean@35
typeConstructor = DeserializedClassTypeConstructor@41
LazyJavaClassifierType@46['Throwable'] {
arguments = ArrayList@47[empty]
classifier = JavaClassImpl@48['Throwable']
nullable = 'false': Boolean@32
typeConstructor = DeserializedClassTypeConstructor@45
}
LazyJavaClassifierType@47['Throwable'] {
arguments = ArrayList@48[empty]
LazyJavaClassifierType@49['Throwable'] {
arguments = ArrayList@50[empty]
classifier = JavaClassImpl@48['Throwable']
nullable = 'true': Boolean@39
typeConstructor = DeserializedClassTypeConstructor@45
}
LazyJavaClassifierType@51['Throwable'] {
arguments = ArrayList@52[empty]
classifier = JavaClassImpl@44['Throwable']
nullable = 'true': Boolean@35
typeConstructor = DeserializedClassTypeConstructor@41
nullable = 'true': Boolean@39
typeConstructor = DeserializedClassTypeConstructor@45
}
LazyJavaClassifierType@14['Throwable'] {
arguments = ArrayList@49[empty]
classifier = JavaClassImpl@50['Throwable']
typeConstructor = DeserializedClassTypeConstructor@41
LazyJavaClassifierType@18['Throwable'] {
arguments = ArrayList@53[empty]
classifier = JavaClassImpl@54['Throwable']
typeConstructor = DeserializedClassTypeConstructor@45
}
LazyJavaPackageFragmentProvider@51 {
packageFragments('<root>': FqName@52) = LazyJavaPackageFragment@53['<root>']
packageFragments('A': FqName@54) = null
packageFragments('Int': FqName@55) = null
packageFragments('T': FqName@56) = null
packageFragments('java': FqName@57) = LazyJavaPackageFragment@58['java']
packageFragments('java.lang': FqName@59) = LazyJavaPackageFragment@60['lang']
packageFragments('java.lang.A': FqName@61) = null
packageFragments('java.lang.Int': FqName@62) = null
packageFragments('java.lang.T': FqName@63) = null
packageFragments('kotlin': FqName@64) = null
packageFragments('kotlin.A': FqName@65) = null
packageFragments('kotlin.Int': FqName@66) = null
packageFragments('kotlin.T': FqName@67) = null
packageFragments('kotlin.io': FqName@68) = null
packageFragments('kotlin.jvm': FqName@69) = null
topLevelClasses(JavaClassImpl@22['Exception']) = LazyJavaClassDescriptor@0['Exception']
topLevelClasses(JavaClassImpl@24['RuntimeException']) = LazyJavaClassDescriptor@2['RuntimeException']
topLevelClasses(JavaClassImpl@70['UnsupportedOperationException']) = LazyJavaClassDescriptor@4['UnsupportedOperationException']
LazyJavaPackageFragmentProvider@55 {
packageFragments('<root>': FqName@56) = LazyJavaPackageFragment@57['<root>']
packageFragments('A': FqName@58) = null
packageFragments('Int': FqName@59) = null
packageFragments('T': FqName@60) = null
packageFragments('inline': FqName@61) = null
packageFragments('java': FqName@62) = LazyJavaPackageFragment@63['java']
packageFragments('java.lang': FqName@64) = LazyJavaPackageFragment@65['lang']
packageFragments('java.lang.A': FqName@66) = null
packageFragments('java.lang.Int': FqName@67) = null
packageFragments('java.lang.T': FqName@68) = null
packageFragments('java.lang.inline': FqName@69) = null
packageFragments('kotlin': FqName@70) = null
packageFragments('kotlin.A': FqName@71) = null
packageFragments('kotlin.Int': FqName@72) = null
packageFragments('kotlin.T': FqName@73) = null
packageFragments('kotlin.inline': FqName@74) = null
packageFragments('kotlin.io': FqName@75) = null
packageFragments('kotlin.jvm': FqName@76) = null
topLevelClasses(JavaClassImpl@26['Exception']) = LazyJavaClassDescriptor@4['Exception']
topLevelClasses(JavaClassImpl@28['RuntimeException']) = LazyJavaClassDescriptor@6['RuntimeException']
topLevelClasses(JavaClassImpl@77['UnsupportedOperationException']) = LazyJavaClassDescriptor@8['UnsupportedOperationException']
}
LazyJavaPackageFragment@53['<root>'] {
classes('Int': Name@71) = null // through LazyPackageFragmentScopeForJavaPackage@72
classes('UnsupportedOperationException': Name@73) = null // through LazyPackageFragmentScopeForJavaPackage@72
classes('f': Name@74) = null // through LazyPackageFragmentScopeForJavaPackage@72
deserializedPackageScope = Empty@75 // through LazyPackageFragmentScopeForJavaPackage@72
functions('UnsupportedOperationException': Name@73) = EmptyList@76[empty] // through LazyPackageFragmentScopeForJavaPackage@72
functions('f': Name@74) = EmptyList@76[empty] // through LazyPackageFragmentScopeForJavaPackage@72
memberIndex = computeMemberIndex$1@77 // through LazyPackageFragmentScopeForJavaPackage@72
LazyJavaPackageFragment@57['<root>'] {
classes('Int': Name@78) = null // through LazyPackageFragmentScopeForJavaPackage@79
classes('UnsupportedOperationException': Name@80) = null // through LazyPackageFragmentScopeForJavaPackage@79
classes('f': Name@81) = null // through LazyPackageFragmentScopeForJavaPackage@79
classes('inline': Name@82) = null // through LazyPackageFragmentScopeForJavaPackage@79
deserializedPackageScope = Empty@83 // through LazyPackageFragmentScopeForJavaPackage@79
functions('UnsupportedOperationException': Name@80) = EmptyList@84[empty] // through LazyPackageFragmentScopeForJavaPackage@79
functions('f': Name@81) = EmptyList@84[empty] // through LazyPackageFragmentScopeForJavaPackage@79
memberIndex = computeMemberIndex$1@85 // through LazyPackageFragmentScopeForJavaPackage@79
}
LazyJavaPackageFragment@58['java'] {
classes('lang': Name@78) = null // through LazyPackageFragmentScopeForJavaPackage@79
deserializedPackageScope = Empty@75 // through LazyPackageFragmentScopeForJavaPackage@79
functions('lang': Name@80) = EmptyList@76[empty] // through LazyPackageFragmentScopeForJavaPackage@79
memberIndex = computeMemberIndex$1@81 // through LazyPackageFragmentScopeForJavaPackage@79
LazyJavaPackageFragment@63['java'] {
classes('lang': Name@86) = null // through LazyPackageFragmentScopeForJavaPackage@87
deserializedPackageScope = Empty@83 // through LazyPackageFragmentScopeForJavaPackage@87
functions('lang': Name@88) = EmptyList@84[empty] // through LazyPackageFragmentScopeForJavaPackage@87
memberIndex = computeMemberIndex$1@89 // through LazyPackageFragmentScopeForJavaPackage@87
}
LazyJavaPackageFragment@60['lang'] {
classes('UnsupportedOperationException': Name@73) = LazyJavaClassDescriptor@4['UnsupportedOperationException'] // through LazyPackageFragmentScopeForJavaPackage@82
classes('f': Name@74) = null // through LazyPackageFragmentScopeForJavaPackage@82
deserializedPackageScope = Empty@75 // through LazyPackageFragmentScopeForJavaPackage@82
functions('UnsupportedOperationException': Name@73) = EmptyList@76[empty] // through LazyPackageFragmentScopeForJavaPackage@82
functions('f': Name@74) = EmptyList@76[empty] // through LazyPackageFragmentScopeForJavaPackage@82
memberIndex = computeMemberIndex$1@83 // through LazyPackageFragmentScopeForJavaPackage@82
LazyJavaPackageFragment@65['lang'] {
classes('UnsupportedOperationException': Name@80) = LazyJavaClassDescriptor@8['UnsupportedOperationException'] // through LazyPackageFragmentScopeForJavaPackage@90
classes('f': Name@81) = null // through LazyPackageFragmentScopeForJavaPackage@90
deserializedPackageScope = Empty@83 // through LazyPackageFragmentScopeForJavaPackage@90
functions('UnsupportedOperationException': Name@80) = EmptyList@84[empty] // through LazyPackageFragmentScopeForJavaPackage@90
functions('f': Name@81) = EmptyList@84[empty] // through LazyPackageFragmentScopeForJavaPackage@90
memberIndex = computeMemberIndex$1@91 // through LazyPackageFragmentScopeForJavaPackage@90
}
@@ -1,5 +1,5 @@
package
internal fun </*0*/ reified T> f(): T
kotlin.inline() internal fun </*0*/ reified T> f(): T
internal fun </*0*/ T> id(/*0*/ p: T): T
internal fun </*0*/ A> main(): kotlin.Unit
@@ -1,4 +1,4 @@
val <reified T> v: T
val <<!REIFIED_TYPE_PARAMETER_NO_INLINE!>reified<!> T> v: T
get() = throw UnsupportedOperationException()
fun <T> id(p: T): T = p
@@ -1,4 +1,4 @@
class C<reified T>
class C<<!REIFIED_TYPE_PARAMETER_NO_INLINE!>reified<!> T>
fun <A> main(<!UNUSED_PARAMETER!>p1<!>: C<A>, <!UNUSED_PARAMETER!>p2<!>: C<Int>) {
}
@@ -0,0 +1,8 @@
// !DIAGNOSTICS: -NOTHING_TO_INLINE -UNUSED_PARAMETER
inline fun<T1, reified T2> bar(x: T1, y: T2): T2 = y
inline fun<reified R> foo(z: R): R = bar(1, z)
fun box() {
foo("abc")
}
@@ -0,0 +1,58 @@
LazyAnnotationDescriptor@0 {
resolutionResults = OverloadResolutionResultsImpl@1
type = JetTypeImpl@2['inline']
valueArguments(ValueParameterDescriptorImpl@3['strategy']) = null
}
LazyAnnotationDescriptor@4 {
resolutionResults = OverloadResolutionResultsImpl@5
type = JetTypeImpl@6['inline']
valueArguments(ValueParameterDescriptorImpl@3['strategy']) = null
}
LazyJavaPackageFragmentProvider@7 {
packageFragments('<root>': FqName@8) = LazyJavaPackageFragment@9['<root>']
packageFragments('R': FqName@10) = null
packageFragments('T1': FqName@11) = null
packageFragments('T2': FqName@12) = null
packageFragments('inline': FqName@13) = null
packageFragments('java': FqName@14) = LazyJavaPackageFragment@15['java']
packageFragments('java.lang': FqName@16) = LazyJavaPackageFragment@17['lang']
packageFragments('java.lang.R': FqName@18) = null
packageFragments('java.lang.T1': FqName@19) = null
packageFragments('java.lang.T2': FqName@20) = null
packageFragments('java.lang.inline': FqName@21) = null
packageFragments('kotlin': FqName@22) = null
packageFragments('kotlin.R': FqName@23) = null
packageFragments('kotlin.T1': FqName@24) = null
packageFragments('kotlin.T2': FqName@25) = null
packageFragments('kotlin.inline': FqName@26) = null
packageFragments('kotlin.io': FqName@27) = null
packageFragments('kotlin.jvm': FqName@28) = null
}
LazyJavaPackageFragment@9['<root>'] {
classes('bar': Name@29) = null // through LazyPackageFragmentScopeForJavaPackage@30
classes('foo': Name@31) = null // through LazyPackageFragmentScopeForJavaPackage@30
classes('inline': Name@32) = null // through LazyPackageFragmentScopeForJavaPackage@30
deserializedPackageScope = Empty@33 // through LazyPackageFragmentScopeForJavaPackage@30
functions('bar': Name@29) = EmptyList@34[empty] // through LazyPackageFragmentScopeForJavaPackage@30
functions('foo': Name@31) = EmptyList@34[empty] // through LazyPackageFragmentScopeForJavaPackage@30
memberIndex = computeMemberIndex$1@35 // through LazyPackageFragmentScopeForJavaPackage@30
}
LazyJavaPackageFragment@15['java'] {
classes('lang': Name@36) = null // through LazyPackageFragmentScopeForJavaPackage@37
deserializedPackageScope = Empty@33 // through LazyPackageFragmentScopeForJavaPackage@37
functions('lang': Name@38) = EmptyList@34[empty] // through LazyPackageFragmentScopeForJavaPackage@37
memberIndex = computeMemberIndex$1@39 // through LazyPackageFragmentScopeForJavaPackage@37
}
LazyJavaPackageFragment@17['lang'] {
classes('bar': Name@29) = null // through LazyPackageFragmentScopeForJavaPackage@40
classes('foo': Name@31) = null // through LazyPackageFragmentScopeForJavaPackage@40
deserializedPackageScope = Empty@33 // through LazyPackageFragmentScopeForJavaPackage@40
functions('bar': Name@29) = EmptyList@34[empty] // through LazyPackageFragmentScopeForJavaPackage@40
functions('foo': Name@31) = EmptyList@34[empty] // through LazyPackageFragmentScopeForJavaPackage@40
memberIndex = computeMemberIndex$1@41 // through LazyPackageFragmentScopeForJavaPackage@40
}
@@ -0,0 +1,5 @@
package
kotlin.inline() internal fun </*0*/ T1, /*1*/ reified T2> bar(/*0*/ x: T1, /*1*/ y: T2): T2
internal fun box(): kotlin.Unit
kotlin.inline() internal fun </*0*/ reified R> foo(/*0*/ z: R): R
@@ -0,0 +1,9 @@
// !DIAGNOSTICS: -NOTHING_TO_INLINE -UNUSED_PARAMETER -NOT_YET_SUPPORTED_IN_INLINE
inline fun<reified T> foo(x: T) {
fun<<!REIFIED_TYPE_PARAMETER_NO_INLINE!>reified<!> R> bar() {
}
bar<T>()
}
@@ -0,0 +1,42 @@
LazyAnnotationDescriptor@0 {
resolutionResults = OverloadResolutionResultsImpl@1
type = JetTypeImpl@2['inline']
valueArguments(ValueParameterDescriptorImpl@3['strategy']) = null
}
LazyJavaPackageFragmentProvider@4 {
packageFragments('<root>': FqName@5) = LazyJavaPackageFragment@6['<root>']
packageFragments('T': FqName@7) = null
packageFragments('inline': FqName@8) = null
packageFragments('java': FqName@9) = LazyJavaPackageFragment@10['java']
packageFragments('java.lang': FqName@11) = LazyJavaPackageFragment@12['lang']
packageFragments('java.lang.T': FqName@13) = null
packageFragments('java.lang.inline': FqName@14) = null
packageFragments('kotlin': FqName@15) = null
packageFragments('kotlin.T': FqName@16) = null
packageFragments('kotlin.inline': FqName@17) = null
packageFragments('kotlin.io': FqName@18) = null
packageFragments('kotlin.jvm': FqName@19) = null
}
LazyJavaPackageFragment@6['<root>'] {
classes('bar': Name@20) = null // through LazyPackageFragmentScopeForJavaPackage@21
classes('inline': Name@22) = null // through LazyPackageFragmentScopeForJavaPackage@21
deserializedPackageScope = Empty@23 // through LazyPackageFragmentScopeForJavaPackage@21
functions('bar': Name@20) = EmptyList@24[empty] // through LazyPackageFragmentScopeForJavaPackage@21
memberIndex = computeMemberIndex$1@25 // through LazyPackageFragmentScopeForJavaPackage@21
}
LazyJavaPackageFragment@10['java'] {
classes('lang': Name@26) = null // through LazyPackageFragmentScopeForJavaPackage@27
deserializedPackageScope = Empty@23 // through LazyPackageFragmentScopeForJavaPackage@27
functions('lang': Name@28) = EmptyList@24[empty] // through LazyPackageFragmentScopeForJavaPackage@27
memberIndex = computeMemberIndex$1@29 // through LazyPackageFragmentScopeForJavaPackage@27
}
LazyJavaPackageFragment@12['lang'] {
classes('bar': Name@20) = null // through LazyPackageFragmentScopeForJavaPackage@30
deserializedPackageScope = Empty@23 // through LazyPackageFragmentScopeForJavaPackage@30
functions('bar': Name@20) = EmptyList@24[empty] // through LazyPackageFragmentScopeForJavaPackage@30
memberIndex = computeMemberIndex$1@31 // through LazyPackageFragmentScopeForJavaPackage@30
}
@@ -0,0 +1,3 @@
package
kotlin.inline() internal fun </*0*/ reified T> foo(/*0*/ x: T): kotlin.Unit
@@ -0,0 +1,4 @@
fun<T1, <!REIFIED_TYPE_PARAMETER_NO_INLINE!>reified<!> T2, T3, <!REIFIED_TYPE_PARAMETER_NO_INLINE!>reified<!> T4> foo() {
}
@@ -0,0 +1,15 @@
LazyJavaPackageFragmentProvider@0 {
packageFragments('<root>': FqName@1) = LazyJavaPackageFragment@2['<root>']
packageFragments('java': FqName@3) = LazyJavaPackageFragment@4['java']
packageFragments('java.lang': FqName@5) = LazyJavaPackageFragment@6['lang']
packageFragments('kotlin': FqName@7) = null
packageFragments('kotlin.io': FqName@8) = null
packageFragments('kotlin.jvm': FqName@9) = null
}
LazyJavaPackageFragment@4['java'] {
classes('lang': Name@10) = null // through LazyPackageFragmentScopeForJavaPackage@11
deserializedPackageScope = Empty@12 // through LazyPackageFragmentScopeForJavaPackage@11
functions('lang': Name@13) = EmptyList@14[empty] // through LazyPackageFragmentScopeForJavaPackage@11
memberIndex = computeMemberIndex$1@15 // through LazyPackageFragmentScopeForJavaPackage@11
}
@@ -0,0 +1,3 @@
package
internal fun </*0*/ T1, /*1*/ reified T2, /*2*/ T3, /*3*/ reified T4> foo(): kotlin.Unit
@@ -0,0 +1,3 @@
class A<T1, <!REIFIED_TYPE_PARAMETER_NO_INLINE!>reified<!> T2, T3, <!REIFIED_TYPE_PARAMETER_NO_INLINE!>reified<!> T4> {
fun<<!REIFIED_TYPE_PARAMETER_NO_INLINE!>reified<!> R> foo(): T2 = throw UnsupportedOperationException()
}
@@ -0,0 +1,140 @@
LazyJavaClassDescriptor@0['Exception'] {
typeConstructor = LazyJavaClassTypeConstructor@1['Exception']
}
LazyJavaClassDescriptor@2['RuntimeException'] {
typeConstructor = LazyJavaClassTypeConstructor@3['RuntimeException']
}
LazyJavaClassDescriptor@4['UnsupportedOperationException'] {
constructors = ArrayList@5[4] { JavaConstructorDescriptor@6['<init>'], JavaConstructorDescriptor@7['<init>'], JavaConstructorDescriptor@8['<init>'], ... } // through LazyJavaClassMemberScope@9
defaultType = JetTypeImpl@10['UnsupportedOperationException']
functionTypeForSamInterface = null
typeConstructor = LazyJavaClassTypeConstructor@11['UnsupportedOperationException']
}
LazyJavaClassTypeConstructor@1['Exception'] {
parameters = ArrayList@12[empty]
supertypes = ArrayList@13[1] { LazyJavaClassifierType@14['Throwable'] }
}
LazyJavaClassTypeConstructor@3['RuntimeException'] {
parameters = ArrayList@15[empty]
supertypes = ArrayList@16[1] { LazyJavaClassifierType@17['Exception'] }
}
LazyJavaClassTypeConstructor@11['UnsupportedOperationException'] {
parameters = ArrayList@18[empty]
supertypes = ArrayList@19[1] { LazyJavaClassifierType@20['RuntimeException'] }
}
LazyJavaClassifierType@17['Exception'] {
arguments = ArrayList@21[empty]
classifier = JavaClassImpl@22['Exception']
typeConstructor = LazyJavaClassTypeConstructor@1['Exception']
}
LazyJavaClassifierType@20['RuntimeException'] {
arguments = ArrayList@23[empty]
classifier = JavaClassImpl@24['RuntimeException']
typeConstructor = LazyJavaClassTypeConstructor@3['RuntimeException']
}
LazyJavaClassifierType@25['String'] {
arguments = ArrayList@26[empty]
classifier = JavaClassImpl@27['String']
nullable = 'false': Boolean@28
typeConstructor = DeserializedClassTypeConstructor@29
}
LazyJavaClassifierType@30['String'] {
arguments = ArrayList@31[empty]
classifier = JavaClassImpl@32['String']
nullable = 'false': Boolean@28
typeConstructor = DeserializedClassTypeConstructor@29
}
LazyJavaClassifierType@33['String'] {
arguments = ArrayList@34[empty]
classifier = JavaClassImpl@27['String']
nullable = 'true': Boolean@35
typeConstructor = DeserializedClassTypeConstructor@29
}
LazyJavaClassifierType@36['String'] {
arguments = ArrayList@37[empty]
classifier = JavaClassImpl@32['String']
nullable = 'true': Boolean@35
typeConstructor = DeserializedClassTypeConstructor@29
}
LazyJavaClassifierType@38['Throwable'] {
arguments = ArrayList@39[empty]
classifier = JavaClassImpl@40['Throwable']
nullable = 'false': Boolean@28
typeConstructor = DeserializedClassTypeConstructor@41
}
LazyJavaClassifierType@42['Throwable'] {
arguments = ArrayList@43[empty]
classifier = JavaClassImpl@44['Throwable']
nullable = 'false': Boolean@28
typeConstructor = DeserializedClassTypeConstructor@41
}
LazyJavaClassifierType@45['Throwable'] {
arguments = ArrayList@46[empty]
classifier = JavaClassImpl@40['Throwable']
nullable = 'true': Boolean@35
typeConstructor = DeserializedClassTypeConstructor@41
}
LazyJavaClassifierType@47['Throwable'] {
arguments = ArrayList@48[empty]
classifier = JavaClassImpl@44['Throwable']
nullable = 'true': Boolean@35
typeConstructor = DeserializedClassTypeConstructor@41
}
LazyJavaClassifierType@14['Throwable'] {
arguments = ArrayList@49[empty]
classifier = JavaClassImpl@50['Throwable']
typeConstructor = DeserializedClassTypeConstructor@41
}
LazyJavaPackageFragmentProvider@51 {
packageFragments('<root>': FqName@52) = LazyJavaPackageFragment@53['<root>']
packageFragments('A': FqName@54) = null
packageFragments('T2': FqName@55) = null
packageFragments('java': FqName@56) = LazyJavaPackageFragment@57['java']
packageFragments('java.lang': FqName@58) = LazyJavaPackageFragment@59['lang']
packageFragments('java.lang.T2': FqName@60) = null
packageFragments('kotlin': FqName@61) = null
packageFragments('kotlin.T2': FqName@62) = null
packageFragments('kotlin.io': FqName@63) = null
packageFragments('kotlin.jvm': FqName@64) = null
topLevelClasses(JavaClassImpl@22['Exception']) = LazyJavaClassDescriptor@0['Exception']
topLevelClasses(JavaClassImpl@24['RuntimeException']) = LazyJavaClassDescriptor@2['RuntimeException']
topLevelClasses(JavaClassImpl@65['UnsupportedOperationException']) = LazyJavaClassDescriptor@4['UnsupportedOperationException']
}
LazyJavaPackageFragment@53['<root>'] {
classes('UnsupportedOperationException': Name@66) = null // through LazyPackageFragmentScopeForJavaPackage@67
deserializedPackageScope = Empty@68 // through LazyPackageFragmentScopeForJavaPackage@67
functions('UnsupportedOperationException': Name@66) = EmptyList@69[empty] // through LazyPackageFragmentScopeForJavaPackage@67
memberIndex = computeMemberIndex$1@70 // through LazyPackageFragmentScopeForJavaPackage@67
}
LazyJavaPackageFragment@57['java'] {
classes('lang': Name@71) = null // through LazyPackageFragmentScopeForJavaPackage@72
deserializedPackageScope = Empty@68 // through LazyPackageFragmentScopeForJavaPackage@72
functions('lang': Name@73) = EmptyList@69[empty] // through LazyPackageFragmentScopeForJavaPackage@72
memberIndex = computeMemberIndex$1@74 // through LazyPackageFragmentScopeForJavaPackage@72
}
LazyJavaPackageFragment@59['lang'] {
classes('UnsupportedOperationException': Name@66) = LazyJavaClassDescriptor@4['UnsupportedOperationException'] // through LazyPackageFragmentScopeForJavaPackage@75
deserializedPackageScope = Empty@68 // through LazyPackageFragmentScopeForJavaPackage@75
functions('UnsupportedOperationException': Name@66) = EmptyList@69[empty] // through LazyPackageFragmentScopeForJavaPackage@75
memberIndex = computeMemberIndex$1@76 // through LazyPackageFragmentScopeForJavaPackage@75
}
@@ -0,0 +1,9 @@
package
internal final class A</*0*/ T1, /*1*/ reified T2, /*2*/ T3, /*3*/ reified T4> {
public constructor A</*0*/ T1, /*1*/ reified T2, /*2*/ T3, /*3*/ reified T4>()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
internal final fun </*0*/ reified R> foo(): T2
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -19,4 +19,4 @@ object Y {
val <T> T.javaClass : Class<T>
get() = throw Exception()
fun <reified T> javaClass() : Class<T> = throw Exception()
fun <<!REIFIED_TYPE_PARAMETER_NO_INLINE!>reified<!> T> javaClass() : Class<T> = throw Exception()