[ULC] Fix NPE on generating data class ctor parameters
This commit is contained in:
@@ -33,6 +33,7 @@ import org.jetbrains.kotlin.load.java.JvmAbi
|
|||||||
import org.jetbrains.kotlin.load.kotlin.TypeMappingMode
|
import org.jetbrains.kotlin.load.kotlin.TypeMappingMode
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
import org.jetbrains.kotlin.resolve.DelegationResolver
|
import org.jetbrains.kotlin.resolve.DelegationResolver
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
||||||
import org.jetbrains.kotlin.resolve.annotations.JVM_STATIC_ANNOTATION_FQ_NAME
|
import org.jetbrains.kotlin.resolve.annotations.JVM_STATIC_ANNOTATION_FQ_NAME
|
||||||
@@ -334,12 +335,19 @@ open class KtUltraLightClass(classOrObject: KtClassOrObject, internal val suppor
|
|||||||
|
|
||||||
private fun addMethodsFromDataClass(result: MutableList<KtLightMethod>) {
|
private fun addMethodsFromDataClass(result: MutableList<KtLightMethod>) {
|
||||||
if (!classOrObject.hasModifier(DATA_KEYWORD)) return
|
if (!classOrObject.hasModifier(DATA_KEYWORD)) return
|
||||||
|
val ktClass = classOrObject as? KtClass ?: return
|
||||||
val descriptor = classOrObject.resolve() as? ClassDescriptor ?: return
|
val descriptor = classOrObject.resolve() as? ClassDescriptor ?: return
|
||||||
val bindingContext = classOrObject.analyze()
|
val bindingContext = classOrObject.analyze()
|
||||||
|
|
||||||
// Force resolving data class members set
|
// Force resolving data class members set
|
||||||
descriptor.unsubstitutedMemberScope.getContributedDescriptors()
|
descriptor.unsubstitutedMemberScope.getContributedDescriptors()
|
||||||
|
|
||||||
|
val areCtorParametersAreAnalyzed = ktClass.primaryConstructorParameters
|
||||||
|
.filter { it.hasValOrVar() }
|
||||||
|
.all { bindingContext.get(BindingContext.PRIMARY_CONSTRUCTOR_PARAMETER, it) != null }
|
||||||
|
|
||||||
|
if (!areCtorParametersAreAnalyzed) return
|
||||||
|
|
||||||
object : DataClassMethodGenerator(classOrObject, bindingContext) {
|
object : DataClassMethodGenerator(classOrObject, bindingContext) {
|
||||||
private fun addFunction(descriptor: FunctionDescriptor, declarationForOrigin: KtDeclaration? = null) {
|
private fun addFunction(descriptor: FunctionDescriptor, declarationForOrigin: KtDeclaration? = null) {
|
||||||
result.add(createGeneratedMethodFromDescriptor(descriptor, JvmDeclarationOriginKind.OTHER, declarationForOrigin))
|
result.add(createGeneratedMethodFromDescriptor(descriptor, JvmDeclarationOriginKind.OTHER, declarationForOrigin))
|
||||||
|
|||||||
Reference in New Issue
Block a user