diff --git a/compiler/frontend/src/org/jetbrains/kotlin/psi/JetDeclarationImpl.java b/compiler/frontend/src/org/jetbrains/kotlin/psi/JetDeclarationImpl.java index 4f955dad35b..20886ba1d4c 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/psi/JetDeclarationImpl.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/psi/JetDeclarationImpl.java @@ -22,7 +22,6 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.JetNodeTypes; import org.jetbrains.kotlin.kdoc.psi.api.KDoc; import org.jetbrains.kotlin.lexer.JetModifierKeywordToken; -import org.jetbrains.kotlin.lexer.JetTokens; import org.jetbrains.kotlin.psi.addRemoveModifier.AddRemoveModifierPackage; import org.jetbrains.kotlin.psi.findDocComment.FindDocCommentPackage; @@ -48,7 +47,7 @@ abstract class JetDeclarationImpl extends JetExpressionImpl implements JetDeclar @Override public void addModifier(@NotNull JetModifierKeywordToken modifier) { - AddRemoveModifierPackage.addModifier(this, modifier, JetTokens.DEFAULT_VISIBILITY_KEYWORD); + AddRemoveModifierPackage.addModifier(this, modifier); } @Override diff --git a/compiler/frontend/src/org/jetbrains/kotlin/psi/JetModifierListOwnerStub.java b/compiler/frontend/src/org/jetbrains/kotlin/psi/JetModifierListOwnerStub.java index 52d9ffdfd61..025864cbb93 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/psi/JetModifierListOwnerStub.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/psi/JetModifierListOwnerStub.java @@ -22,7 +22,6 @@ import com.intellij.psi.stubs.StubElement; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.lexer.JetModifierKeywordToken; -import org.jetbrains.kotlin.lexer.JetTokens; import org.jetbrains.kotlin.psi.addRemoveModifier.AddRemoveModifierPackage; import org.jetbrains.kotlin.psi.stubs.elements.JetStubElementTypes; @@ -52,7 +51,7 @@ public class JetModifierListOwnerStub> extends JetEleme @Override public void addModifier(@NotNull JetModifierKeywordToken modifier) { - AddRemoveModifierPackage.addModifier(this, modifier, JetTokens.DEFAULT_VISIBILITY_KEYWORD); + AddRemoveModifierPackage.addModifier(this, modifier); } @Override diff --git a/compiler/frontend/src/org/jetbrains/kotlin/psi/JetPrimaryConstructor.kt b/compiler/frontend/src/org/jetbrains/kotlin/psi/JetPrimaryConstructor.kt index 5fbd552b980..f661e938692 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/psi/JetPrimaryConstructor.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/psi/JetPrimaryConstructor.kt @@ -39,7 +39,7 @@ public class JetPrimaryConstructor : JetConstructor { override fun addModifier(modifier: JetModifierKeywordToken) { val modifierList = modifierList if (modifierList != null) { - addModifier(modifierList, modifier, JetTokens.PUBLIC_KEYWORD) + addModifier(modifierList, modifier) if (this.modifierList == null) { getConstructorKeyword()?.delete() } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/psi/addRemoveModifier.kt b/compiler/frontend/src/org/jetbrains/kotlin/psi/addRemoveModifier.kt index a00966518ec..85d858efa60 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/psi/addRemoveModifier.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/psi/addRemoveModifier.kt @@ -33,14 +33,13 @@ private fun createModifierList(text: String, owner: JetModifierListOwner): JetMo return owner.addBefore(newModifierList, anchor) as JetModifierList } -internal fun addModifier(owner: JetModifierListOwner, modifier: JetModifierKeywordToken, defaultVisibilityModifier: JetModifierKeywordToken) { +internal fun addModifier(owner: JetModifierListOwner, modifier: JetModifierKeywordToken) { val modifierList = owner.modifierList if (modifierList == null) { - if (modifier == defaultVisibilityModifier) return createModifierList(modifier.value, owner) } else { - addModifier(modifierList, modifier, defaultVisibilityModifier) + addModifier(modifierList, modifier) } } @@ -54,7 +53,7 @@ internal fun addAnnotationEntry(owner: JetModifierListOwner, annotationEntry: Je } } -internal fun addModifier(modifierList: JetModifierList, modifier: JetModifierKeywordToken, defaultVisibilityModifier: JetModifierKeywordToken) { +internal fun addModifier(modifierList: JetModifierList, modifier: JetModifierKeywordToken) { if (modifierList.hasModifier(modifier)) return val newModifier = JetPsiFactory(modifierList).createModifier(modifier) @@ -63,15 +62,6 @@ internal fun addModifier(modifierList: JetModifierList, modifier: JetModifierKey ?.filterNotNull() ?.firstOrNull() - if (modifier == defaultVisibilityModifier) { // do not insert explicit 'internal' keyword (or 'public' for primary constructor) - //TODO: code style option - modifierToReplace?.delete() - if (modifierList.firstChild == null) { - modifierList.delete() - } - return - } - if (modifierToReplace != null) { modifierToReplace.replace(newModifier) } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/psi/psiUtil/jetPsiUtil.kt b/compiler/frontend/src/org/jetbrains/kotlin/psi/psiUtil/jetPsiUtil.kt index 4b562da5946..1d124b54e17 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/psi/psiUtil/jetPsiUtil.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/psi/psiUtil/jetPsiUtil.kt @@ -25,6 +25,7 @@ import com.intellij.psi.PsiWhiteSpace import com.intellij.psi.stubs.StubElement import com.intellij.psi.util.PsiTreeUtil import org.jetbrains.kotlin.JetNodeTypes +import org.jetbrains.kotlin.lexer.JetModifierKeywordToken import org.jetbrains.kotlin.lexer.JetTokens import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.* @@ -394,3 +395,10 @@ public fun JetFunctionLiteralArgument.getFunctionLiteralArgumentName(bindingCont public fun JetExpression.asAssignment(): JetBinaryExpression? = if (JetPsiUtil.isAssignment(this)) this as JetBinaryExpression else null +public fun JetDeclaration.visibilityModifier(): PsiElement? { + val modifierList = modifierList ?: return null + return JetTokens.VISIBILITY_MODIFIERS.types + .asSequence() + .map { modifierList.getModifier(it as JetModifierKeywordToken) } + .firstOrNull { it != null } +} diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/OverridingUtil.java b/core/descriptors/src/org/jetbrains/kotlin/resolve/OverridingUtil.java index efad5bc65f4..80364c65cdf 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/OverridingUtil.java +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/OverridingUtil.java @@ -465,7 +465,7 @@ public class OverridingUtil { } @Nullable - private static Visibility findMaxVisibility(@NotNull Collection descriptors) { + public static Visibility findMaxVisibility(@NotNull Collection descriptors) { if (descriptors.isEmpty()) { return Visibilities.DEFAULT_VISIBILITY; } diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/psiModificationUtils.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/psiModificationUtils.kt index 598b83a78b5..c8785ee49ee 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/psiModificationUtils.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/psiModificationUtils.kt @@ -20,13 +20,19 @@ import com.intellij.psi.PsiElement import com.intellij.psi.PsiWhiteSpace import com.intellij.psi.impl.source.codeStyle.CodeEditUtil import com.intellij.psi.util.PsiTreeUtil +import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor +import org.jetbrains.kotlin.descriptors.Visibilities +import org.jetbrains.kotlin.descriptors.Visibility +import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor +import org.jetbrains.kotlin.lexer.JetModifierKeywordToken +import org.jetbrains.kotlin.lexer.JetTokens import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getFunctionLiteralArgumentName +import org.jetbrains.kotlin.psi.psiUtil.visibilityModifier import org.jetbrains.kotlin.resolve.BindingContext -import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall +import org.jetbrains.kotlin.resolve.OverridingUtil import org.jetbrains.kotlin.resolve.calls.callUtil.getValueArgumentsInParentheses -import org.jetbrains.kotlin.resolve.calls.model.ArgumentMatch @Suppress("UNCHECKED_CAST") public inline fun PsiElement.replaced(newElement: T): T { @@ -153,4 +159,34 @@ public fun PsiElement.deleteSingle() { public fun JetClass.getOrCreateCompanionObject() : JetObjectDeclaration { getCompanionObjects().firstOrNull()?.let { return it } return addDeclaration(JetPsiFactory(this).createCompanionObject()) as JetObjectDeclaration +} + +//TODO: code style option whether to insert redundant 'public' keyword or not +public fun JetDeclaration.setVisibility(visibilityModifier: JetModifierKeywordToken) { + val defaultVisibilityKeyword = if (hasModifier(JetTokens.OVERRIDE_KEYWORD)) { + (resolveToDescriptor() as? CallableMemberDescriptor) + ?.overriddenDescriptors + ?.let { OverridingUtil.findMaxVisibility(it) } + ?.toKeyword() + } + else { + JetTokens.DEFAULT_VISIBILITY_KEYWORD + } + + if (visibilityModifier == defaultVisibilityKeyword) { + this.visibilityModifier()?.let { removeModifier(it.node.elementType as JetModifierKeywordToken) } + return + } + + addModifier(visibilityModifier) +} + +private fun Visibility.toKeyword(): JetModifierKeywordToken? { + return when (this) { + Visibilities.PUBLIC -> JetTokens.PUBLIC_KEYWORD + Visibilities.PROTECTED -> JetTokens.PROTECTED_KEYWORD + Visibilities.INTERNAL -> JetTokens.INTERNAL_KEYWORD + Visibilities.PRIVATE -> JetTokens.PRIVATE_KEYWORD + else -> null + } } \ No newline at end of file diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/ChangeVisibilityModifierIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/ChangeVisibilityModifierIntention.kt index d19cfbf8865..0bc72e6b427 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/ChangeVisibilityModifierIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/ChangeVisibilityModifierIntention.kt @@ -19,14 +19,15 @@ package org.jetbrains.kotlin.idea.intentions import com.intellij.codeInsight.intention.HighPriorityAction import com.intellij.openapi.editor.Editor import com.intellij.openapi.util.TextRange -import com.intellij.psi.PsiElement import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor +import org.jetbrains.kotlin.idea.core.setVisibility import org.jetbrains.kotlin.lexer.JetModifierKeywordToken import org.jetbrains.kotlin.lexer.JetTokens import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.startOffset +import org.jetbrains.kotlin.psi.psiUtil.visibilityModifier import org.jetbrains.kotlin.resolve.BindingContext public open class ChangeVisibilityModifierIntention protected constructor( @@ -83,21 +84,7 @@ public open class ChangeVisibilityModifierIntention protected constructor( } override fun applyTo(element: JetDeclaration, editor: Editor) { - val modifierToChange = element.visibilityModifier() - if (modifierToChange != null) { - modifierToChange.replace(JetPsiFactory(element).createModifier(modifier)) - } - else { - element.addModifier(modifier) - } - } - - private fun JetDeclaration.visibilityModifier(): PsiElement? { - val modifierList = getModifierList() ?: return null - return JetTokens.VISIBILITY_MODIFIERS.getTypes() - .asSequence() - .map { modifierList.getModifier(it as JetModifierKeywordToken) } - .firstOrNull { it != null } ?: return null + element.setVisibility(modifier) } private fun JetModifierKeywordToken.toVisibility(): Visibility { diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeVisibilityModifierFix.java b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeVisibilityModifierFix.java index 36e32858d7d..53b7f82acce 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeVisibilityModifierFix.java +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeVisibilityModifierFix.java @@ -30,15 +30,16 @@ import org.jetbrains.kotlin.descriptors.Visibility; import org.jetbrains.kotlin.diagnostics.Diagnostic; import org.jetbrains.kotlin.idea.JetBundle; import org.jetbrains.kotlin.idea.caches.resolve.ResolutionUtils; +import org.jetbrains.kotlin.idea.core.PsiModificationUtilsKt; import org.jetbrains.kotlin.idea.refactoring.JetRefactoringUtil; import org.jetbrains.kotlin.lexer.JetModifierKeywordToken; +import org.jetbrains.kotlin.psi.JetDeclaration; import org.jetbrains.kotlin.psi.JetFile; -import org.jetbrains.kotlin.psi.JetModifierListOwner; import org.jetbrains.kotlin.psi.JetParameter; import org.jetbrains.kotlin.resolve.BindingContext; -public class ChangeVisibilityModifierFix extends JetIntentionAction { - public ChangeVisibilityModifierFix(@NotNull JetModifierListOwner element) { +public class ChangeVisibilityModifierFix extends JetIntentionAction { + public ChangeVisibilityModifierFix(@NotNull JetDeclaration element) { super(element); } @@ -64,7 +65,7 @@ public class ChangeVisibilityModifierFix extends JetIntentionAction createAction(Diagnostic diagnostic) { + public JetIntentionAction createAction(Diagnostic diagnostic) { PsiElement element = diagnostic.getPsiElement(); - if (!(element instanceof JetModifierListOwner)) return null; - return new ChangeVisibilityModifierFix((JetModifierListOwner)element); + if (!(element instanceof JetDeclaration)) return null; + return new ChangeVisibilityModifierFix((JetDeclaration)element); } }; } 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 323db7564ef..426d1d02fd0 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 @@ -33,6 +33,7 @@ import org.jetbrains.kotlin.descriptors.impl.AnonymousFunctionDescriptor; import org.jetbrains.kotlin.idea.caches.resolve.JavaResolutionUtils; import org.jetbrains.kotlin.idea.caches.resolve.ResolutionUtils; import org.jetbrains.kotlin.idea.codeInsight.shorten.ShortenPackage; +import org.jetbrains.kotlin.idea.core.PsiModificationUtilsKt; import org.jetbrains.kotlin.idea.refactoring.JetRefactoringUtil; import org.jetbrains.kotlin.idea.refactoring.changeSignature.ChangeSignaturePackage; import org.jetbrains.kotlin.idea.refactoring.changeSignature.JetChangeInfo; @@ -346,10 +347,10 @@ public class JetCallableDefinitionUsage extends JetUsageIn JetModifierKeywordToken newVisibilityToken = JetRefactoringUtil.getVisibilityToken(changeInfo.getNewVisibility()); if (element instanceof JetCallableDeclaration) { - ((JetCallableDeclaration)element).addModifier(newVisibilityToken); + PsiModificationUtilsKt.setVisibility((JetCallableDeclaration)element, newVisibilityToken); } else if (element instanceof JetClass) { - ((JetClass) element).createPrimaryConstructorIfAbsent().addModifier(newVisibilityToken); + PsiModificationUtilsKt.setVisibility(((JetClass) element).createPrimaryConstructorIfAbsent(), newVisibilityToken); } else throw new AssertionError("Invalid element: " + PsiUtilPackage.getElementTextWithContext(element)); } diff --git a/idea/testData/intentions/changeVisibility/public/caretAfter.kt b/idea/testData/intentions/changeVisibility/protected/caretAfter.kt similarity index 100% rename from idea/testData/intentions/changeVisibility/public/caretAfter.kt rename to idea/testData/intentions/changeVisibility/protected/caretAfter.kt diff --git a/idea/testData/intentions/changeVisibility/protected/caretAfter.kt.after b/idea/testData/intentions/changeVisibility/protected/caretAfter.kt.after new file mode 100644 index 00000000000..42b1e44d680 --- /dev/null +++ b/idea/testData/intentions/changeVisibility/protected/caretAfter.kt.after @@ -0,0 +1,3 @@ +class C { + protected fun foo(){} +} \ No newline at end of file diff --git a/idea/testData/intentions/changeVisibility/protected/overrideVisibilityToDefault.kt.after b/idea/testData/intentions/changeVisibility/protected/overrideVisibilityToDefault.kt.after index 75bf7e4e600..59b5c45792c 100644 --- a/idea/testData/intentions/changeVisibility/protected/overrideVisibilityToDefault.kt.after +++ b/idea/testData/intentions/changeVisibility/protected/overrideVisibilityToDefault.kt.after @@ -3,5 +3,5 @@ interface I { } abstract class C : I { - protected override fun foo() {} + override fun foo() {} } \ No newline at end of file diff --git a/idea/testData/intentions/changeVisibility/public/caretAfter.kt.after b/idea/testData/intentions/changeVisibility/public/caretAfter.kt.after deleted file mode 100644 index 16aa80d6512..00000000000 --- a/idea/testData/intentions/changeVisibility/public/caretAfter.kt.after +++ /dev/null @@ -1,3 +0,0 @@ -class C { - public fun foo(){} -} \ No newline at end of file diff --git a/idea/testData/intentions/changeVisibility/public/forOverride2.kt b/idea/testData/intentions/changeVisibility/public/forOverride2.kt new file mode 100644 index 00000000000..59b5c45792c --- /dev/null +++ b/idea/testData/intentions/changeVisibility/public/forOverride2.kt @@ -0,0 +1,7 @@ +interface I { + protected fun foo() +} + +abstract class C : I { + override fun foo() {} +} \ No newline at end of file diff --git a/idea/testData/intentions/changeVisibility/public/forOverride2.kt.after b/idea/testData/intentions/changeVisibility/public/forOverride2.kt.after new file mode 100644 index 00000000000..0ce3e6eb6b6 --- /dev/null +++ b/idea/testData/intentions/changeVisibility/public/forOverride2.kt.after @@ -0,0 +1,7 @@ +interface I { + protected fun foo() +} + +abstract class C : I { + public override fun foo() {} +} \ No newline at end of file diff --git a/idea/testData/intentions/changeVisibility/public/primaryConstructor.kt.after b/idea/testData/intentions/changeVisibility/public/primaryConstructor.kt.after index 147d6ae6057..dd015ae32e1 100644 --- a/idea/testData/intentions/changeVisibility/public/primaryConstructor.kt.after +++ b/idea/testData/intentions/changeVisibility/public/primaryConstructor.kt.after @@ -1,2 +1,2 @@ // INTENTION_TEXT: Make public -class C public constructor(val v: Int) \ No newline at end of file +class C (val v: Int) \ No newline at end of file diff --git a/idea/testData/intentions/changeVisibility/public/simple.kt.after b/idea/testData/intentions/changeVisibility/public/simple.kt.after index 9b23049dc59..b48f905d12d 100644 --- a/idea/testData/intentions/changeVisibility/public/simple.kt.after +++ b/idea/testData/intentions/changeVisibility/public/simple.kt.after @@ -1,3 +1,3 @@ class C { - public fun foo(){} + fun foo(){} } \ No newline at end of file diff --git a/idea/testData/quickfix/modifiers/visibilityModifer1.kt.after b/idea/testData/quickfix/modifiers/visibilityModifer1.kt.after index 1cec0385869..ed204c0fa96 100644 --- a/idea/testData/quickfix/modifiers/visibilityModifer1.kt.after +++ b/idea/testData/quickfix/modifiers/visibilityModifer1.kt.after @@ -4,5 +4,5 @@ open class A { } class B : A() { - protected override fun run() {} + override fun run() {} } diff --git a/idea/testData/quickfix/modifiers/visibilityModifer2.kt.after b/idea/testData/quickfix/modifiers/visibilityModifer2.kt.after index 1cec0385869..ed204c0fa96 100644 --- a/idea/testData/quickfix/modifiers/visibilityModifer2.kt.after +++ b/idea/testData/quickfix/modifiers/visibilityModifer2.kt.after @@ -4,5 +4,5 @@ open class A { } class B : A() { - protected override fun run() {} + override fun run() {} } diff --git a/idea/testData/quickfix/modifiers/visibilityModiferOverrideJavaRuntime.kt.after b/idea/testData/quickfix/modifiers/visibilityModiferOverrideJavaRuntime.kt.after index f911496898f..fffba28951c 100644 --- a/idea/testData/quickfix/modifiers/visibilityModiferOverrideJavaRuntime.kt.after +++ b/idea/testData/quickfix/modifiers/visibilityModiferOverrideJavaRuntime.kt.after @@ -1,6 +1,6 @@ // "Change visibility modifier" "true" abstract class C : ClassLoader() { - protected override fun findClass(var1: String): Class<*> { + override fun findClass(var1: String): Class<*> { throw ClassNotFoundException(var1) } } diff --git a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java index 487c27d81fe..9d8e21210c8 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java @@ -2264,6 +2264,12 @@ public class IntentionTestGenerated extends AbstractIntentionTest { JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/intentions/changeVisibility/protected"), Pattern.compile("^([\\w\\-_]+)\\.kt$"), true); } + @TestMetadata("caretAfter.kt") + public void testCaretAfter() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/intentions/changeVisibility/protected/caretAfter.kt"); + doTest(fileName); + } + @TestMetadata("noModifier.kt") public void testNoModifier() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/intentions/changeVisibility/protected/noModifier.kt"); @@ -2321,18 +2327,18 @@ public class IntentionTestGenerated extends AbstractIntentionTest { doTest(fileName); } - @TestMetadata("caretAfter.kt") - public void testCaretAfter() throws Exception { - String fileName = JetTestUtils.navigationMetadata("idea/testData/intentions/changeVisibility/public/caretAfter.kt"); - doTest(fileName); - } - @TestMetadata("forOverride.kt") public void testForOverride() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/intentions/changeVisibility/public/forOverride.kt"); doTest(fileName); } + @TestMetadata("forOverride2.kt") + public void testForOverride2() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/intentions/changeVisibility/public/forOverride2.kt"); + doTest(fileName); + } + @TestMetadata("primaryConstructor.kt") public void testPrimaryConstructor() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/intentions/changeVisibility/public/primaryConstructor.kt");