Extension/non-Extension members are deserialized in correct order
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
//ALLOW_AST_ACCESS
|
||||
package test
|
||||
|
||||
class A {
|
||||
fun String.f1() {
|
||||
}
|
||||
|
||||
fun f1() {
|
||||
}
|
||||
|
||||
fun Int.f1() {
|
||||
}
|
||||
|
||||
val Int.c: Int
|
||||
get() = 1
|
||||
|
||||
val c: Int = 2
|
||||
|
||||
val d: Int = 2
|
||||
|
||||
val Int.d: Int
|
||||
get() = 1
|
||||
|
||||
fun String.f2() {
|
||||
}
|
||||
|
||||
fun f2() {
|
||||
}
|
||||
|
||||
fun Int.f2() {
|
||||
}
|
||||
|
||||
fun String.f3() {
|
||||
}
|
||||
|
||||
fun f3() {
|
||||
}
|
||||
|
||||
fun Int.f3() {
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package test
|
||||
|
||||
internal final class A {
|
||||
/*primary*/ public constructor A()
|
||||
internal final val c: kotlin.Int = 2
|
||||
internal final fun <get-c>(): kotlin.Int
|
||||
internal final val d: kotlin.Int = 2
|
||||
internal final fun <get-d>(): kotlin.Int
|
||||
internal final val kotlin.Int.c: kotlin.Int
|
||||
internal final fun kotlin.Int.<get-c>(): kotlin.Int
|
||||
internal final val kotlin.Int.d: kotlin.Int
|
||||
internal final fun kotlin.Int.<get-d>(): kotlin.Int
|
||||
internal final fun f1(): kotlin.Unit
|
||||
internal final fun f2(): kotlin.Unit
|
||||
internal final fun f3(): kotlin.Unit
|
||||
internal final fun kotlin.Int.f1(): kotlin.Unit
|
||||
internal final fun kotlin.String.f1(): kotlin.Unit
|
||||
internal final fun kotlin.Int.f2(): kotlin.Unit
|
||||
internal final fun kotlin.String.f2(): kotlin.Unit
|
||||
internal final fun kotlin.Int.f3(): kotlin.Unit
|
||||
internal final fun kotlin.String.f3(): kotlin.Unit
|
||||
}
|
||||
@@ -4145,6 +4145,12 @@ public class LoadJavaTestGenerated extends AbstractLoadJavaTest {
|
||||
doTestCompiledKotlin(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("extensionMembers.kt")
|
||||
public void testExtensionMembers() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/memberOrder/extensionMembers.kt");
|
||||
doTestCompiledKotlin(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("innerClasses.kt")
|
||||
public void testInnerClasses() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/memberOrder/innerClasses.kt");
|
||||
|
||||
+6
@@ -2377,6 +2377,12 @@ public class LazyResolveRecursiveComparingTestGenerated extends AbstractLazyReso
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("extensionMembers.kt")
|
||||
public void testExtensionMembers() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/memberOrder/extensionMembers.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("innerClasses.kt")
|
||||
public void testInnerClasses() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/memberOrder/innerClasses.kt");
|
||||
|
||||
+35
-7
@@ -110,13 +110,7 @@ public abstract class DeserializedMemberScope protected(
|
||||
addEnumEntryDescriptors(result, nameFilter)
|
||||
}
|
||||
|
||||
val names = membersProtos().keySet().filter(nameFilter)
|
||||
if (kindFilter.acceptsKinds(DescriptorKindFilter.VARIABLES_MASK)) {
|
||||
names.forEach { result.addAll(getProperties(it)) }
|
||||
}
|
||||
if (kindFilter.acceptsKinds(DescriptorKindFilter.FUNCTIONS_MASK)) {
|
||||
names.forEach { result.addAll(getFunctions(it)) }
|
||||
}
|
||||
addFunctionsAndProperties(result, kindFilter, nameFilter)
|
||||
|
||||
addNonDeclaredDescriptors(result)
|
||||
|
||||
@@ -127,6 +121,40 @@ public abstract class DeserializedMemberScope protected(
|
||||
return result.toReadOnlyList()
|
||||
}
|
||||
|
||||
private fun addFunctionsAndProperties(
|
||||
result: LinkedHashSet<DeclarationDescriptor>,
|
||||
kindFilter: DescriptorKindFilter,
|
||||
nameFilter: (Name) -> Boolean
|
||||
) {
|
||||
val names = membersProtos().keySet().filter(nameFilter)
|
||||
if (kindFilter.acceptsKinds(DescriptorKindFilter.VARIABLES_MASK)) {
|
||||
addMembers(names, result) { getProperties(it) }
|
||||
}
|
||||
if (kindFilter.acceptsKinds(DescriptorKindFilter.FUNCTIONS_MASK)) {
|
||||
addMembers(names, result) { getFunctions(it) }
|
||||
}
|
||||
}
|
||||
|
||||
private fun addMembers(
|
||||
names: List<Name>,
|
||||
result: MutableCollection<DeclarationDescriptor>,
|
||||
getMembers: (Name) -> Collection<CallableDescriptor>) {
|
||||
val extensions = ArrayList<DeclarationDescriptor>()
|
||||
val nonExtensions = ArrayList<DeclarationDescriptor>()
|
||||
names.forEach { name ->
|
||||
getMembers(name).forEach { member ->
|
||||
if (member.getExtensionReceiverParameter() == null) {
|
||||
nonExtensions.add(member)
|
||||
}
|
||||
else {
|
||||
extensions.add(member)
|
||||
}
|
||||
}
|
||||
}
|
||||
result.addAll(nonExtensions)
|
||||
result.addAll(extensions)
|
||||
}
|
||||
|
||||
protected abstract fun addNonDeclaredDescriptors(result: MutableCollection<DeclarationDescriptor>)
|
||||
|
||||
protected abstract fun addEnumEntryDescriptors(result: MutableCollection<DeclarationDescriptor>, nameFilter: (Name) -> Boolean)
|
||||
|
||||
@@ -2374,6 +2374,12 @@ public class LazyResolveByStubTestGenerated extends AbstractLazyResolveByStubTes
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("extensionMembers.kt")
|
||||
public void testExtensionMembers() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/memberOrder/extensionMembers.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("innerClasses.kt")
|
||||
public void testInnerClasses() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/memberOrder/innerClasses.kt");
|
||||
|
||||
Reference in New Issue
Block a user