diff --git a/plugins/kotlin/compiler-plugins/noarg/common/src/org/jetbrains/kotlin/idea/compilerPlugin/noarg/NoArgUltraLightClassModifierExtension.kt b/plugins/kotlin/compiler-plugins/noarg/common/src/org/jetbrains/kotlin/idea/compilerPlugin/noarg/NoArgUltraLightClassModifierExtension.kt index 95050ed9c212..1e1e7b358922 100644 --- a/plugins/kotlin/compiler-plugins/noarg/common/src/org/jetbrains/kotlin/idea/compilerPlugin/noarg/NoArgUltraLightClassModifierExtension.kt +++ b/plugins/kotlin/compiler-plugins/noarg/common/src/org/jetbrains/kotlin/idea/compilerPlugin/noarg/NoArgUltraLightClassModifierExtension.kt @@ -3,18 +3,19 @@ package org.jetbrains.kotlin.idea.compilerPlugin.noarg import com.intellij.openapi.project.Project -import org.jetbrains.kotlin.idea.compilerPlugin.CachedAnnotationNames -import org.jetbrains.kotlin.idea.compilerPlugin.getAnnotationNames import org.jetbrains.kotlin.asJava.UltraLightClassModifierExtension import org.jetbrains.kotlin.asJava.classes.KtUltraLightClass import org.jetbrains.kotlin.asJava.classes.createGeneratedMethodFromDescriptor import org.jetbrains.kotlin.asJava.elements.KtLightMethod -import org.jetbrains.kotlin.descriptors.ClassDescriptor -import org.jetbrains.kotlin.descriptors.DeclarationDescriptor +import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.descriptors.annotations.Annotations +import org.jetbrains.kotlin.descriptors.impl.ClassConstructorDescriptorImpl import org.jetbrains.kotlin.extensions.AnnotationBasedExtension -import org.jetbrains.kotlin.noarg.AbstractNoArgExpressionCodegenExtension -import org.jetbrains.kotlin.noarg.AbstractNoArgExpressionCodegenExtension.Companion.isZeroParameterConstructor +import org.jetbrains.kotlin.idea.compilerPlugin.CachedAnnotationNames +import org.jetbrains.kotlin.idea.compilerPlugin.getAnnotationNames import org.jetbrains.kotlin.psi.* +import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns +import org.jetbrains.kotlin.resolve.jvm.annotations.findJvmOverloadsAnnotation import org.jetbrains.kotlin.util.isAnnotated import org.jetbrains.kotlin.util.isOrdinaryClass @@ -63,8 +64,28 @@ class NoArgUltraLightClassModifierExtension(project: Project) : if (classDescriptor.constructors.any { isZeroParameterConstructor(it) }) return - val constructorDescriptor = AbstractNoArgExpressionCodegenExtension.createNoArgConstructorDescriptor(classDescriptor) + val constructorDescriptor = createNoArgConstructorDescriptor(classDescriptor) methodsList.add(parentClass.createGeneratedMethodFromDescriptor(constructorDescriptor)) } -} \ No newline at end of file + + private fun isZeroParameterConstructor(constructor: ClassConstructorDescriptor): Boolean { + val parameters = constructor.valueParameters + return parameters.isEmpty() || + (parameters.all { it.declaresDefaultValue() } && (constructor.isPrimary || constructor.findJvmOverloadsAnnotation() != null)) + } + + private fun createNoArgConstructorDescriptor(containingClass: ClassDescriptor): ConstructorDescriptor = + ClassConstructorDescriptorImpl.createSynthesized(containingClass, Annotations.EMPTY, false, SourceElement.NO_SOURCE).apply { + initialize( + null, + calculateDispatchReceiverParameter(), + emptyList(), + emptyList(), + emptyList(), + containingClass.builtIns.unitType, + Modality.OPEN, + DescriptorVisibilities.PUBLIC + ) + } +}