Skip to content

Commit

Permalink
Move SAM constructors to synthetic scope
Browse files Browse the repository at this point in the history
  • Loading branch information
zarechenskiy committed May 5, 2017
1 parent 429f0e4 commit 7541a37
Show file tree
Hide file tree
Showing 100 changed files with 18 additions and 228 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ import org.jetbrains.kotlin.descriptors.synthetic.SyntheticMemberDescriptor
import org.jetbrains.kotlin.incremental.components.LookupLocation
import org.jetbrains.kotlin.load.java.descriptors.JavaMethodDescriptor
import org.jetbrains.kotlin.load.java.descriptors.SamAdapterDescriptor
import org.jetbrains.kotlin.load.java.descriptors.SamConstructorDescriptor
import org.jetbrains.kotlin.load.java.lazy.descriptors.LazyJavaClassDescriptor
import org.jetbrains.kotlin.load.java.sam.SingleAbstractMethodUtils
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.calls.inference.wrapWithCapturingSubstitution
Expand Down Expand Up @@ -56,6 +58,11 @@ class SamAdapterFunctionsScope(
samAdapterForFunctionNotCached(function)
}

private val samConstructorForClassifier =
storageManager.createMemoizedFunctionWithNullableValues<ClassifierDescriptor, SamConstructorDescriptor> { classifier ->
samConstructorForClassifierNotCached(classifier)
}

private fun extensionForFunctionNotCached(function: FunctionDescriptor): FunctionDescriptor? {
if (!function.visibility.isVisibleOutside()) return null
if (!function.hasJavaOriginInHierarchy()) return null //TODO: should we go into base at all?
Expand All @@ -72,6 +79,13 @@ class SamAdapterFunctionsScope(
return SingleAbstractMethodUtils.createSamAdapterFunction(function)
}

private fun samConstructorForClassifierNotCached(classifier: ClassifierDescriptor): SamConstructorDescriptor? {
return if (classifier is LazyJavaClassDescriptor && classifier.functionTypeForSamInterface != null) {
SingleAbstractMethodUtils.createSamConstructorFunction(classifier.containingDeclaration, classifier)
}
else null
}

override fun getSyntheticMemberFunctions(receiverTypes: Collection<KotlinType>, name: Name, location: LookupLocation): Collection<FunctionDescriptor> {
var result: SmartList<FunctionDescriptor>? = null
for (type in receiverTypes) {
Expand Down Expand Up @@ -119,7 +133,8 @@ class SamAdapterFunctionsScope(
override fun getSyntheticExtensionProperties(receiverTypes: Collection<KotlinType>): Collection<PropertyDescriptor> = emptyList()

override fun getSyntheticStaticFunctions(scope: ResolutionScope, name: Name, location: LookupLocation): Collection<FunctionDescriptor> {
return scope.getContributedFunctions(name, location).mapNotNull { samAdapterForStaticFunction(it) }
val samConstructor = scope.getContributedClassifier(name, location)?.let { samConstructorForClassifier(it) }
return scope.getContributedFunctions(name, location).mapNotNull { samAdapterForStaticFunction(it) } + listOfNotNull(samConstructor)
}

override fun getSyntheticStaticFunctions(scope: ResolutionScope): Collection<FunctionDescriptor> {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package

public /*synthesized*/ fun J(/*0*/ function: () -> kotlin.String!): J
public fun f1(/*0*/ x: kotlin.Int?): kotlin.Any
public fun </*0*/ T> f2(/*0*/ t: T): kotlin.Any
public fun </*0*/ S : kotlin.String?> f3(/*0*/ s: S): kotlin.Any
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package

public /*synthesized*/ fun J(/*0*/ function: () -> kotlin.String!): J
public fun f1(/*0*/ x: kotlin.Int?): kotlin.Any
public fun </*0*/ T> f2(/*0*/ t: T): kotlin.Any
public fun </*0*/ S : kotlin.String?> f3(/*0*/ s: S): kotlin.Any
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package

public /*synthesized*/ fun A(/*0*/ function: () -> kotlin.Int): A
public fun foo(): kotlin.Unit

public interface A {
Expand All @@ -24,9 +23,4 @@ public open class B {
public/*package*/ interface B3 {
public abstract fun getFoo(): kotlin.Int
}

// Static members
public/*package*/ final /*synthesized*/ fun B1(/*0*/ function: () -> kotlin.Int): B.B1
public/*package*/ final /*synthesized*/ fun B2(/*0*/ function: () -> kotlin.Int): B.B2
public/*package*/ final /*synthesized*/ fun B3(/*0*/ function: () -> kotlin.Int): B.B3
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,6 @@ public interface A {
public interface B {
public abstract fun getFoo(): kotlin.Int
}

// Static members
public final /*synthesized*/ fun B(/*0*/ function: () -> kotlin.Int): A.B
}

public interface A0 {
Expand All @@ -18,9 +15,6 @@ public interface A0 {
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}

// Static members
public final /*synthesized*/ fun B(/*0*/ function: () -> kotlin.Int): A0.B
}

public open class B {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
package

public/*package*/ /*synthesized*/ fun A(/*0*/ function: () -> kotlin.Unit): A
public/*package*/ /*synthesized*/ fun C(/*0*/ function: () -> kotlin.Unit): C

public/*package*/ interface A {
public abstract fun foo(): kotlin.Unit
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,6 @@ public/*package*/ open class LockBasedStorageManager {
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}

// Static members
public/*package*/ final /*synthesized*/ fun ExceptionHandlingStrategy(/*0*/ function: () -> kotlin.Unit): LockBasedStorageManager.ExceptionHandlingStrategy
}

public interface StorageManager {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package

public /*synthesized*/ fun </*0*/ T : kotlin.CharSequence!> Predicate(/*0*/ function: (t: T) -> kotlin.Boolean): Predicate<T>
public fun main(/*0*/ args: kotlin.Array<kotlin.String>): kotlin.Unit
public fun process(/*0*/ x: Predicate<kotlin.String>): kotlin.Unit

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package

public /*synthesized*/ fun A(/*0*/ function: () -> kotlin.String!): A
public fun </*0*/ T : B> test(/*0*/ x: T): kotlin.Unit where T : A, T : C

public interface A {
Expand Down
1 change: 0 additions & 1 deletion compiler/testData/diagnostics/tests/inline/sam.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package

public /*synthesized*/ fun Run(/*0*/ function: () -> kotlin.Int): Run
public inline fun inlineFunWithInvoke(/*0*/ s: (p: kotlin.Int) -> kotlin.Unit, /*1*/ ext: kotlin.Int.(p: kotlin.Int) -> kotlin.Unit): kotlin.Unit
public inline fun inlineFunWithInvokeNonInline(/*0*/ noinline s: (p: kotlin.Int) -> kotlin.Unit, /*1*/ ext: kotlin.Int.(p: kotlin.Int) -> kotlin.Unit): kotlin.Unit
public inline fun ((kotlin.Int) -> kotlin.Unit).inlineExt(): kotlin.Unit
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package

public /*synthesized*/ fun </*0*/ K : kotlin.Any!, /*1*/ V : kotlin.Any!> ConcMap(/*0*/ function: (key: K!, mappingFunction: MyFunc<in K!, out V!>!) -> V!): ConcMap<K, V>
public /*synthesized*/ fun </*0*/ K : kotlin.Any!, /*1*/ V : kotlin.Any!> MyFunc(/*0*/ function: (String: K!) -> V!): MyFunc<K, V>
public fun concurrentMap(): kotlin.Unit

public open class ConcHashMap</*0*/ K : kotlin.Any!, /*1*/ V : kotlin.Any!> : ConcMap<K!, V!> {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package

public /*synthesized*/ fun A(/*0*/ function: (r: java.lang.Runnable!) -> kotlin.Unit): A

public interface A {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public abstract fun foo(/*0*/ r: java.lang.Runnable!): kotlin.Unit
Expand Down
2 changes: 0 additions & 2 deletions compiler/testData/diagnostics/tests/j+k/overrideRawType.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package

public /*synthesized*/ fun Bar(/*0*/ function: (f: Foo<(raw) kotlin.CharSequence!>!) -> kotlin.Unit): Bar

public interface Bar {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public abstract fun f(/*0*/ f: Foo<(raw) kotlin.CharSequence!>!): kotlin.Unit
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package

public /*synthesized*/ fun </*0*/ K : kotlin.Any!> A(/*0*/ function: (key: K!, f: MyFunc!) -> K!): A<K>
public /*synthesized*/ fun MyFunc(/*0*/ function: (x: kotlin.String!) -> kotlin.String!): MyFunc
public fun main(): kotlin.Unit

public interface A</*0*/ K : kotlin.Any!> {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package

public /*synthesized*/ fun </*0*/ X : [ERROR : Cyclic upper bounds]> XYZ(/*0*/ function: () -> XYZ<(raw) [ERROR : Cyclic upper bounds]>!): XYZ<X>
public fun main(/*0*/ xyz: XYZ<*>): XYZ<(raw) [ERROR : Cyclic upper bounds]>!

public interface XYZ</*0*/ X : [ERROR : Cyclic upper bounds]> {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package

public /*synthesized*/ fun </*0*/ X : Y!, /*1*/ Y : [ERROR : Cyclic upper bounds], /*2*/ Z : [ERROR : Cyclic upper bounds]> XYZ(/*0*/ function: () -> XYZ<(raw) [ERROR : Cyclic upper bounds], (raw) [ERROR : Cyclic upper bounds], (raw) [ERROR : Cyclic upper bounds]>!): XYZ<X, Y, Z>
public fun main(/*0*/ xyz: XYZ<*, *, *>): XYZ<(raw) [ERROR : Cyclic upper bounds], (raw) [ERROR : Cyclic upper bounds], (raw) [ERROR : Cyclic upper bounds]>!

public interface XYZ</*0*/ X : Y!, /*1*/ Y : [ERROR : Cyclic upper bounds], /*2*/ Z : [ERROR : Cyclic upper bounds]> {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package

public /*synthesized*/ fun J(/*0*/ function: (x: kotlin.String?) -> kotlin.String): J
public /*synthesized*/ fun J2(/*0*/ function: (x: kotlin.String?) -> kotlin.String): J2
public fun main(): kotlin.Unit

public interface J {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,4 @@ public open class FormFieldValidatorPresenterTest</*0*/ V : kotlin.String!> {
public abstract fun onValidityChanged(/*0*/ valid: kotlin.Boolean): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}

// Static members
public final /*synthesized*/ fun ValidationListenerTest(/*0*/ function: (valid: kotlin.Boolean) -> kotlin.Unit): FormFieldValidatorPresenterTest.ValidationListenerTest
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package

public /*synthesized*/ fun </*0*/ T : kotlin.Any!, /*1*/ U : kotlin.Any!, /*2*/ R : kotlin.Any!> BiFunction(/*0*/ function: (t: T!, u: U!) -> R!): BiFunction<T, U, R>
public fun main(): kotlin.Unit

public open class A</*0*/ K : kotlin.Any!, /*1*/ V : kotlin.Any!> {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package

public /*synthesized*/ fun </*0*/ E : kotlin.Any!> EventListener(/*0*/ function: (x: kotlin.String!) -> E!): EventListener<E>
public fun main(): kotlin.Unit

public open class A {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package

public /*synthesized*/ fun </*0*/ E : kotlin.Any!> EventListener(/*0*/ function: (e: E!) -> kotlin.Unit): EventListener<E>
public fun main(): kotlin.Unit

public open class A {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package

public /*synthesized*/ fun </*0*/ E : kotlin.Any!> EventListener(/*0*/ function: (e: E!) -> kotlin.Unit): EventListener<E>
public fun main(): kotlin.Unit

public open class A {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package

public /*synthesized*/ fun </*0*/ E : kotlin.CharSequence!, /*1*/ F : kotlin.collections.(Mutable)Map<kotlin.String!, E!>!> Function(/*0*/ function: (f: F!) -> E!): Function<E, F>
public fun main(): kotlin.Unit

public open class A {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package

public /*synthesized*/ fun </*0*/ E : kotlin.collections.(Mutable)Map<kotlin.String!, kotlin.Int!>!, /*1*/ F : kotlin.CharSequence!> Function(/*0*/ function: (e: E!) -> F!): Function<E, F>
public fun main(): kotlin.Unit

public open class A {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package

public/*package*/ /*synthesized*/ fun J(/*0*/ function: () -> kotlin.collections.List<kotlin.String>): J

public/*package*/ interface J : K {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public abstract override /*1*/ fun foo(): kotlin.collections.List<kotlin.String>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package

public /*synthesized*/ fun J(/*0*/ function: () -> kotlin.String!): J

public interface J {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public abstract fun foo(): kotlin.String!
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
package

public /*synthesized*/ fun J1(/*0*/ function: () -> In<kotlin.String!>!): J1
public /*synthesized*/ fun J2(/*0*/ function: () -> In<kotlin.String!>): J2
public /*synthesized*/ fun J3(/*0*/ function: () -> In<kotlin.String!>?): J3

public interface In</*0*/ in T> {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package

public /*synthesized*/ fun J(/*0*/ function: () -> kotlin.collections.(Mutable)List<kotlin.String!>!): J

public interface ILNS {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public abstract fun foo(): kotlin.collections.List<kotlin.String?>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
package

public /*synthesized*/ fun </*0*/ T : IBase!> JFooWithUpperBound(/*0*/ function: () -> T!): JFooWithUpperBound<T>
public /*synthesized*/ fun </*0*/ T : IBase!> JFooWithUpperBoundDerived(/*0*/ function: () -> T!): JFooWithUpperBoundDerived<T>

public interface IBase {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,8 +99,4 @@ public open class TestNN {
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
}

// Static members
public final /*synthesized*/ fun JNotNull(/*0*/ function: () -> kotlin.Any): TestNN.JNotNull
public final /*synthesized*/ fun JNull(/*0*/ function: () -> kotlin.Any?): TestNN.JNull
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
package

public/*package*/ /*synthesized*/ fun Sub(/*0*/ function: (superName: kotlin.Long) -> kotlin.Unit): Sub
public/*package*/ /*synthesized*/ fun Super(/*0*/ function: (superName: kotlin.Long) -> kotlin.Unit): Super

public/*package*/ interface Sub : Super {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public abstract override /*1*/ /*fake_override*/ fun foo(/*0*/ superName: kotlin.Long): kotlin.Unit
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package

public/*package*/ /*synthesized*/ fun Sub(/*0*/ function: (superName: kotlin.Int) -> kotlin.Unit): Sub

public/*package*/ interface Sub : Super {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public abstract override /*1*/ /*fake_override*/ fun foo(/*0*/ superName: kotlin.Int): kotlin.Unit
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,5 @@
package

public/*package*/ /*synthesized*/ fun JSuper1(/*0*/ function: (jsuper1Name: kotlin.Int) -> kotlin.Unit): JSuper1
public/*package*/ /*synthesized*/ fun JSuper2(/*0*/ function: (jsuper2Name: kotlin.Int) -> kotlin.Unit): JSuper2
public/*package*/ /*synthesized*/ fun Sub1(/*0*/ function: (ksuperName: kotlin.Int) -> kotlin.Unit): Sub1
public/*package*/ /*synthesized*/ fun Sub2(/*0*/ function: (ksuperName: kotlin.Int) -> kotlin.Unit): Sub2
public/*package*/ /*synthesized*/ fun Sub3(/*0*/ function: (ksuperName: kotlin.Int) -> kotlin.Unit): Sub3

public/*package*/ interface JSuper1 {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public abstract fun foo(/*0*/ jsuper1Name: kotlin.Int): kotlin.Unit
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package

public/*package*/ /*synthesized*/ fun JavaInterface(/*0*/ function: (javaName: kotlin.Int) -> kotlin.Unit): JavaInterface

public final class BothTraitsSubclass : JavaInterface, KotlinTrait {
public constructor BothTraitsSubclass()
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package

public /*synthesized*/ fun JavaInterface(/*0*/ function: (javaName: kotlin.Int) -> kotlin.Unit): JavaInterface

public interface JavaInterface {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public abstract fun foo(/*0*/ javaName: kotlin.Int): kotlin.Unit
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package

public /*synthesized*/ fun </*0*/ T : kotlin.Any!> A(/*0*/ function: (y: T?) -> kotlin.Boolean): A<T>
public fun test(): kotlin.Unit

public interface A</*0*/ T : kotlin.Any!> {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package

public /*synthesized*/ fun </*0*/ T : kotlin.Any!> A(/*0*/ function: (x: T) -> kotlin.Unit): A<T>
public fun test(): kotlin.Unit

public interface A</*0*/ T : kotlin.Any!> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,5 +19,4 @@ public open class J {
public final var staticJ: J.Invoke!
@org.jetbrains.annotations.Nullable public final var staticN: J.Invoke?
@org.jetbrains.annotations.NotNull public final var staticNN: J.Invoke
public final /*synthesized*/ fun Invoke(/*0*/ function: () -> kotlin.Unit): J.Invoke
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package

public /*synthesized*/ fun B(/*0*/ function: (x: kotlin.Any!, y: kotlin.collections.(Mutable)List<(raw) kotlin.Any?>!) -> kotlin.String!): B

public interface A</*0*/ T : kotlin.Any!> {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public abstract fun </*0*/ E : kotlin.CharSequence!> foo(/*0*/ x: T!, /*1*/ y: (kotlin.collections.MutableList<out T!>..kotlin.collections.List<T!>?)): E!
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
package

public /*synthesized*/ fun </*0*/ T : kotlin.Any!> A(/*0*/ function: (x: T!, y: Fun<out T!>!) -> kotlin.Unit): A<T>
public /*synthesized*/ fun B(/*0*/ function: (x: kotlin.Any!, y: Fun<(raw) kotlin.Any!>!) -> kotlin.Unit): B
public /*synthesized*/ fun </*0*/ T : kotlin.Any!> Fun(/*0*/ function: (x: T!) -> kotlin.Unit): Fun<T>

public interface A</*0*/ T : kotlin.Any!> {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public abstract fun foo(/*0*/ x: T!, /*1*/ y: Fun<out T!>!): kotlin.Unit
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package

public /*synthesized*/ fun </*0*/ T : kotlin.Any!> A(/*0*/ function: (t: T!) -> kotlin.Boolean): A<T>
public fun main(): kotlin.Unit

public interface A</*0*/ T : kotlin.Any!> {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,5 @@
package

public /*synthesized*/ fun </*0*/ T : kotlin.Any!> A(/*0*/ function: (x: T, y: T?) -> kotlin.Unit): A<T>
public /*synthesized*/ fun B1(/*0*/ function: (x: kotlin.String, y: kotlin.String?) -> kotlin.Unit): B1
public /*synthesized*/ fun B2(/*0*/ function: (x: kotlin.String, y: kotlin.String?) -> kotlin.Unit): B2
public /*synthesized*/ fun B3(/*0*/ function: (x: kotlin.String!, y: kotlin.String!) -> kotlin.Unit): B3

public interface A</*0*/ T : kotlin.Any!> {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public abstract fun foo(/*0*/ @org.jetbrains.annotations.NotNull x: T, /*1*/ @org.jetbrains.annotations.Nullable y: T?): kotlin.Unit
Expand Down
Loading

0 comments on commit 7541a37

Please sign in to comment.