From db294da24da355a3383b4c452916fd9ecaaeaab8 Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Fri, 31 Mar 2017 20:30:08 +0300 Subject: [PATCH] Minor, refactor: Move hasBody() to KtProperty --- .../org/jetbrains/kotlin/psi/KtProperty.java | 13 +++++++++++++ .../jetbrains/kotlin/psi/psiUtil/ktPsiUtil.kt | 8 +++++++- .../kotlin/resolve/DescriptorResolver.java | 19 +------------------ .../kotlin/idea/core/psiModificationUtils.kt | 11 +++-------- 4 files changed, 24 insertions(+), 27 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/psi/KtProperty.java b/compiler/frontend/src/org/jetbrains/kotlin/psi/KtProperty.java index 01c0ef8059e..3c52b578903 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/psi/KtProperty.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/psi/KtProperty.java @@ -298,4 +298,17 @@ public class KtProperty extends KtTypeParameterListOwnerStub // Suppress Java check for out-of-block return false; } + + public boolean hasBody() { + if (hasDelegateExpressionOrInitializer()) return true; + KtPropertyAccessor getter = getGetter(); + if (getter != null && getter.hasBody()) { + return true; + } + KtPropertyAccessor setter = getSetter(); + if (setter != null && setter.hasBody()) { + return true; + } + return false; + } } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/psi/psiUtil/ktPsiUtil.kt b/compiler/frontend/src/org/jetbrains/kotlin/psi/psiUtil/ktPsiUtil.kt index d759d2e691e..eb483ca7658 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/psi/psiUtil/ktPsiUtil.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/psi/psiUtil/ktPsiUtil.kt @@ -526,4 +526,10 @@ fun KtCallExpression.getOrCreateValueArgumentList(): KtValueArgumentList { valueArgumentList?.let { return it } return addAfter(KtPsiFactory(this).createCallArguments("()"), typeArgumentList ?: calleeExpression) as KtValueArgumentList -} \ No newline at end of file +} + +fun KtDeclaration.hasBody() = when (this) { + is KtFunction -> hasBody() + is KtProperty -> hasBody() + else -> false +} diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/DescriptorResolver.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/DescriptorResolver.java index fe6a77dd77a..010906ac3ea 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/DescriptorResolver.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/DescriptorResolver.java @@ -788,10 +788,9 @@ public class DescriptorResolver { KtModifierList modifierList = property.getModifierList(); boolean isVar = property.isVar(); - boolean hasBody = hasBody(property); Visibility visibility = resolveVisibilityFromModifiers(property, getDefaultVisibility(property, containingDeclaration)); Modality modality = containingDeclaration instanceof ClassDescriptor - ? resolveMemberModalityFromModifiers(property, getDefaultModality(containingDeclaration, visibility, hasBody), + ? resolveMemberModalityFromModifiers(property, getDefaultModality(containingDeclaration, visibility, property.hasBody()), trace.getBindingContext(), containingDeclaration) : Modality.FINAL; @@ -896,22 +895,6 @@ public class DescriptorResolver { return propertyDescriptor; } - public static boolean hasBody(KtProperty property) { - boolean hasBody = property.hasDelegateExpressionOrInitializer(); - if (!hasBody) { - KtPropertyAccessor getter = property.getGetter(); - if (getter != null && getter.hasBody()) { - hasBody = true; - } - KtPropertyAccessor setter = property.getSetter(); - if (!hasBody && setter != null && setter.hasBody()) { - hasBody = true; - } - } - return hasBody; - } - - @NotNull /*package*/ static KotlinType transformAnonymousTypeIfNeeded( @NotNull DeclarationDescriptorWithVisibility descriptor, 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 f3c9a000b1d..d4999b06063 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 @@ -33,14 +33,14 @@ import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject import org.jetbrains.kotlin.psi.psiUtil.getLambdaArgumentName +import org.jetbrains.kotlin.psi.psiUtil.hasBody import org.jetbrains.kotlin.psi.psiUtil.visibilityModifierType import org.jetbrains.kotlin.psi.typeRefHelpers.setReceiverTypeReference import org.jetbrains.kotlin.resolve.BindingContext -import org.jetbrains.kotlin.resolve.DescriptorResolver import org.jetbrains.kotlin.resolve.OverridingUtil import org.jetbrains.kotlin.resolve.calls.callUtil.getValueArgumentsInParentheses -import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode +import org.jetbrains.kotlin.types.KotlinType @Suppress("UNCHECKED_CAST") inline fun PsiElement.replaced(newElement: T): T { @@ -246,12 +246,7 @@ fun KtDeclaration.implicitModality(): KtModifierKeywordToken { } } if (klass is KtClass && klass.isInterface() && !hasModifier(KtTokens.PRIVATE_KEYWORD)) { - val hasBody = when (this) { - is KtProperty -> DescriptorResolver.hasBody(this) - is KtFunction -> hasBody() - else -> false - } - return if (hasBody) KtTokens.OPEN_KEYWORD else KtTokens.ABSTRACT_KEYWORD + return if (hasBody()) KtTokens.OPEN_KEYWORD else KtTokens.ABSTRACT_KEYWORD } return KtTokens.FINAL_KEYWORD }