diff --git a/compiler/frontend/src/org/jetbrains/kotlin/psi/JetClass.kt b/compiler/frontend/src/org/jetbrains/kotlin/psi/JetClass.kt index cab34c13550..192cf9ba0ca 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/psi/JetClass.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/psi/JetClass.kt @@ -17,8 +17,6 @@ package org.jetbrains.kotlin.psi import com.intellij.lang.ASTNode -import com.intellij.navigation.ItemPresentation -import com.intellij.navigation.ItemPresentationProviders import com.intellij.openapi.util.text.StringUtil import com.intellij.psi.PsiElement import com.intellij.psi.tree.TokenSet @@ -26,8 +24,7 @@ import com.intellij.psi.util.PsiTreeUtil import org.jetbrains.kotlin.lexer.JetTokens import org.jetbrains.kotlin.psi.stubs.KotlinClassStub import org.jetbrains.kotlin.psi.stubs.elements.JetStubElementTypes -import java.util.ArrayList -import java.util.Collections +import java.util.* public open class JetClass : JetClassOrObject { public constructor(node: ASTNode) : super(node) @@ -39,22 +36,6 @@ public open class JetClass : JetClassOrObject { return visitor.visitClass(this, data) } - public fun createPrimaryConstructorIfAbsent(): JetPrimaryConstructor { - val constructor = getPrimaryConstructor() - if (constructor != null) return constructor - var anchor: PsiElement? = getTypeParameterList() - if (anchor == null) anchor = getNameIdentifier() - if (anchor == null) anchor = getLastChild() - return addAfter(JetPsiFactory(getProject()).createPrimaryConstructor(), anchor) as JetPrimaryConstructor - } - - public fun createPrimaryConstructorParameterListIfAbsent(): JetParameterList { - val constructor = createPrimaryConstructorIfAbsent() - val parameterList = constructor.getValueParameterList() - if (parameterList != null) return parameterList - return constructor.add(JetPsiFactory(getProject()).createParameterList("()")) as JetParameterList - } - public fun getColon(): PsiElement? = findChildByType(JetTokens.COLON) public fun getProperties(): List = getBody()?.getProperties().orEmpty() diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/SuperClassNotInitialized.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/SuperClassNotInitialized.kt index c5bcf14b46f..11066d1ba97 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/SuperClassNotInitialized.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/SuperClassNotInitialized.kt @@ -31,18 +31,18 @@ import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor import org.jetbrains.kotlin.idea.core.isVisible +import org.jetbrains.kotlin.idea.core.refactoring.createPrimaryConstructorParameterListIfAbsent +import org.jetbrains.kotlin.idea.core.replaced import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers import org.jetbrains.kotlin.idea.util.ShortenReferences import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.endOffset -import org.jetbrains.kotlin.idea.core.replaced import org.jetbrains.kotlin.renderer.DescriptorRenderer import org.jetbrains.kotlin.resolve.BindingContext -import org.jetbrains.kotlin.types.JetType import org.jetbrains.kotlin.types.IndexedParametersSubstitution -import org.jetbrains.kotlin.types.TypeUtils +import org.jetbrains.kotlin.types.JetType import org.jetbrains.kotlin.types.typeUtil.isSubtypeOf -import java.util.ArrayList +import java.util.* public object SuperClassNotInitialized : JetIntentionActionsFactory() { private val DISPLAY_MAX_PARAMS = 5 diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/usages/JetCallableDefinitionUsage.java b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/usages/JetCallableDefinitionUsage.java index 4b53b04f4d5..a1a7274745d 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/usages/JetCallableDefinitionUsage.java +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/usages/JetCallableDefinitionUsage.java @@ -55,6 +55,7 @@ import org.jetbrains.kotlin.types.substitutions.SubstitutionUtilsKt; import java.util.List; +import static org.jetbrains.kotlin.idea.core.refactoring.JetRefactoringUtilKt.createPrimaryConstructorIfAbsent; import static org.jetbrains.kotlin.psi.PsiPackage.JetPsiFactory; public class JetCallableDefinitionUsage extends JetUsageInfo { @@ -295,7 +296,7 @@ public class JetCallableDefinitionUsage extends JetUsageIn } else { if (element instanceof JetClass) { - JetPrimaryConstructor constructor = ((JetClass) element).createPrimaryConstructorIfAbsent(); + JetPrimaryConstructor constructor = createPrimaryConstructorIfAbsent((JetClass) element); JetParameterList oldParameterList = constructor.getValueParameterList(); assert oldParameterList != null : "primary constructor from factory has parameter list"; newParameterList = (JetParameterList) oldParameterList.replace(newParameterList); @@ -351,7 +352,7 @@ public class JetCallableDefinitionUsage extends JetUsageIn PsiModificationUtilsKt.setVisibility((JetCallableDeclaration)element, newVisibilityToken); } else if (element instanceof JetClass) { - PsiModificationUtilsKt.setVisibility(((JetClass) element).createPrimaryConstructorIfAbsent(), newVisibilityToken); + PsiModificationUtilsKt.setVisibility(createPrimaryConstructorIfAbsent((JetClass) element), newVisibilityToken); } else throw new AssertionError("Invalid element: " + PsiUtilPackage.getElementTextWithContext(element)); } diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/usages/KotlinCallerUsages.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/usages/KotlinCallerUsages.kt index 34da97664ff..885d03fe841 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/usages/KotlinCallerUsages.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/usages/KotlinCallerUsages.kt @@ -18,12 +18,12 @@ package org.jetbrains.kotlin.idea.refactoring.changeSignature.usages import com.intellij.usageView.UsageInfo import org.jetbrains.kotlin.idea.codeInsight.shorten.addToShorteningWaitSet +import org.jetbrains.kotlin.idea.core.refactoring.createPrimaryConstructorParameterListIfAbsent import org.jetbrains.kotlin.idea.refactoring.changeSignature.JetChangeInfo import org.jetbrains.kotlin.idea.refactoring.changeSignature.getAffectedCallables import org.jetbrains.kotlin.idea.refactoring.changeSignature.isInsideOfCallerBody import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.* -import org.jetbrains.kotlin.psi.psiUtil.getValueParameterList public class KotlinCallerUsage(element: JetNamedDeclaration): JetUsageInfo(element) { override fun processUsage(changeInfo: JetChangeInfo, element: JetNamedDeclaration, allUsages: Array): Boolean { @@ -74,4 +74,4 @@ public class KotlinCallerCallUsage(element: JetCallElement): JetUsageInfo Unit) { public fun String.quoteIfNeeded(): String = if (KotlinNameSuggester.isIdentifier(this)) this else "`$this`" -public fun FqNameBase.hasIdentifiersOnly(): Boolean = pathSegments().all { KotlinNameSuggester.isIdentifier(it.asString()) } \ No newline at end of file +public fun FqNameBase.hasIdentifiersOnly(): Boolean = pathSegments().all { KotlinNameSuggester.isIdentifier(it.asString()) } + +public fun JetClass.createPrimaryConstructorIfAbsent(): JetPrimaryConstructor { + val constructor = getPrimaryConstructor() + if (constructor != null) return constructor + var anchor: PsiElement? = typeParameterList + if (anchor == null) anchor = nameIdentifier + if (anchor == null) anchor = lastChild + return addAfter(JetPsiFactory(project).createPrimaryConstructor(), anchor) as JetPrimaryConstructor +} + +public fun JetClass.createPrimaryConstructorParameterListIfAbsent(): JetParameterList { + val constructor = createPrimaryConstructorIfAbsent() + val parameterList = constructor.valueParameterList + if (parameterList != null) return parameterList + return constructor.add(JetPsiFactory(project).createParameterList("()")) as JetParameterList +} diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/pullUp/KotlinPullUpHelper.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/pullUp/KotlinPullUpHelper.kt index c0ea5be44c5..98f04131bd4 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/pullUp/KotlinPullUpHelper.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/pullUp/KotlinPullUpHelper.kt @@ -36,6 +36,7 @@ import org.jetbrains.kotlin.idea.JetLanguage import org.jetbrains.kotlin.idea.codeInsight.shorten.addToShorteningWaitSet import org.jetbrains.kotlin.idea.core.refactoring.createJavaField import org.jetbrains.kotlin.idea.core.refactoring.createJavaMethod +import org.jetbrains.kotlin.idea.core.refactoring.createPrimaryConstructorIfAbsent import org.jetbrains.kotlin.idea.intentions.setType import org.jetbrains.kotlin.idea.refactoring.safeDelete.removeOverrideModifier import org.jetbrains.kotlin.idea.util.anonymousObjectSuperTypeOrNull