Minor: move methods

This commit is contained in:
Natalia Ukhorskaya
2015-07-28 10:59:31 +03:00
parent 3ab53eb5e3
commit f713e66484
4 changed files with 28 additions and 31 deletions
@@ -148,7 +148,7 @@ class ConstructorConverter(
val fieldCorrection = fieldCorrections[field]
// we cannot specify different setter access for constructor parameter
if (fieldCorrection != null && !isVal(converter.referenceSearcher, field) && fieldCorrection.access != fieldCorrection.setterAccess) continue
if (fieldCorrection != null && !field.isVal(converter.referenceSearcher) && fieldCorrection.access != fieldCorrection.setterAccess) continue
parameterToField.put(parameter, field to type)
statementsToRemove.add(initializationStatement)
@@ -211,7 +211,7 @@ class ConstructorConverter(
converter.convertModifiers(field).filter { it in ACCESS_MODIFIERS }
Parameter(name,
type,
if (isVal(converter.referenceSearcher, field)) Parameter.VarValModifier.Val else Parameter.VarValModifier.Var,
if (field.isVal(converter.referenceSearcher)) Parameter.VarValModifier.Val else Parameter.VarValModifier.Var,
converter.convertAnnotations(parameter) + converter.convertAnnotations(field),
accessModifiers,
default)
@@ -311,7 +311,7 @@ class Converter private constructor(
.assignPrototype(field, CommentsAndSpacesInheritance.LINE_BREAKS)
}
else {
val isVal = isVal(referenceSearcher, field)
val isVal = field.isVal(referenceSearcher)
val typeToDeclare = variableTypeToDeclare(field,
settings.specifyFieldTypeByDefault || modifiers.isPublic || modifiers.isProtected,
isVal && modifiers.isPrivate)
@@ -42,6 +42,30 @@ public fun ReferenceSearcher.findMethodCalls(method: PsiMethod, scope: PsiElemen
}.filterNotNull()
}
public fun PsiField.isVal(searcher: ReferenceSearcher): Boolean {
if (hasModifierProperty(PsiModifier.FINAL)) return true
if (!hasModifierProperty(PsiModifier.PRIVATE)) return false
val containingClass = getContainingClass() ?: return false
val writes = searcher.findVariableUsages(this, containingClass).filter { PsiUtil.isAccessedForWriting(it) }
if (writes.size() == 0) return true
if (writes.size() > 1) return false
val write = writes.single()
val parent = write.getParent()
if (parent is PsiAssignmentExpression &&
parent.getOperationSign().getTokenType() == JavaTokenType.EQ &&
write.isQualifierEmptyOrThis()) {
val constructor = write.getContainingConstructor()
return constructor != null &&
constructor.getContainingClass() == containingClass &&
parent.getParent() is PsiExpressionStatement &&
parent.getParent()?.getParent() == constructor.getBody()
}
return false
}
public fun PsiVariable.hasWriteAccesses(searcher: ReferenceSearcher, scope: PsiElement?): Boolean
= if (scope != null) searcher.findVariableUsages(this, scope).any { PsiUtil.isAccessedForWriting(it) } else false
public object EmptyReferenceSearcher: ReferenceSearcher {
override fun findLocalUsages(element: PsiElement, scope: PsiElement): Collection<PsiReference> = emptyList()
override fun hasInheritors(`class`: PsiClass) = false
+1 -28
View File
@@ -24,12 +24,6 @@ import com.intellij.psi.util.PsiMethodUtil
fun quoteKeywords(packageName: String): String = packageName.split('.').map { Identifier.toKotlin(it) }.joinToString(".")
fun PsiVariable.countWriteAccesses(searcher: ReferenceSearcher, scope: PsiElement?): Int
= if (scope != null) searcher.findVariableUsages(this, scope).count { PsiUtil.isAccessedForWriting(it) } else 0
fun PsiVariable.hasWriteAccesses(searcher: ReferenceSearcher, scope: PsiElement?): Boolean
= if (scope != null) searcher.findVariableUsages(this, scope).any { PsiUtil.isAccessedForWriting(it) } else false
fun getDefaultInitializer(property: Property): Expression? {
val t = property.type
val result = if (t.isNullable) {
@@ -50,29 +44,8 @@ fun getDefaultInitializer(property: Property): Expression? {
return result?.assignNoPrototype()
}
fun isVal(searcher: ReferenceSearcher, field: PsiField): Boolean {
if (field.hasModifierProperty(PsiModifier.FINAL)) return true
if (!field.hasModifierProperty(PsiModifier.PRIVATE)) return false
val containingClass = field.getContainingClass() ?: return false
val writes = searcher.findVariableUsages(field, containingClass).filter { PsiUtil.isAccessedForWriting(it) }
if (writes.size() == 0) return true
if (writes.size() > 1) return false
val write = writes.single()
val parent = write.getParent()
if (parent is PsiAssignmentExpression &&
parent.getOperationSign().getTokenType() == JavaTokenType.EQ &&
write.isQualifierEmptyOrThis()) {
val constructor = write.getContainingConstructor()
return constructor != null &&
constructor.getContainingClass() == containingClass &&
parent.getParent() is PsiExpressionStatement &&
parent.getParent()?.getParent() == constructor.getBody()
}
return false
}
fun shouldGenerateDefaultInitializer(searcher: ReferenceSearcher, field: PsiField)
= field.getInitializer() == null && !(isVal(searcher, field) && field.hasWriteAccesses(searcher, field.getContainingClass()))
= field.getInitializer() == null && !(field.isVal(searcher) && field.hasWriteAccesses(searcher, field.getContainingClass()))
fun PsiReferenceExpression.isQualifierEmptyOrThis(): Boolean {
val qualifier = getQualifierExpression()