Support hasStableParameterNames in KotlinSignature and propagation

#KT-1924 In Progress
 #KT-2830 Fixed
This commit is contained in:
Alexander Udalov
2014-03-19 05:54:00 +04:00
parent 7fcd42f40c
commit 5fa1774cc1
90 changed files with 369 additions and 186 deletions
@@ -203,11 +203,13 @@ public class AlternativeMethodSignatureData extends ElementAlternativeSignatureD
alternativeType = KotlinBuiltIns.getInstance().getArrayType(alternativeVarargElementType);
}
Name altName = annotationValueParameter.getNameAsName();
altParamDescriptors.add(new ValueParameterDescriptorImpl(
originalParameterDescriptor.getContainingDeclaration(),
originalParameterDescriptor.getIndex(),
originalParameterDescriptor.getAnnotations(),
originalParameterDescriptor.getName(),
altName != null ? altName : originalParameterDescriptor.getName(),
alternativeType,
originalParameterDescriptor.declaresDefaultValue(),
alternativeVarargElementType));
@@ -25,6 +25,8 @@ import com.intellij.psi.PsiManager;
import com.intellij.psi.PsiMethod;
import com.intellij.util.Function;
import com.intellij.util.containers.ContainerUtil;
import kotlin.Function1;
import kotlin.KotlinPackage;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.*;
@@ -98,6 +100,10 @@ public class SignaturesPropagationData {
return modifiedValueParameters.descriptors;
}
public boolean getModifiedHasStableParameterNames() {
return modifiedValueParameters.hasStableParameterNames;
}
public JetType getModifiedReturnType() {
return modifiedReturnType;
}
@@ -176,35 +182,49 @@ public class SignaturesPropagationData {
boolean shouldBeExtension = checkIfShouldBeExtension();
for (ValueParameterDescriptor originalParam : parameters) {
for (final ValueParameterDescriptor originalParam : parameters) {
final int originalIndex = originalParam.getIndex();
List<TypeAndVariance> typesFromSuperMethods = ContainerUtil.map(superFunctions,
new Function<FunctionDescriptor, TypeAndVariance>() {
List<TypeAndName> typesFromSuperMethods = ContainerUtil.map(superFunctions,
new Function<FunctionDescriptor, TypeAndName>() {
@Override
public TypeAndVariance fun(FunctionDescriptor superFunction) {
public TypeAndName fun(FunctionDescriptor superFunction) {
ReceiverParameterDescriptor receiver = superFunction.getReceiverParameter();
int index = receiver != null ? originalIndex - 1 : originalIndex;
if (index == -1) {
assert receiver != null : "can't happen: index is -1, while function is not extension";
return new TypeAndVariance(receiver.getType(), INVARIANT);
return new TypeAndName(receiver.getType(), originalParam.getName());
}
return new TypeAndVariance(superFunction.getValueParameters().get(index).getType(), INVARIANT);
ValueParameterDescriptor parameter = superFunction.getValueParameters().get(index);
return new TypeAndName(parameter.getType(), parameter.getName());
}
});
VarargCheckResult varargCheckResult = checkVarargInSuperFunctions(originalParam);
JetType altType = modifyTypeAccordingToSuperMethods(varargCheckResult.parameterType, typesFromSuperMethods, MEMBER_SIGNATURE_CONTRAVARIANT);
JetType altType = modifyTypeAccordingToSuperMethods(varargCheckResult.parameterType,
convertToTypeVarianceList(typesFromSuperMethods),
MEMBER_SIGNATURE_CONTRAVARIANT);
if (shouldBeExtension && originalIndex == 0) {
resultReceiverType = altType;
}
else {
Name stableName = null;
for (int i = 0; i < superFunctions.size(); i++) {
if (superFunctions.get(i).hasStableParameterNames()) {
// When there's more than one stable name in super functions, we pick the first one. This behaviour is similar to
// the compiler front-end, except that it reports a warning in such cases
// TODO: report a warning somewhere if there's more than one stable name in super functions
stableName = typesFromSuperMethods.get(i).name;
break;
}
}
resultParameters.add(new ValueParameterDescriptorImpl(
originalParam.getContainingDeclaration(),
shouldBeExtension ? originalIndex - 1 : originalIndex,
originalParam.getAnnotations(),
originalParam.getName(),
stableName != null ? stableName : originalParam.getName(),
altType,
originalParam.declaresDefaultValue(),
varargCheckResult.isVararg ? KotlinBuiltIns.getInstance().getArrayElementType(altType) : null
@@ -212,7 +232,24 @@ public class SignaturesPropagationData {
}
}
return new ValueParameters(resultReceiverType, resultParameters);
boolean hasStableParameterNames = KotlinPackage.any(superFunctions, new Function1<FunctionDescriptor, Boolean>() {
@Override
public Boolean invoke(FunctionDescriptor descriptor) {
return descriptor.hasStableParameterNames();
}
});
return new ValueParameters(resultReceiverType, resultParameters, hasStableParameterNames);
}
@NotNull
private static List<TypeAndVariance> convertToTypeVarianceList(@NotNull List<TypeAndName> list) {
return KotlinPackage.map(list, new Function1<TypeAndName, TypeAndVariance>() {
@Override
public TypeAndVariance invoke(TypeAndName tvn) {
return new TypeAndVariance(tvn.type, INVARIANT);
}
});
}
private static List<FunctionDescriptor> getSuperFunctionsForMethod(
@@ -747,13 +784,29 @@ public class SignaturesPropagationData {
}
}
private static class TypeAndName {
public final JetType type;
public final Name name;
public TypeAndName(JetType type, Name name) {
this.type = type;
this.name = name;
}
}
private static class ValueParameters {
private final JetType receiverType;
private final List<ValueParameterDescriptor> descriptors;
private final boolean hasStableParameterNames;
public ValueParameters(@Nullable JetType receiverType, @NotNull List<ValueParameterDescriptor> descriptors) {
public ValueParameters(
@Nullable JetType receiverType,
@NotNull List<ValueParameterDescriptor> descriptors,
boolean hasStableParameterNames
) {
this.receiverType = receiverType;
this.descriptors = descriptors;
this.hasStableParameterNames = hasStableParameterNames;
}
}
}
@@ -66,7 +66,7 @@ public class TraceBasedExternalSignatureResolver implements ExternalSignatureRes
trace);
return new PropagatedMethodSignature(data.getModifiedReturnType(), data.getModifiedReceiverType(),
data.getModifiedValueParameters(), data.getModifiedTypeParameters(), data.getSignatureErrors(),
data.getSuperFunctions());
data.getModifiedHasStableParameterNames(), data.getSuperFunctions());
}
@Override
@@ -77,7 +77,8 @@ public class TraceBasedExternalSignatureResolver implements ExternalSignatureRes
@Nullable JetType returnType,
@Nullable JetType receiverType,
@NotNull List<ValueParameterDescriptor> valueParameters,
@NotNull List<TypeParameterDescriptor> typeParameters
@NotNull List<TypeParameterDescriptor> typeParameters,
boolean hasStableParameterNames
) {
AlternativeMethodSignatureData data =
new AlternativeMethodSignatureData(externalAnnotationResolver, (JavaMethodImpl) method, receiverType, valueParameters, returnType,
@@ -85,11 +86,11 @@ public class TraceBasedExternalSignatureResolver implements ExternalSignatureRes
if (data.isAnnotated() && !data.hasErrors()) {
return new AlternativeMethodSignature(data.getReturnType(), receiverType, data.getValueParameters(), data.getTypeParameters(),
Collections.<String>emptyList());
Collections.<String>emptyList(), true);
}
List<String> error = data.hasErrors() ? Collections.singletonList(data.getError()) : Collections.<String>emptyList();
return new AlternativeMethodSignature(returnType, receiverType, valueParameters, typeParameters, error);
return new AlternativeMethodSignature(returnType, receiverType, valueParameters, typeParameters, error, hasStableParameterNames);
}
@Override
@@ -0,0 +1,16 @@
// FILE: Super.kt
trait Super {
fun foo(superName: Int)
}
// FILE: Sub.java
interface Sub extends Super {
}
// FILE: SubSub.kt
class SubSub : Sub {
override fun foo(<!PARAMETER_NAME_CHANGED_ON_OVERRIDE!>subName<!>: Int) {}
}
@@ -0,0 +1,51 @@
// FILE: KSuper.kt
trait KSuper {
fun foo(ksuperName: Int)
}
// FILE: JSuper1.java
interface JSuper1 {
void foo(int jsuper1Name);
}
// FILE: JSuper2.java
interface JSuper2 {
void foo(int jsuper2Name);
}
// FILE: Sub1.java
interface Sub1 extends KSuper, JSuper1, JSuper2 {
@Override
void foo(int sub1Name)
}
// FILE: Sub2.java
interface Sub2 extends JSuper1, KSuper, JSuper2 {
@Override
void foo(int sub2Name)
}
// FILE: Sub3.java
interface Sub3 extends JSuper1, JSuper2, KSuper {
@Override
void foo(int sub3Name)
}
// FILE: SubSub.kt
class SubSub1 : Sub1 {
override fun foo(ksuperName: Int) {}
}
class SubSub2 : Sub2 {
override fun foo(ksuperName: Int) {}
}
class SubSub3 : Sub3 {
override fun foo(ksuperName: Int) {}
}
@@ -0,0 +1,18 @@
// FILE: A.java
import kotlin.jvm.KotlinSignature;
interface A {
@KotlinSignature("fun foo(kotlinSignatureName: String): Unit")
void foo(String javaName);
}
// FILE: 1.kt
class B : A {
override fun foo(<!PARAMETER_NAME_CHANGED_ON_OVERRIDE!>kotlinName<!>: String) {}
}
class C : A {
override fun foo(kotlinSignatureName: String) {}
}
@@ -4,7 +4,7 @@ public trait TwoSuperclassesVarargAndNot : java.lang.Object {
public trait Sub : test.TwoSuperclassesVarargAndNot.Super1, test.TwoSuperclassesVarargAndNot.Super2 {
public abstract override /*1*/ /*fake_override*/ fun foo(/*0*/ vararg p0: kotlin.String? /*kotlin.Array<kotlin.String?>*/): kotlin.Unit
public abstract override /*1*/ fun foo(/*0*/ p0: kotlin.Array<out kotlin.String?>?): kotlin.Unit
public abstract override /*1*/ fun foo(/*0*/ s: kotlin.Array<out kotlin.String?>?): kotlin.Unit
}
public trait Super1 : java.lang.Object {
@@ -12,7 +12,7 @@ public trait TwoSuperclassesVarargAndNot : java.lang.Object {
}
public trait Super2 : java.lang.Object {
public abstract fun foo(/*0*/ p0: kotlin.Array<out kotlin.String?>?): kotlin.Unit
public abstract fun foo(/*0*/ s: kotlin.Array<out kotlin.String?>?): kotlin.Unit
}
}
@@ -4,7 +4,7 @@ public abstract class ClassDoesNotOverrideMethod : java.util.Date {
public constructor ClassDoesNotOverrideMethod()
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 compareTo(/*0*/ p0: java.util.Date): kotlin.Int
public open override /*1*/ /*fake_override*/ fun compareTo(/*0*/ other: java.util.Date): 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 getHours(): kotlin.Int
@@ -1,4 +1,4 @@
package test
public open class ConstructorWithNewTypeParams<T>(p0 : Any) : java.lang.Object() {
public open class ConstructorWithNewTypeParams<T>(first : Any) : java.lang.Object() {
}
@@ -1,5 +1,5 @@
package test
public open class ConstructorWithNewTypeParams</*0*/ T> : java.lang.Object {
public constructor ConstructorWithNewTypeParams</*0*/ T>(/*0*/ p0: kotlin.Any)
public constructor ConstructorWithNewTypeParams</*0*/ T>(/*0*/ first: kotlin.Any)
}
@@ -1,4 +1,4 @@
package test
public open class ConstructorWithParentTypeParams<T>(p0 : T) : java.lang.Object() {
public open class ConstructorWithParentTypeParams<T>(first : T) : java.lang.Object() {
}
@@ -1,5 +1,5 @@
package test
public open class ConstructorWithParentTypeParams</*0*/ T> : java.lang.Object {
public constructor ConstructorWithParentTypeParams</*0*/ T>(/*0*/ p0: T)
public constructor ConstructorWithParentTypeParams</*0*/ T>(/*0*/ first: T)
}
@@ -2,5 +2,5 @@ package test
import java.util.*
public open class ConstructorWithSeveralParams(p0: Int, p1 : Int, p2 : ArrayList<String>) : java.lang.Object() {
public open class ConstructorWithSeveralParams(integer: Int, intField : Int, collection : ArrayList<String>) : java.lang.Object() {
}
@@ -1,5 +1,5 @@
package test
public open class ConstructorWithSeveralParams : java.lang.Object {
public constructor ConstructorWithSeveralParams(/*0*/ p0: kotlin.Int, /*1*/ p1: kotlin.Int, /*2*/ p2: java.util.ArrayList<kotlin.String>)
public constructor ConstructorWithSeveralParams(/*0*/ integer: kotlin.Int, /*1*/ intField: kotlin.Int, /*2*/ collection: java.util.ArrayList<kotlin.String>)
}
@@ -3,7 +3,7 @@ package test
import java.util.*
public open class MethodWithFunctionTypes : Object() {
public open fun foo(p0 : (String?) -> String) : (String.() -> String?)? {
public open fun foo(f : (String?) -> String) : (String.() -> String?)? {
throw UnsupportedOperationException()
}
}
@@ -2,5 +2,5 @@ package test
public open class MethodWithFunctionTypes : java.lang.Object {
public constructor MethodWithFunctionTypes()
public open fun foo(/*0*/ p0: (kotlin.String?) -> kotlin.String): (kotlin.String.() -> kotlin.String?)?
public open fun foo(/*0*/ f: (kotlin.String?) -> kotlin.String): (kotlin.String.() -> kotlin.String?)?
}
@@ -3,5 +3,5 @@ package test
import java.util.*
public open class MethodWithGenerics : Object() {
public open fun foo(p0 : String, p1 : List<Map.Entry<String?, String>?>) : String = ""
public open fun foo(a : String, b : List<Map.Entry<String?, String>?>) : String = ""
}
@@ -2,5 +2,5 @@ package test
public open class MethodWithGenerics : java.lang.Object {
public constructor MethodWithGenerics()
public open fun foo(/*0*/ p0: kotlin.String, /*1*/ p1: kotlin.List<kotlin.Map.Entry<kotlin.String?, kotlin.String>?>): kotlin.String
public open fun foo(/*0*/ a: kotlin.String, /*1*/ b: kotlin.List<kotlin.Map.Entry<kotlin.String?, kotlin.String>?>): kotlin.String
}
@@ -3,5 +3,5 @@ package test
import java.util.*
public open class MethodWithMappedClasses : Object() {
public open fun <T> copy(p0 : MutableList<in T>, p1 : List<T>) {}
public open fun <T> copy(dest : MutableList<in T>, src : List<T>) {}
}
@@ -2,5 +2,5 @@ package test
public open class MethodWithMappedClasses : java.lang.Object {
public constructor MethodWithMappedClasses()
public open fun </*0*/ T> copy(/*0*/ p0: kotlin.MutableList<in T>, /*1*/ p1: kotlin.List<T>): kotlin.Unit
public open fun </*0*/ T> copy(/*0*/ dest: kotlin.MutableList<in T>, /*1*/ src: kotlin.List<T>): kotlin.Unit
}
@@ -3,6 +3,6 @@ package test
import java.util.*
public open class MethodWithTypeParameters : Object() {
public open fun <A, B : Runnable> foo(p0 : A, p1 : List<B>, p2: MutableList<in String?>) where B : List<Cloneable> {
public open fun <A, B : Runnable> foo(a : A, b : List<B>, c: MutableList<in String?>) where B : List<Cloneable> {
}
}
@@ -2,5 +2,5 @@ package test
public open class MethodWithTypeParameters : java.lang.Object {
public constructor MethodWithTypeParameters()
public open fun </*0*/ A, /*1*/ B : java.lang.Runnable> foo(/*0*/ p0: A, /*1*/ p1: kotlin.List<B>, /*2*/ p2: kotlin.MutableList<in kotlin.String?>): kotlin.Unit where B : kotlin.List<java.lang.Cloneable>
public open fun </*0*/ A, /*1*/ B : java.lang.Runnable> foo(/*0*/ a: A, /*1*/ b: kotlin.List<B>, /*2*/ c: kotlin.MutableList<in kotlin.String?>): kotlin.Unit where B : kotlin.List<java.lang.Cloneable>
}
@@ -3,7 +3,7 @@ package test
import java.util.*
public open class MethodWithVararg : Object() {
public open fun foo(vararg p0 : String) {
public open fun foo(vararg s : String) {
throw UnsupportedOperationException()
}
}
@@ -2,5 +2,5 @@ package test
public open class MethodWithVararg : java.lang.Object {
public constructor MethodWithVararg()
public open fun foo(/*0*/ vararg p0: kotlin.String /*kotlin.Array<kotlin.String>*/): kotlin.Unit
public open fun foo(/*0*/ vararg s: kotlin.String /*kotlin.Array<kotlin.String>*/): kotlin.Unit
}
@@ -1,7 +1,7 @@
package test
public open class RedundantProjectionKind : Object() {
public open fun foo(p0: List<Number>) {
public open fun foo(list: List<Number>) {
throw UnsupportedOperationException()
}
}
@@ -2,5 +2,5 @@ package test
public open class RedundantProjectionKind : java.lang.Object {
public constructor RedundantProjectionKind()
public open fun foo(/*0*/ p0: kotlin.List<kotlin.Number>): kotlin.Unit
public open fun foo(/*0*/ list: kotlin.List<kotlin.Number>): kotlin.Unit
}
@@ -3,11 +3,11 @@ package test
public trait PropagateTypeArgumentNullable: Object {
public trait Super: Object {
public fun outS(p0: List<String?>)
public fun outS(p: List<String?>)
public fun invOutS(p0 : MutableList<List<String?>>)
public fun invOutS(p : MutableList<List<String?>>)
public fun outOutS(p0 : List<List<String?>>)
public fun outOutS(p : List<List<String?>>)
public fun outR() : List<String?>
public fun invR() : MutableList<String?>
@@ -16,11 +16,11 @@ public trait PropagateTypeArgumentNullable: Object {
}
public trait Sub: Super {
override fun outS(p0: List<String?>)
override fun outS(p: List<String?>)
override fun invOutS(p0 : MutableList<List<String?>>)
override fun invOutS(p : MutableList<List<String?>>)
override fun outOutS(p0 : List<List<String?>>)
override fun outOutS(p : List<List<String?>>)
override fun outR() : List<String?>
override fun invR() : MutableList<String?>
@@ -4,19 +4,19 @@ public trait PropagateTypeArgumentNullable : java.lang.Object {
public trait Sub : test.PropagateTypeArgumentNullable.Super {
public abstract override /*1*/ fun invOutR(): kotlin.MutableList<kotlin.List<kotlin.String?>>
public abstract override /*1*/ fun invOutS(/*0*/ p0: kotlin.MutableList<kotlin.List<kotlin.String?>>): kotlin.Unit
public abstract override /*1*/ fun invOutS(/*0*/ p: kotlin.MutableList<kotlin.List<kotlin.String?>>): kotlin.Unit
public abstract override /*1*/ fun invR(): kotlin.MutableList<kotlin.String?>
public abstract override /*1*/ fun outOutS(/*0*/ p0: kotlin.List<kotlin.List<kotlin.String?>>): kotlin.Unit
public abstract override /*1*/ fun outOutS(/*0*/ p: kotlin.List<kotlin.List<kotlin.String?>>): kotlin.Unit
public abstract override /*1*/ fun outR(): kotlin.List<kotlin.String?>
public abstract override /*1*/ fun outS(/*0*/ p0: kotlin.List<kotlin.String?>): kotlin.Unit
public abstract override /*1*/ fun outS(/*0*/ p: kotlin.List<kotlin.String?>): kotlin.Unit
}
public trait Super : java.lang.Object {
public abstract fun invOutR(): kotlin.MutableList<kotlin.List<kotlin.String?>>
public abstract fun invOutS(/*0*/ p0: kotlin.MutableList<kotlin.List<kotlin.String?>>): kotlin.Unit
public abstract fun invOutS(/*0*/ p: kotlin.MutableList<kotlin.List<kotlin.String?>>): kotlin.Unit
public abstract fun invR(): kotlin.MutableList<kotlin.String?>
public abstract fun outOutS(/*0*/ p0: kotlin.List<kotlin.List<kotlin.String?>>): kotlin.Unit
public abstract fun outOutS(/*0*/ p: kotlin.List<kotlin.List<kotlin.String?>>): kotlin.Unit
public abstract fun outR(): kotlin.List<kotlin.String?>
public abstract fun outS(/*0*/ p0: kotlin.List<kotlin.String?>): kotlin.Unit
public abstract fun outS(/*0*/ p: kotlin.List<kotlin.String?>): kotlin.Unit
}
}
@@ -3,12 +3,12 @@ package test
public trait ChangeProjectionKind1: Object {
public trait Super: Object {
public fun foo(p0: MutableList<in String>)
public fun foo(p: MutableList<in String>)
public fun dummy() // to avoid loading as SAM interface
}
public trait Sub: Super {
override fun foo(p0: MutableList<in String>)
override fun foo(p: MutableList<in String>)
}
}
@@ -4,11 +4,11 @@ public trait ChangeProjectionKind1 : java.lang.Object {
public trait Sub : test.ChangeProjectionKind1.Super {
public abstract override /*1*/ /*fake_override*/ fun dummy(): kotlin.Unit
public abstract override /*1*/ fun foo(/*0*/ p0: kotlin.MutableList<in kotlin.String>): kotlin.Unit
public abstract override /*1*/ fun foo(/*0*/ p: kotlin.MutableList<in kotlin.String>): kotlin.Unit
}
public trait Super : java.lang.Object {
public abstract fun dummy(): kotlin.Unit
public abstract fun foo(/*0*/ p0: kotlin.MutableList<in kotlin.String>): kotlin.Unit
public abstract fun foo(/*0*/ p: kotlin.MutableList<in kotlin.String>): kotlin.Unit
}
}
@@ -3,12 +3,12 @@ package test
public trait ChangeProjectionKind2: Object {
public trait Super: Object {
public fun foo(p0: MutableList<String>)
public fun foo(p: MutableList<String>)
public fun dummy() // to avoid loading as SAM interface
}
public trait Sub: Super {
override fun foo(p0: MutableList<String>)
override fun foo(p: MutableList<String>)
}
}
@@ -4,11 +4,11 @@ public trait ChangeProjectionKind2 : java.lang.Object {
public trait Sub : test.ChangeProjectionKind2.Super {
public abstract override /*1*/ /*fake_override*/ fun dummy(): kotlin.Unit
public abstract override /*1*/ fun foo(/*0*/ p0: kotlin.MutableList<kotlin.String>): kotlin.Unit
public abstract override /*1*/ fun foo(/*0*/ p: kotlin.MutableList<kotlin.String>): kotlin.Unit
}
public trait Super : java.lang.Object {
public abstract fun dummy(): kotlin.Unit
public abstract fun foo(/*0*/ p0: kotlin.MutableList<kotlin.String>): kotlin.Unit
public abstract fun foo(/*0*/ p: kotlin.MutableList<kotlin.String>): kotlin.Unit
}
}
@@ -3,16 +3,16 @@ package test
public trait DeeplySubstitutedClassParameter: Object {
public trait Super<T>: Object {
public fun foo(p0: T)
public fun foo(t: T)
public fun dummy() // to avoid loading as SAM interface
}
public trait Middle<E>: Super<E> {
override fun foo(p0: E)
override fun foo(t: E)
}
public trait Sub: Middle<String> {
override fun foo(p0: String)
override fun foo(t: String)
}
}
@@ -4,16 +4,16 @@ public trait DeeplySubstitutedClassParameter : java.lang.Object {
public trait Middle</*0*/ E> : test.DeeplySubstitutedClassParameter.Super<E> {
public abstract override /*1*/ /*fake_override*/ fun dummy(): kotlin.Unit
public abstract override /*1*/ fun foo(/*0*/ p0: E): kotlin.Unit
public abstract override /*1*/ fun foo(/*0*/ t: E): kotlin.Unit
}
public trait Sub : test.DeeplySubstitutedClassParameter.Middle<kotlin.String> {
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*/ t: kotlin.String): kotlin.Unit
}
public trait Super</*0*/ T> : java.lang.Object {
public abstract fun dummy(): kotlin.Unit
public abstract fun foo(/*0*/ p0: T): kotlin.Unit
public abstract fun foo(/*0*/ t: T): kotlin.Unit
}
}
@@ -3,7 +3,7 @@ package test
public trait DeeplySubstitutedClassParameter2: Object {
public trait Super<T>: Object {
public fun foo(p0: T)
public fun foo(t: T)
public fun dummy() // to avoid loading as SAM interface
}
@@ -12,6 +12,6 @@ public trait DeeplySubstitutedClassParameter2: Object {
}
public trait Sub: Middle<String> {
override fun foo(p0: String)
override fun foo(t: String)
}
}
@@ -4,16 +4,16 @@ public trait DeeplySubstitutedClassParameter2 : java.lang.Object {
public trait Middle</*0*/ E> : test.DeeplySubstitutedClassParameter2.Super<E> {
public abstract override /*1*/ /*fake_override*/ fun dummy(): kotlin.Unit
public abstract override /*1*/ /*fake_override*/ fun foo(/*0*/ p0: E): kotlin.Unit
public abstract override /*1*/ /*fake_override*/ fun foo(/*0*/ t: E): kotlin.Unit
}
public trait Sub : test.DeeplySubstitutedClassParameter2.Middle<kotlin.String> {
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*/ t: kotlin.String): kotlin.Unit
}
public trait Super</*0*/ T> : java.lang.Object {
public abstract fun dummy(): kotlin.Unit
public abstract fun foo(/*0*/ p0: T): kotlin.Unit
public abstract fun foo(/*0*/ t: T): kotlin.Unit
}
}
@@ -3,12 +3,12 @@ package test
public trait InheritMutability: Object {
public trait Super: Object {
public fun foo(p0: MutableList<String>)
public fun foo(p: MutableList<String>)
public fun dummy() // to avoid loading as SAM interface
}
public trait Sub: Super {
override fun foo(p0: MutableList<String>)
override fun foo(p: MutableList<String>)
}
}
@@ -4,11 +4,11 @@ public trait InheritMutability : java.lang.Object {
public trait Sub : test.InheritMutability.Super {
public abstract override /*1*/ /*fake_override*/ fun dummy(): kotlin.Unit
public abstract override /*1*/ fun foo(/*0*/ p0: kotlin.MutableList<kotlin.String>): kotlin.Unit
public abstract override /*1*/ fun foo(/*0*/ p: kotlin.MutableList<kotlin.String>): kotlin.Unit
}
public trait Super : java.lang.Object {
public abstract fun dummy(): kotlin.Unit
public abstract fun foo(/*0*/ p0: kotlin.MutableList<kotlin.String>): kotlin.Unit
public abstract fun foo(/*0*/ p: kotlin.MutableList<kotlin.String>): kotlin.Unit
}
}
@@ -3,12 +3,12 @@ package test
public trait InheritNotVarargNotNull: Object {
public trait Super: Object {
public fun foo(p0: Array<out String>)
public fun foo(p: Array<out String>)
public fun dummy() // to avoid loading as SAM interface
}
public trait Sub: Super {
override fun foo(p0: Array<out String>)
override fun foo(p: Array<out String>)
}
}
@@ -4,11 +4,11 @@ public trait InheritNotVarargNotNull : java.lang.Object {
public trait Sub : test.InheritNotVarargNotNull.Super {
public abstract override /*1*/ /*fake_override*/ fun dummy(): kotlin.Unit
public abstract override /*1*/ fun foo(/*0*/ p0: kotlin.Array<out kotlin.String>): kotlin.Unit
public abstract override /*1*/ fun foo(/*0*/ p: kotlin.Array<out kotlin.String>): kotlin.Unit
}
public trait Super : java.lang.Object {
public abstract fun dummy(): kotlin.Unit
public abstract fun foo(/*0*/ p0: kotlin.Array<out kotlin.String>): kotlin.Unit
public abstract fun foo(/*0*/ p: kotlin.Array<out kotlin.String>): kotlin.Unit
}
}
@@ -3,12 +3,12 @@ package test
public trait InheritProjectionKind: Object {
public trait Super: Object {
public fun foo(p0: MutableList<in String>)
public fun foo(p: MutableList<in String>)
public fun dummy() // to avoid loading as SAM interface
}
public trait Sub: Super {
override fun foo(p0: MutableList<in String>)
override fun foo(p: MutableList<in String>)
}
}
@@ -4,11 +4,11 @@ public trait InheritProjectionKind : java.lang.Object {
public trait Sub : test.InheritProjectionKind.Super {
public abstract override /*1*/ /*fake_override*/ fun dummy(): kotlin.Unit
public abstract override /*1*/ fun foo(/*0*/ p0: kotlin.MutableList<in kotlin.String>): kotlin.Unit
public abstract override /*1*/ fun foo(/*0*/ p: kotlin.MutableList<in kotlin.String>): kotlin.Unit
}
public trait Super : java.lang.Object {
public abstract fun dummy(): kotlin.Unit
public abstract fun foo(/*0*/ p0: kotlin.MutableList<in kotlin.String>): kotlin.Unit
public abstract fun foo(/*0*/ p: kotlin.MutableList<in kotlin.String>): kotlin.Unit
}
}
@@ -3,12 +3,12 @@ package test
public trait InheritReadOnliness: Object {
public trait Super: Object {
public fun foo(p0: List<String>)
public fun foo(p: List<String>)
public fun dummy() // to avoid loading as SAM interface
}
public trait Sub: Super {
override fun foo(p0: List<String>)
override fun foo(p: List<String>)
}
}
@@ -4,11 +4,11 @@ public trait InheritReadOnliness : java.lang.Object {
public trait Sub : test.InheritReadOnliness.Super {
public abstract override /*1*/ /*fake_override*/ fun dummy(): kotlin.Unit
public abstract override /*1*/ fun foo(/*0*/ p0: kotlin.List<kotlin.String>): kotlin.Unit
public abstract override /*1*/ fun foo(/*0*/ p: kotlin.List<kotlin.String>): kotlin.Unit
}
public trait Super : java.lang.Object {
public abstract fun dummy(): kotlin.Unit
public abstract fun foo(/*0*/ p0: kotlin.List<kotlin.String>): kotlin.Unit
public abstract fun foo(/*0*/ p: kotlin.List<kotlin.String>): kotlin.Unit
}
}
@@ -3,12 +3,12 @@ package test
public trait InheritVarargNotNull: Object {
public trait Super: Object {
public fun foo(vararg p0: String)
public fun foo(vararg p: String)
public fun dummy() // to avoid loading as SAM interface
}
public trait Sub: Super {
override fun foo(vararg p0: String)
override fun foo(vararg p: String)
}
}
@@ -4,11 +4,11 @@ public trait InheritVarargNotNull : java.lang.Object {
public trait Sub : test.InheritVarargNotNull.Super {
public abstract override /*1*/ /*fake_override*/ fun dummy(): kotlin.Unit
public abstract override /*1*/ fun foo(/*0*/ vararg p0: kotlin.String /*kotlin.Array<kotlin.String>*/): kotlin.Unit
public abstract override /*1*/ fun foo(/*0*/ vararg p: kotlin.String /*kotlin.Array<kotlin.String>*/): kotlin.Unit
}
public trait Super : java.lang.Object {
public abstract fun dummy(): kotlin.Unit
public abstract fun foo(/*0*/ vararg p0: kotlin.String /*kotlin.Array<kotlin.String>*/): kotlin.Unit
public abstract fun foo(/*0*/ vararg p: kotlin.String /*kotlin.Array<kotlin.String>*/): kotlin.Unit
}
}
@@ -9,12 +9,12 @@ public trait Kt3302: Object {
}
public trait LinkedHashMap<K, V> : Object {
public fun put(p0: K, p1: V): V?
public fun put(key: K, value: V): V?
public fun dummy() // to avoid loading as SAM interface
}
public trait BasicBSONObject : LinkedHashMap<String, Any>, BSONObject {
override fun put(p0: String, p1: Any): Any?
override fun put(key: String, value: Any): Any?
}
}
@@ -9,11 +9,11 @@ public trait Kt3302 : java.lang.Object {
public trait BasicBSONObject : test.Kt3302.LinkedHashMap<kotlin.String, kotlin.Any>, test.Kt3302.BSONObject {
public abstract override /*2*/ /*fake_override*/ fun dummy(): kotlin.Unit
public abstract override /*2*/ fun put(/*0*/ p0: kotlin.String, /*1*/ p1: kotlin.Any): kotlin.Any?
public abstract override /*2*/ fun put(/*0*/ key: kotlin.String, /*1*/ value: kotlin.Any): kotlin.Any?
}
public trait LinkedHashMap</*0*/ K, /*1*/ V> : java.lang.Object {
public abstract fun dummy(): kotlin.Unit
public abstract fun put(/*0*/ p0: K, /*1*/ p1: V): V?
public abstract fun put(/*0*/ key: K, /*1*/ value: V): V?
}
}
@@ -3,12 +3,12 @@ package test
public trait MutableToReadOnly: Object {
public trait Super: Object {
public fun foo(p0: MutableList<String>)
public fun foo(p: MutableList<String>)
public fun dummy() // to avoid loading as SAM interface
}
public trait Sub: Super {
override fun foo(p0: MutableList<String>)
override fun foo(p: MutableList<String>)
}
}
@@ -4,11 +4,11 @@ public trait MutableToReadOnly : java.lang.Object {
public trait Sub : test.MutableToReadOnly.Super {
public abstract override /*1*/ /*fake_override*/ fun dummy(): kotlin.Unit
public abstract override /*1*/ fun foo(/*0*/ p0: kotlin.MutableList<kotlin.String>): kotlin.Unit
public abstract override /*1*/ fun foo(/*0*/ p: kotlin.MutableList<kotlin.String>): kotlin.Unit
}
public trait Super : java.lang.Object {
public abstract fun dummy(): kotlin.Unit
public abstract fun foo(/*0*/ p0: kotlin.MutableList<kotlin.String>): kotlin.Unit
public abstract fun foo(/*0*/ p: kotlin.MutableList<kotlin.String>): kotlin.Unit
}
}
@@ -3,12 +3,12 @@ package test
public trait NullableToNotNullKotlinSignature: Object {
public trait Super: Object {
public fun foo(p0: String?)
public fun foo(p: String?)
public fun dummy() // to avoid loading as SAM interface
}
public trait Sub: Super {
override fun foo(p0: String?)
override fun foo(p: String?)
}
}
@@ -4,11 +4,11 @@ public trait NullableToNotNullKotlinSignature : java.lang.Object {
public trait Sub : test.NullableToNotNullKotlinSignature.Super {
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*/ p: kotlin.String?): kotlin.Unit
}
public trait Super : java.lang.Object {
public abstract fun dummy(): kotlin.Unit
public abstract fun foo(/*0*/ p0: kotlin.String?): kotlin.Unit
public abstract fun foo(/*0*/ p: kotlin.String?): kotlin.Unit
}
}
@@ -3,12 +3,12 @@ package test
public trait ReadOnlyToMutable: Object {
public trait Super: Object {
public fun foo(p0: List<String>)
public fun foo(p: List<String>)
public fun dummy() // to avoid loading as SAM interface
}
public trait Sub: Super {
override fun foo(p0: List<String>)
override fun foo(p: List<String>)
}
}
@@ -4,11 +4,11 @@ public trait ReadOnlyToMutable : java.lang.Object {
public trait Sub : test.ReadOnlyToMutable.Super {
public abstract override /*1*/ /*fake_override*/ fun dummy(): kotlin.Unit
public abstract override /*1*/ fun foo(/*0*/ p0: kotlin.List<kotlin.String>): kotlin.Unit
public abstract override /*1*/ fun foo(/*0*/ p: kotlin.List<kotlin.String>): kotlin.Unit
}
public trait Super : java.lang.Object {
public abstract fun dummy(): kotlin.Unit
public abstract fun foo(/*0*/ p0: kotlin.List<kotlin.String>): kotlin.Unit
public abstract fun foo(/*0*/ p: kotlin.List<kotlin.String>): kotlin.Unit
}
}
@@ -10,12 +10,12 @@ public trait SubclassFromGenericAndNot: Object {
}
public trait Generic<T> : Object {
public fun foo(p0: T)
public fun foo(key: T)
public fun dummy() // to avoid loading as SAM interface
}
public trait Sub : NonGeneric, Generic<String> {
override fun foo(p0: String)
override fun foo(key: String)
}
}
@@ -4,7 +4,7 @@ public trait SubclassFromGenericAndNot : java.lang.Object {
public trait Generic</*0*/ T> : java.lang.Object {
public abstract fun dummy(): kotlin.Unit
public abstract fun foo(/*0*/ p0: T): kotlin.Unit
public abstract fun foo(/*0*/ key: T): kotlin.Unit
}
public trait NonGeneric : java.lang.Object {
@@ -14,6 +14,6 @@ public trait SubclassFromGenericAndNot : java.lang.Object {
public trait Sub : test.SubclassFromGenericAndNot.NonGeneric, test.SubclassFromGenericAndNot.Generic<kotlin.String> {
public abstract override /*2*/ /*fake_override*/ fun dummy(): kotlin.Unit
public abstract override /*2*/ fun foo(/*0*/ p0: kotlin.String): kotlin.Unit
public abstract override /*2*/ fun foo(/*0*/ key: kotlin.String): kotlin.Unit
}
}
@@ -3,12 +3,12 @@ package test
public trait SubstitutedClassParameter: Object {
public trait Super<T>: Object {
public fun foo(p0: T)
public fun foo(t: T)
public fun dummy() // to avoid loading as SAM interface
}
public trait Sub: Super<String> {
override fun foo(p0: String)
override fun foo(t: String)
}
}
@@ -4,11 +4,11 @@ public trait SubstitutedClassParameter : java.lang.Object {
public trait Sub : test.SubstitutedClassParameter.Super<kotlin.String> {
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*/ t: kotlin.String): kotlin.Unit
}
public trait Super</*0*/ T> : java.lang.Object {
public abstract fun dummy(): kotlin.Unit
public abstract fun foo(/*0*/ p0: T): kotlin.Unit
public abstract fun foo(/*0*/ t: T): kotlin.Unit
}
}
@@ -3,18 +3,18 @@ package test
public trait SubstitutedClassParameters: Object {
public trait Super1<T>: Object {
public fun foo(p0: T)
public fun foo(t: T)
public fun dummy() // to avoid loading as SAM interface
}
public trait Super2<E>: Object {
public fun foo(p0: E)
public fun foo(t: E)
public fun dummy() // to avoid loading as SAM interface
}
public trait Sub: Super1<String>, Super2<String> {
override fun foo(p0: String)
override fun foo(t: String)
}
}
@@ -4,16 +4,16 @@ public trait SubstitutedClassParameters : java.lang.Object {
public trait Sub : test.SubstitutedClassParameters.Super1<kotlin.String>, test.SubstitutedClassParameters.Super2<kotlin.String> {
public abstract override /*2*/ /*fake_override*/ fun dummy(): kotlin.Unit
public abstract override /*2*/ fun foo(/*0*/ p0: kotlin.String): kotlin.Unit
public abstract override /*2*/ fun foo(/*0*/ t: kotlin.String): kotlin.Unit
}
public trait Super1</*0*/ T> : java.lang.Object {
public abstract fun dummy(): kotlin.Unit
public abstract fun foo(/*0*/ p0: T): kotlin.Unit
public abstract fun foo(/*0*/ t: T): kotlin.Unit
}
public trait Super2</*0*/ E> : java.lang.Object {
public abstract fun dummy(): kotlin.Unit
public abstract fun foo(/*0*/ p0: E): kotlin.Unit
public abstract fun foo(/*0*/ t: E): kotlin.Unit
}
}
@@ -3,5 +3,5 @@ package test;
import java.util.*;
public interface SubclassOfMapEntry<K, V> extends Map.Entry<K, V> {
V setValue(V v);
V setValue(V value);
}
@@ -1,5 +1,5 @@
package test
public trait SubclassOfMapEntry<K, V>: MutableMap.MutableEntry<K, V> {
override fun setValue(p0: V) : V
override fun setValue(value: V) : V
}
@@ -3,5 +3,5 @@ package test
public trait SubclassOfMapEntry</*0*/ K, /*1*/ V> : kotlin.MutableMap.MutableEntry<K, V> {
public abstract override /*1*/ /*fake_override*/ fun getKey(): K
public abstract override /*1*/ /*fake_override*/ fun getValue(): V
public abstract override /*1*/ fun setValue(/*0*/ p0: V): V
public abstract override /*1*/ fun setValue(/*0*/ value: V): V
}
@@ -3,10 +3,10 @@ package test
public trait InheritMutability: Object {
public trait Super: Object {
public fun <A: MutableList<String>> foo(p0: A)
public fun <A: MutableList<String>> foo(a: A)
}
public trait Sub: Super {
override fun <B: MutableList<String>> foo(p0: B)
override fun <B: MutableList<String>> foo(a: B)
}
}
@@ -3,10 +3,10 @@ package test
public trait InheritMutability : java.lang.Object {
public trait Sub : test.InheritMutability.Super {
public abstract override /*1*/ fun </*0*/ B : kotlin.MutableList<kotlin.String>> foo(/*0*/ p0: B): kotlin.Unit
public abstract override /*1*/ fun </*0*/ B : kotlin.MutableList<kotlin.String>> foo(/*0*/ a: B): kotlin.Unit
}
public trait Super : java.lang.Object {
public abstract fun </*0*/ A : kotlin.MutableList<kotlin.String>> foo(/*0*/ p0: A): kotlin.Unit
public abstract fun </*0*/ A : kotlin.MutableList<kotlin.String>> foo(/*0*/ a: A): kotlin.Unit
}
}
@@ -3,10 +3,10 @@ package test
public trait InheritNullability: Object {
public trait Super: Object {
public fun <A: CharSequence> foo(p0: A)
public fun <A: CharSequence> foo(a: A)
}
public trait Sub: Super {
override fun <B: CharSequence> foo(p0: B)
override fun <B: CharSequence> foo(a: B)
}
}
@@ -3,10 +3,10 @@ package test
public trait InheritNullability : java.lang.Object {
public trait Sub : test.InheritNullability.Super {
public abstract override /*1*/ fun </*0*/ B : kotlin.CharSequence> foo(/*0*/ p0: B): kotlin.Unit
public abstract override /*1*/ fun </*0*/ B : kotlin.CharSequence> foo(/*0*/ a: B): kotlin.Unit
}
public trait Super : java.lang.Object {
public abstract fun </*0*/ A : kotlin.CharSequence> foo(/*0*/ p0: A): kotlin.Unit
public abstract fun </*0*/ A : kotlin.CharSequence> foo(/*0*/ a: A): kotlin.Unit
}
}
@@ -3,10 +3,10 @@ package test
public trait InheritReadOnliness: Object {
public trait Super: Object {
public fun <A: List<String>> foo(p0: A)
public fun <A: List<String>> foo(a: A)
}
public trait Sub: Super {
override fun <B: List<String>> foo(p0: B)
override fun <B: List<String>> foo(a: B)
}
}
@@ -3,10 +3,10 @@ package test
public trait InheritReadOnliness : java.lang.Object {
public trait Sub : test.InheritReadOnliness.Super {
public abstract override /*1*/ fun </*0*/ B : kotlin.List<kotlin.String>> foo(/*0*/ p0: B): kotlin.Unit
public abstract override /*1*/ fun </*0*/ B : kotlin.List<kotlin.String>> foo(/*0*/ a: B): kotlin.Unit
}
public trait Super : java.lang.Object {
public abstract fun </*0*/ A : kotlin.List<kotlin.String>> foo(/*0*/ p0: A): kotlin.Unit
public abstract fun </*0*/ A : kotlin.List<kotlin.String>> foo(/*0*/ a: A): kotlin.Unit
}
}
@@ -3,10 +3,10 @@ package test
public trait TwoBounds: Object {
public trait Super: Object {
public fun <A: CharSequence> foo(p0: A) where A: Cloneable
public fun <A: CharSequence> foo(a: A) where A: Cloneable
}
public trait Sub: Super {
override fun <B: CharSequence> foo(p0: B) where B: Cloneable
override fun <B: CharSequence> foo(a: B) where B: Cloneable
}
}
@@ -3,10 +3,10 @@ package test
public trait TwoBounds : java.lang.Object {
public trait Sub : test.TwoBounds.Super {
public abstract override /*1*/ fun </*0*/ B : kotlin.CharSequence> foo(/*0*/ p0: B): kotlin.Unit where B : java.lang.Cloneable
public abstract override /*1*/ fun </*0*/ B : kotlin.CharSequence> foo(/*0*/ a: B): kotlin.Unit where B : java.lang.Cloneable
}
public trait Super : java.lang.Object {
public abstract fun </*0*/ A : kotlin.CharSequence> foo(/*0*/ p0: A): kotlin.Unit where A : java.lang.Cloneable
public abstract fun </*0*/ A : kotlin.CharSequence> foo(/*0*/ a: A): kotlin.Unit where A : java.lang.Cloneable
}
}
@@ -3,14 +3,14 @@ package test
public trait TwoSuperclasses: Object {
public trait Super1: Object {
public fun <A: CharSequence> foo(p0: A)
public fun <A: CharSequence> foo(a: A)
}
public trait Super2: Object {
public fun <B: CharSequence> foo(p0: B)
public fun <B: CharSequence> foo(a: B)
}
public trait Sub: Super1, Super2 {
override fun <C: CharSequence> foo(p0: C)
override fun <C: CharSequence> foo(a: C)
}
}
@@ -3,14 +3,14 @@ package test
public trait TwoSuperclasses : java.lang.Object {
public trait Sub : test.TwoSuperclasses.Super1, test.TwoSuperclasses.Super2 {
public abstract override /*2*/ fun </*0*/ C : kotlin.CharSequence> foo(/*0*/ p0: C): kotlin.Unit
public abstract override /*2*/ fun </*0*/ C : kotlin.CharSequence> foo(/*0*/ a: C): kotlin.Unit
}
public trait Super1 : java.lang.Object {
public abstract fun </*0*/ A : kotlin.CharSequence> foo(/*0*/ p0: A): kotlin.Unit
public abstract fun </*0*/ A : kotlin.CharSequence> foo(/*0*/ a: A): kotlin.Unit
}
public trait Super2 : java.lang.Object {
public abstract fun </*0*/ B : kotlin.CharSequence> foo(/*0*/ p0: B): kotlin.Unit
public abstract fun </*0*/ B : kotlin.CharSequence> foo(/*0*/ a: B): kotlin.Unit
}
}
@@ -3,10 +3,10 @@ package test
public trait TwoTypeParameters: Object {
public trait Super: Object {
public fun <A: CharSequence, B: Cloneable> foo(p0: A, p1: B)
public fun <A: CharSequence, B: Cloneable> foo(a: A, b: B)
}
public trait Sub: Super {
override fun <B: CharSequence, A: Cloneable> foo(p0: B, p1: A)
override fun <B: CharSequence, A: Cloneable> foo(a: B, b: A)
}
}
@@ -3,10 +3,10 @@ package test
public trait TwoTypeParameters : java.lang.Object {
public trait Sub : test.TwoTypeParameters.Super {
public abstract override /*1*/ fun </*0*/ B : kotlin.CharSequence, /*1*/ A : java.lang.Cloneable> foo(/*0*/ p0: B, /*1*/ p1: A): kotlin.Unit
public abstract override /*1*/ fun </*0*/ B : kotlin.CharSequence, /*1*/ A : java.lang.Cloneable> foo(/*0*/ a: B, /*1*/ b: A): kotlin.Unit
}
public trait Super : java.lang.Object {
public abstract fun </*0*/ A : kotlin.CharSequence, /*1*/ B : java.lang.Cloneable> foo(/*0*/ p0: A, /*1*/ p1: B): kotlin.Unit
public abstract fun </*0*/ A : kotlin.CharSequence, /*1*/ B : java.lang.Cloneable> foo(/*0*/ a: A, /*1*/ b: B): kotlin.Unit
}
}
@@ -3,10 +3,10 @@ package test
public trait UseParameterAsUpperBound: Object {
public trait Super: Object {
public fun <A, B: A> foo(p0: A, p1: B)
public fun <A, B: A> foo(a: A, b: B)
}
public trait Sub: Super {
override fun <B, A: B> foo(p0: B, p1: A)
override fun <B, A: B> foo(a: B, b: A)
}
}
@@ -3,10 +3,10 @@ package test
public trait UseParameterAsUpperBound : java.lang.Object {
public trait Sub : test.UseParameterAsUpperBound.Super {
public abstract override /*1*/ fun </*0*/ B, /*1*/ A : B> foo(/*0*/ p0: B, /*1*/ p1: A): kotlin.Unit
public abstract override /*1*/ fun </*0*/ B, /*1*/ A : B> foo(/*0*/ a: B, /*1*/ b: A): kotlin.Unit
}
public trait Super : java.lang.Object {
public abstract fun </*0*/ A, /*1*/ B : A> foo(/*0*/ p0: A, /*1*/ p1: B): kotlin.Unit
public abstract fun </*0*/ A, /*1*/ B : A> foo(/*0*/ a: A, /*1*/ b: B): kotlin.Unit
}
}
@@ -3,10 +3,10 @@ package test
public trait UseParameterInUpperBound: Object {
public trait Super: Object {
public fun <A, B: List<A>> foo(p0: A, p1: B)
public fun <A, B: List<A>> foo(a: A, b: B)
}
public trait Sub: Super {
override fun <B, A: List<B>> foo(p0: B, p1: A)
override fun <B, A: List<B>> foo(a: B, b: A)
}
}
@@ -3,10 +3,10 @@ package test
public trait UseParameterInUpperBound : java.lang.Object {
public trait Sub : test.UseParameterInUpperBound.Super {
public abstract override /*1*/ fun </*0*/ B, /*1*/ A : kotlin.List<B>> foo(/*0*/ p0: B, /*1*/ p1: A): kotlin.Unit
public abstract override /*1*/ fun </*0*/ B, /*1*/ A : kotlin.List<B>> foo(/*0*/ a: B, /*1*/ b: A): kotlin.Unit
}
public trait Super : java.lang.Object {
public abstract fun </*0*/ A, /*1*/ B : kotlin.List<A>> foo(/*0*/ p0: A, /*1*/ p1: B): kotlin.Unit
public abstract fun </*0*/ A, /*1*/ B : kotlin.List<A>> foo(/*0*/ a: A, /*1*/ b: B): kotlin.Unit
}
}
@@ -3,10 +3,10 @@ package test
public trait UseParameterInUpperBoundWithKotlinSignature: Object {
public trait Super: Object {
public fun <A, B: List<A>> foo(p0: A, p1: B)
public fun <A, B: List<A>> foo(a: A, b: B)
}
public trait Sub: Super {
override fun <B, A: List<B>> foo(p0: B, p1: A)
override fun <B, A: List<B>> foo(b: B, a: A)
}
}
@@ -3,10 +3,10 @@ package test
public trait UseParameterInUpperBoundWithKotlinSignature : java.lang.Object {
public trait Sub : test.UseParameterInUpperBoundWithKotlinSignature.Super {
public abstract override /*1*/ fun </*0*/ B, /*1*/ A : kotlin.List<B>> foo(/*0*/ p0: B, /*1*/ p1: A): kotlin.Unit
public abstract override /*1*/ fun </*0*/ B, /*1*/ A : kotlin.List<B>> foo(/*0*/ b: B, /*1*/ a: A): kotlin.Unit
}
public trait Super : java.lang.Object {
public abstract fun </*0*/ A, /*1*/ B : kotlin.List<A>> foo(/*0*/ p0: A, /*1*/ p1: B): kotlin.Unit
public abstract fun </*0*/ A, /*1*/ B : kotlin.List<A>> foo(/*0*/ a: A, /*1*/ b: B): kotlin.Unit
}
}
@@ -3,7 +3,7 @@ package test
import java.util.AbstractList
public open class ModalityOfFakeOverrides : AbstractList<String>() {
override fun get(p0: Int): String {
override fun get(index: Int): String {
return ""
}
@@ -3,28 +3,28 @@ package test
public open class ModalityOfFakeOverrides : java.util.AbstractList<kotlin.String> {
public constructor ModalityOfFakeOverrides()
protected/*protected and package*/ final override /*1*/ /*fake_override*/ var modCount: kotlin.Int
public open override /*1*/ /*fake_override*/ fun add(/*0*/ p0: kotlin.Int, /*1*/ p1: kotlin.String): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun add(/*0*/ p0: kotlin.String): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun add(/*0*/ index: kotlin.Int, /*1*/ element: kotlin.String): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun add(/*0*/ e: kotlin.String): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun addAll(/*0*/ c: kotlin.Collection<kotlin.String>): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun addAll(/*0*/ p0: kotlin.Int, /*1*/ p1: kotlin.Collection<kotlin.String>): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun addAll(/*0*/ index: kotlin.Int, /*1*/ c: kotlin.Collection<kotlin.String>): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun clear(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun contains(/*0*/ o: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun containsAll(/*0*/ c: kotlin.Collection<kotlin.Any?>): kotlin.Boolean
public open override /*1*/ fun get(/*0*/ p0: kotlin.Int): kotlin.String
public open override /*1*/ /*fake_override*/ fun indexOf(/*0*/ p0: kotlin.Any?): kotlin.Int
public open override /*1*/ fun get(/*0*/ index: kotlin.Int): kotlin.String
public open override /*1*/ /*fake_override*/ fun indexOf(/*0*/ o: kotlin.Any?): kotlin.Int
public open override /*1*/ /*fake_override*/ fun isEmpty(): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun iterator(): kotlin.MutableIterator<kotlin.String>
public open override /*1*/ /*fake_override*/ fun lastIndexOf(/*0*/ p0: kotlin.Any?): kotlin.Int
public open override /*1*/ /*fake_override*/ fun lastIndexOf(/*0*/ o: kotlin.Any?): kotlin.Int
public open override /*1*/ /*fake_override*/ fun listIterator(): kotlin.MutableListIterator<kotlin.String>
public open override /*1*/ /*fake_override*/ fun listIterator(/*0*/ p0: kotlin.Int): kotlin.MutableListIterator<kotlin.String>
public open override /*1*/ /*fake_override*/ fun listIterator(/*0*/ index: kotlin.Int): kotlin.MutableListIterator<kotlin.String>
public open override /*1*/ /*fake_override*/ fun remove(/*0*/ o: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun remove(/*0*/ p0: kotlin.Int): kotlin.String
public open override /*1*/ /*fake_override*/ fun remove(/*0*/ index: kotlin.Int): kotlin.String
public open override /*1*/ /*fake_override*/ fun removeAll(/*0*/ c: kotlin.Collection<kotlin.Any?>): kotlin.Boolean
protected/*protected and package*/ open override /*1*/ /*fake_override*/ fun removeRange(/*0*/ p0: kotlin.Int, /*1*/ p1: kotlin.Int): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun retainAll(/*0*/ c: kotlin.Collection<kotlin.Any?>): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun set(/*0*/ p0: kotlin.Int, /*1*/ p1: kotlin.String): kotlin.String
public open override /*1*/ /*fake_override*/ fun set(/*0*/ index: kotlin.Int, /*1*/ element: kotlin.String): kotlin.String
public open override /*1*/ fun size(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun subList(/*0*/ p0: kotlin.Int, /*1*/ p1: kotlin.Int): kotlin.MutableList<kotlin.String>
public open override /*1*/ /*fake_override*/ fun subList(/*0*/ fromIndex: kotlin.Int, /*1*/ toIndex: kotlin.Int): kotlin.MutableList<kotlin.String>
public open override /*1*/ /*fake_override*/ fun toArray(): kotlin.Array<kotlin.Any?>
public open override /*1*/ /*fake_override*/ fun </*0*/ T> toArray(/*0*/ p0: kotlin.Array<out T>): kotlin.Array<T>
public open override /*1*/ /*fake_override*/ fun </*0*/ T> toArray(/*0*/ a: kotlin.Array<out T>): kotlin.Array<T>
}
@@ -2,7 +2,7 @@ package test
public open class Sub : test.Super {
public constructor Sub()
public open override /*1*/ fun kotlin.String.bar(/*0*/ param: kotlin.String): kotlin.String
public open override /*1*/ fun kotlin.String.bar(/*0*/ p: kotlin.String): kotlin.String
public final override /*1*/ /*fake_override*/ fun kotlin.String.foo(): kotlin.Unit
}
@@ -5356,6 +5356,16 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest {
doTest("compiler/testData/diagnostics/tests/override/parameterNames/jjkHierarchy.kt");
}
@TestMetadata("kjkHierarchy.kt")
public void testKjkHierarchy() throws Exception {
doTest("compiler/testData/diagnostics/tests/override/parameterNames/kjkHierarchy.kt");
}
@TestMetadata("kjkWithSeveralSupers.kt")
public void testKjkWithSeveralSupers() throws Exception {
doTest("compiler/testData/diagnostics/tests/override/parameterNames/kjkWithSeveralSupers.kt");
}
@TestMetadata("kotlinInheritsBothJavaAndKotlin.kt")
public void testKotlinInheritsBothJavaAndKotlin() throws Exception {
doTest("compiler/testData/diagnostics/tests/override/parameterNames/kotlinInheritsBothJavaAndKotlin.kt");
@@ -31,7 +31,7 @@ import org.jetbrains.jet.checkers.AbstractJetDiagnosticsTestWithStdLib;
/** This class is generated by {@link org.jetbrains.jet.generators.tests.TestsPackage}. DO NOT MODIFY MANUALLY */
@SuppressWarnings("all")
@TestMetadata("compiler/testData/diagnostics/testsWithStdLib")
@InnerTestClasses({JetDiagnosticsTestWithStdLibGenerated.Annotations.class, JetDiagnosticsTestWithStdLibGenerated.FunctionLiterals.class})
@InnerTestClasses({JetDiagnosticsTestWithStdLibGenerated.Annotations.class, JetDiagnosticsTestWithStdLibGenerated.FunctionLiterals.class, JetDiagnosticsTestWithStdLibGenerated.KotlinSignature.class})
public class JetDiagnosticsTestWithStdLibGenerated extends AbstractJetDiagnosticsTestWithStdLib {
public void testAllFilesPresentInTestsWithStdLib() throws Exception {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("compiler/testData/diagnostics/testsWithStdLib"), Pattern.compile("^(.+)\\.kt$"), true);
@@ -93,11 +93,25 @@ public class JetDiagnosticsTestWithStdLibGenerated extends AbstractJetDiagnostic
}
@TestMetadata("compiler/testData/diagnostics/testsWithStdLib/kotlinSignature")
public static class KotlinSignature extends AbstractJetDiagnosticsTestWithStdLib {
public void testAllFilesPresentInKotlinSignature() throws Exception {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("compiler/testData/diagnostics/testsWithStdLib/kotlinSignature"), Pattern.compile("^(.+)\\.kt$"), true);
}
@TestMetadata("parameterNames.kt")
public void testParameterNames() throws Exception {
doTest("compiler/testData/diagnostics/testsWithStdLib/kotlinSignature/parameterNames.kt");
}
}
public static Test suite() {
TestSuite suite = new TestSuite("JetDiagnosticsTestWithStdLibGenerated");
suite.addTestSuite(JetDiagnosticsTestWithStdLibGenerated.class);
suite.addTest(Annotations.innerSuite());
suite.addTestSuite(FunctionLiterals.class);
suite.addTestSuite(KotlinSignature.class);
return suite;
}
}
@@ -25,6 +25,8 @@ import org.jetbrains.jet.lang.descriptors.impl.SimpleFunctionDescriptorImpl;
import org.jetbrains.jet.lang.resolve.name.Name;
public class JavaMethodDescriptor extends SimpleFunctionDescriptorImpl implements JavaCallableMemberDescriptor {
private Boolean hasStableParameterNames = null;
public JavaMethodDescriptor(
@NotNull DeclarationDescriptor containingDeclaration,
@NotNull Annotations annotations,
@@ -54,17 +56,20 @@ public class JavaMethodDescriptor extends SimpleFunctionDescriptorImpl implement
@Override
public boolean hasStableParameterNames() {
// TODO: propagated names should be stable
return false;
assert hasStableParameterNames != null : "hasStableParameterNames was not set: " + this;
return hasStableParameterNames;
}
public void setHasStableParameterNames(boolean hasStableParameterNames) {
this.hasStableParameterNames = hasStableParameterNames;
}
@Override
protected FunctionDescriptorImpl createSubstitutedCopy(DeclarationDescriptor newOwner, boolean preserveOriginal, Kind kind) {
if (preserveOriginal) {
return new JavaMethodDescriptor(newOwner, getOriginal(), getAnnotations(), getName(), kind);
}
else {
return new JavaMethodDescriptor(newOwner, getAnnotations(), getName(), kind);
}
JavaMethodDescriptor result = preserveOriginal
? new JavaMethodDescriptor(newOwner, getOriginal(), getAnnotations(), getName(), kind)
: new JavaMethodDescriptor(newOwner, getAnnotations(), getName(), kind);
result.setHasStableParameterNames(hasStableParameterNames());
return result;
}
}
@@ -77,7 +77,7 @@ public class LazyJavaClassMemberScope(
val valueParameters = resolveValueParameters(c, constructorDescriptor, constructor.getValueParameters())
val effectiveSignature = c.externalSignatureResolver.resolveAlternativeMethodSignature(
constructor, false, null, null, valueParameters, Collections.emptyList())
constructor, false, null, null, valueParameters, Collections.emptyList(), false)
constructorDescriptor.initialize(
classDescriptor.getTypeConstructor().getParameters(),
@@ -126,7 +126,8 @@ public abstract class LazyJavaMemberScope(
val effectiveSignature: ExternalSignatureResolver.AlternativeMethodSignature
if (_containingDeclaration is PackageFragmentDescriptor) {
superFunctions = Collections.emptyList()
effectiveSignature = c.externalSignatureResolver.resolveAlternativeMethodSignature(method, false, returnType, null, valueParameters, methodTypeParameters)
effectiveSignature = c.externalSignatureResolver.resolveAlternativeMethodSignature(method, false, returnType, null, valueParameters,
methodTypeParameters, false)
signatureErrors = effectiveSignature.getErrors()
}
else if (_containingDeclaration is ClassDescriptor) {
@@ -134,7 +135,8 @@ public abstract class LazyJavaMemberScope(
superFunctions = propagated.getSuperMethods()
effectiveSignature = c.externalSignatureResolver.resolveAlternativeMethodSignature(
method, !superFunctions.isEmpty(), propagated.getReturnType(),
propagated.getReceiverType(), propagated.getValueParameters(), propagated.getTypeParameters())
propagated.getReceiverType(), propagated.getValueParameters(), propagated.getTypeParameters(),
propagated.hasStableParameterNames())
signatureErrors = ArrayList<String>(propagated.getErrors())
signatureErrors.addAll(effectiveSignature.getErrors())
@@ -153,6 +155,8 @@ public abstract class LazyJavaMemberScope(
method.getVisibility()
)
functionDescriptorImpl.setHasStableParameterNames(effectiveSignature.hasStableParameterNames())
if (record) {
c.javaResolverCache.recordMethod(method, functionDescriptorImpl)
}
@@ -45,19 +45,22 @@ public interface ExternalSignatureResolver {
private final JetType receiverType;
private final List<ValueParameterDescriptor> valueParameters;
private final List<TypeParameterDescriptor> typeParameters;
private final boolean hasStableParameterNames;
public AlternativeMethodSignature(
@Nullable JetType returnType,
@Nullable JetType receiverType,
@NotNull List<ValueParameterDescriptor> valueParameters,
@NotNull List<TypeParameterDescriptor> typeParameters,
@NotNull List<String> signatureErrors
@NotNull List<String> signatureErrors,
boolean hasStableParameterNames
) {
super(signatureErrors);
this.returnType = returnType;
this.receiverType = receiverType;
this.valueParameters = valueParameters;
this.typeParameters = typeParameters;
this.hasStableParameterNames = hasStableParameterNames;
}
@Nullable
@@ -79,6 +82,10 @@ public interface ExternalSignatureResolver {
public List<TypeParameterDescriptor> getTypeParameters() {
return typeParameters;
}
public boolean hasStableParameterNames() {
return hasStableParameterNames;
}
}
class AlternativeFieldSignature extends MemberSignature {
@@ -104,9 +111,10 @@ public interface ExternalSignatureResolver {
@NotNull List<ValueParameterDescriptor> valueParameters,
@NotNull List<TypeParameterDescriptor> typeParameters,
@NotNull List<String> signatureErrors,
boolean hasStableParameterNames,
@NotNull List<FunctionDescriptor> superMethods
) {
super(returnType, receiverType, valueParameters, typeParameters, signatureErrors);
super(returnType, receiverType, valueParameters, typeParameters, signatureErrors, hasStableParameterNames);
this.superMethods = superMethods;
}
@@ -133,7 +141,8 @@ public interface ExternalSignatureResolver {
@Nullable JetType returnType,
@Nullable JetType receiverType,
@NotNull List<ValueParameterDescriptor> valueParameters,
@NotNull List<TypeParameterDescriptor> typeParameters
@NotNull List<TypeParameterDescriptor> typeParameters,
boolean hasStableParameterNames
);
@NotNull