Support loading Java records

^KT-43677 In Progress
This commit is contained in:
Denis.Zharkov
2020-11-23 16:02:26 +03:00
parent f25b7672a7
commit 513f7177ca
45 changed files with 688 additions and 61 deletions
@@ -24,12 +24,12 @@ import org.jetbrains.kotlin.load.java.components.AbstractJavaResolverCache
import org.jetbrains.kotlin.load.java.structure.JavaClass
import org.jetbrains.kotlin.load.java.structure.JavaElement
import org.jetbrains.kotlin.load.java.structure.JavaField
import org.jetbrains.kotlin.load.java.structure.JavaMethod
import org.jetbrains.kotlin.load.java.structure.JavaMember
import org.jetbrains.kotlin.resolve.lazy.ResolveSession
class StubJavaResolverCache(resolveSession: ResolveSession) : AbstractJavaResolverCache(resolveSession) {
override fun recordMethod(method: JavaMethod, descriptor: SimpleFunctionDescriptor) {}
override fun recordMethod(member: JavaMember, descriptor: SimpleFunctionDescriptor) {}
override fun recordConstructor(element: JavaElement, descriptor: ConstructorDescriptor) {}
@@ -37,4 +37,4 @@ class StubJavaResolverCache(resolveSession: ResolveSession) : AbstractJavaResolv
override fun recordClass(javaClass: JavaClass, descriptor: ClassDescriptor) {}
}
}
@@ -157,9 +157,12 @@ class MockKotlinClassifier(override val classId: ClassId,
override val isInterface get() = shouldNotBeCalled()
override val isAnnotationType get() = shouldNotBeCalled()
override val isEnum get() = shouldNotBeCalled()
override val isRecord get() = shouldNotBeCalled()
override val methods get() = shouldNotBeCalled()
override val fields get() = shouldNotBeCalled()
override val constructors get() = shouldNotBeCalled()
override val recordComponents get() = shouldNotBeCalled()
override fun hasDefaultConstructor() = shouldNotBeCalled()
override val annotations get() = shouldNotBeCalled()
override val isDeprecatedInJavaDoc get() = shouldNotBeCalled()
@@ -65,6 +65,9 @@ class FakeSymbolBasedClass(
override val isEnum: Boolean get() = false
override val isRecord: Boolean get() = false
override val recordComponents: Collection<JavaRecordComponent> get() = emptyList()
override val lightClassOriginKind: LightClassOriginKind? get() = null
override val methods: Collection<JavaMethod> get() = emptyList()
@@ -133,6 +133,12 @@ class SymbolBasedClass(
.filter { it.kind == ElementKind.CONSTRUCTOR }
.map { SymbolBasedConstructor(it as ExecutableElement, this, javac) }
override val isRecord: Boolean
get() = false
override val recordComponents: Collection<JavaRecordComponent>
get() = emptyList()
override fun hasDefaultConstructor() = false // default constructors are explicit in symbols
override val innerClassNames: Collection<Name>
@@ -114,6 +114,10 @@ class TreeBasedClass(
override val isEnum: Boolean
get() = tree.modifiers.flags and Flags.ENUM.toLong() != 0L
// TODO: Support
override val isRecord: Boolean
get() = false
override val lightClassOriginKind: LightClassOriginKind?
get() = null
@@ -134,6 +138,9 @@ class TreeBasedClass(
TreeBasedConstructor(constructor as JCTree.JCMethodDecl, compilationUnit, this, javac)
}
override val recordComponents: Collection<JavaRecordComponent>
get() = emptyList()
override fun hasDefaultConstructor() = !isInterface && constructors.isEmpty()
override val innerClassNames: Collection<Name>