@@ -8,11 +8,8 @@ package org.jetbrains.kotlin.light.classes.symbol.methods
8
8
import com.intellij.openapi.progress.ProgressManager
9
9
import com.intellij.psi.*
10
10
import org.jetbrains.kotlin.analysis.api.KaSession
11
- import org.jetbrains.kotlin.analysis.api.symbols.KaClassKind
12
- import org.jetbrains.kotlin.analysis.api.symbols.KaConstructorSymbol
13
- import org.jetbrains.kotlin.analysis.api.symbols.KaSymbolVisibility
11
+ import org.jetbrains.kotlin.analysis.api.symbols.*
14
12
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KaSymbolPointer
15
- import org.jetbrains.kotlin.analysis.api.symbols.sourcePsiSafe
16
13
import org.jetbrains.kotlin.asJava.builder.LightMemberOriginForDeclaration
17
14
import org.jetbrains.kotlin.asJava.classes.METHOD_INDEX_BASE
18
15
import org.jetbrains.kotlin.asJava.classes.METHOD_INDEX_FOR_DEFAULT_CTOR
@@ -169,15 +166,21 @@ internal class SymbolLightConstructor private constructor(
169
166
constructors : Iterable <KaConstructorSymbol >,
170
167
): Boolean {
171
168
val classOrObject = lightClass.kotlinOrigin ? : return false
172
- return primaryConstructor.visibility != KaSymbolVisibility .PRIVATE &&
173
- ! classOrObject.hasModifier(INNER_KEYWORD ) && ! lightClass.isEnum &&
169
+ return ! classOrObject.hasModifier(INNER_KEYWORD ) &&
174
170
! classOrObject.hasModifier(SEALED_KEYWORD ) &&
175
- primaryConstructor.valueParameters.isNotEmpty() &&
176
- primaryConstructor.valueParameters.all { it. hasDefaultValue } &&
177
- constructors.none { it.valueParameters.isEmpty() } &&
178
- ! primaryConstructor.hasJvmOverloadsAnnotation()
171
+ ! lightClass.isEnum &&
172
+ primaryConstructor.valueParameters.all( KaValueParameterSymbol :: hasDefaultValue) &&
173
+ constructors.none { it.isEffectivelyParameterless } &&
174
+ primaryConstructor.visibility != KaSymbolVisibility . PRIVATE
179
175
}
180
176
177
+ /* *
178
+ * Whether the constructor either has no arguments or has [JvmOverloads] which would result in a method with no arguments.
179
+ * */
180
+ private val KaConstructorSymbol .isEffectivelyParameterless: Boolean
181
+ get() = valueParameters.isEmpty() ||
182
+ valueParameters.all(KaValueParameterSymbol ::hasDefaultValue) && hasJvmOverloadsAnnotation()
183
+
181
184
private fun SymbolLightClassBase.defaultConstructor (): KtLightMethod {
182
185
val classOrObject = kotlinOrigin
183
186
val visibility = when {
0 commit comments