Do not insert explicit visibility modifier if it's default

This commit is contained in:
Valentin Kipyatkov
2015-09-14 21:41:02 +03:00
parent 8ba7f2c238
commit 1ccbda6af4
22 changed files with 102 additions and 61 deletions
@@ -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
@@ -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<T extends StubElement<?>> extends JetEleme
@Override
public void addModifier(@NotNull JetModifierKeywordToken modifier) {
AddRemoveModifierPackage.addModifier(this, modifier, JetTokens.DEFAULT_VISIBILITY_KEYWORD);
AddRemoveModifierPackage.addModifier(this, modifier);
}
@Override
@@ -39,7 +39,7 @@ public class JetPrimaryConstructor : JetConstructor<JetPrimaryConstructor> {
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()
}
@@ -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)
}
@@ -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 }
}