Minor, refactor: Move hasBody() to KtProperty

This commit is contained in:
Pavel V. Talanov
2017-03-31 20:30:08 +03:00
parent 922fde9986
commit db294da24d
4 changed files with 24 additions and 27 deletions
@@ -298,4 +298,17 @@ public class KtProperty extends KtTypeParameterListOwnerStub<KotlinPropertyStub>
// 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;
}
}
@@ -526,4 +526,10 @@ fun KtCallExpression.getOrCreateValueArgumentList(): KtValueArgumentList {
valueArgumentList?.let { return it }
return addAfter(KtPsiFactory(this).createCallArguments("()"),
typeArgumentList ?: calleeExpression) as KtValueArgumentList
}
}
fun KtDeclaration.hasBody() = when (this) {
is KtFunction -> hasBody()
is KtProperty -> hasBody()
else -> false
}
@@ -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,
@@ -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 <reified T: PsiElement> 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
}