Cleanup: apply "cascade if..." inspection (+ some others)

This commit is contained in:
Mikhail Glukhikh
2017-06-28 15:19:20 +03:00
committed by Mikhail Glukhikh
parent 9c06739594
commit 1d2017b0fc
80 changed files with 1079 additions and 1190 deletions
@@ -343,12 +343,11 @@ class ExpectedInfos(
}
val tail = if (argumentName == null) {
if (parameter == parameters.last())
rparenthTail
else if (parameters.dropWhile { it != parameter }.drop(1).any(::needCommaForParameter))
Tail.COMMA
else
null
when {
parameter == parameters.last() -> rparenthTail
parameters.dropWhile { it != parameter }.drop(1).any(::needCommaForParameter) -> Tail.COMMA
else -> null
}
}
else {
namedArgumentTail(argumentToParameter, argumentName, descriptor)
@@ -404,12 +403,11 @@ class ExpectedInfos(
private fun namedArgumentTail(argumentToParameter: Map<ValueArgument, ValueParameterDescriptor>, argumentName: Name, descriptor: FunctionDescriptor): Tail? {
val usedParameterNames = (argumentToParameter.values.map { it.name } + listOf(argumentName)).toSet()
val notUsedParameters = descriptor.valueParameters.filter { it.name !in usedParameterNames }
return if (notUsedParameters.isEmpty())
Tail.RPARENTH // named arguments no supported for []
else if (notUsedParameters.all { it.hasDefaultValue() })
null
else
Tail.COMMA
return when {
notUsedParameters.isEmpty() -> Tail.RPARENTH // named arguments no supported for []
notUsedParameters.all { it.hasDefaultValue() } -> null
else -> Tail.COMMA
}
}
private fun calculateForEqAndAssignment(expressionWithType: KtExpression): Collection<ExpectedInfo>? {
@@ -35,15 +35,14 @@ class ImportableFqNameClassifier(private val file: KtFile) {
for (import in file.importDirectives) {
val importPath = import.importPath ?: continue
val fqName = importPath.fqName
if (importPath.isAllUnder) {
allUnderImports.add(fqName)
}
else if (!importPath.hasAlias()) {
preciseImports.add(fqName)
preciseImportPackages.add(fqName.parent())
} else {
excludedImports.add(fqName)
// TODO: support aliased imports in completion
when {
importPath.isAllUnder -> allUnderImports.add(fqName)
!importPath.hasAlias() -> {
preciseImports.add(fqName)
preciseImportPackages.add(fqName.parent())
}
else -> excludedImports.add(fqName)
// TODO: support aliased imports in completion
}
}
}
@@ -174,79 +174,45 @@ object KotlinNameSuggester {
val typeChecker = KotlinTypeChecker.DEFAULT
if (ErrorUtils.containsErrorType(type)) return
if (typeChecker.equalTypes(builtIns.booleanType, type)) {
addName("b", validator)
}
else if (typeChecker.equalTypes(builtIns.intType, type)) {
addName("i", validator)
}
else if (typeChecker.equalTypes(builtIns.byteType, type)) {
addName("byte", validator)
}
else if (typeChecker.equalTypes(builtIns.longType, type)) {
addName("l", validator)
}
else if (typeChecker.equalTypes(builtIns.floatType, type)) {
addName("fl", validator)
}
else if (typeChecker.equalTypes(builtIns.doubleType, type)) {
addName("d", validator)
}
else if (typeChecker.equalTypes(builtIns.shortType, type)) {
addName("sh", validator)
}
else if (typeChecker.equalTypes(builtIns.charType, type)) {
addName("c", validator)
}
else if (typeChecker.equalTypes(builtIns.stringType, type)) {
addName("s", validator)
}
else if (KotlinBuiltIns.isArray(type) || KotlinBuiltIns.isPrimitiveArray(type)) {
val elementType = builtIns.getArrayElementType(type)
if (typeChecker.equalTypes(builtIns.booleanType, elementType)) {
addName("booleans", validator)
}
else if (typeChecker.equalTypes(builtIns.intType, elementType)) {
addName("ints", validator)
}
else if (typeChecker.equalTypes(builtIns.byteType, elementType)) {
addName("bytes", validator)
}
else if (typeChecker.equalTypes(builtIns.longType, elementType)) {
addName("longs", validator)
}
else if (typeChecker.equalTypes(builtIns.floatType, elementType)) {
addName("floats", validator)
}
else if (typeChecker.equalTypes(builtIns.doubleType, elementType)) {
addName("doubles", validator)
}
else if (typeChecker.equalTypes(builtIns.shortType, elementType)) {
addName("shorts", validator)
}
else if (typeChecker.equalTypes(builtIns.charType, elementType)) {
addName("chars", validator)
}
else if (typeChecker.equalTypes(builtIns.stringType, elementType)) {
addName("strings", validator)
}
else {
val classDescriptor = TypeUtils.getClassDescriptor(elementType)
if (classDescriptor != null) {
val className = classDescriptor.name
addName("arrayOf" + StringUtil.capitalize(className.asString()) + "s", validator)
when {
typeChecker.equalTypes(builtIns.booleanType, type) -> addName("b", validator)
typeChecker.equalTypes(builtIns.intType, type) -> addName("i", validator)
typeChecker.equalTypes(builtIns.byteType, type) -> addName("byte", validator)
typeChecker.equalTypes(builtIns.longType, type) -> addName("l", validator)
typeChecker.equalTypes(builtIns.floatType, type) -> addName("fl", validator)
typeChecker.equalTypes(builtIns.doubleType, type) -> addName("d", validator)
typeChecker.equalTypes(builtIns.shortType, type) -> addName("sh", validator)
typeChecker.equalTypes(builtIns.charType, type) -> addName("c", validator)
typeChecker.equalTypes(builtIns.stringType, type) -> addName("s", validator)
KotlinBuiltIns.isArray(type) || KotlinBuiltIns.isPrimitiveArray(type) -> {
val elementType = builtIns.getArrayElementType(type)
when {
typeChecker.equalTypes(builtIns.booleanType, elementType) -> addName("booleans", validator)
typeChecker.equalTypes(builtIns.intType, elementType) -> addName("ints", validator)
typeChecker.equalTypes(builtIns.byteType, elementType) -> addName("bytes", validator)
typeChecker.equalTypes(builtIns.longType, elementType) -> addName("longs", validator)
typeChecker.equalTypes(builtIns.floatType, elementType) -> addName("floats", validator)
typeChecker.equalTypes(builtIns.doubleType, elementType) -> addName("doubles", validator)
typeChecker.equalTypes(builtIns.shortType, elementType) -> addName("shorts", validator)
typeChecker.equalTypes(builtIns.charType, elementType) -> addName("chars", validator)
typeChecker.equalTypes(builtIns.stringType, elementType) -> addName("strings", validator)
else -> {
val classDescriptor = TypeUtils.getClassDescriptor(elementType)
if (classDescriptor != null) {
val className = classDescriptor.name
addName("arrayOf" + StringUtil.capitalize(className.asString()) + "s", validator)
}
}
}
}
}
else if (type.isFunctionType) {
addName("function", validator)
}
else {
val descriptor = type.constructor.declarationDescriptor
if (descriptor != null) {
val className = descriptor.name
if (!className.isSpecial) {
addCamelNames(className.asString(), validator)
type.isFunctionType -> addName("function", validator)
else -> {
val descriptor = type.constructor.declarationDescriptor
if (descriptor != null) {
val className = descriptor.name
if (!className.isSpecial) {
addCamelNames(className.asString(), validator)
}
}
}
}
@@ -204,25 +204,24 @@ fun KtModifierListOwner.setVisibility(visibilityModifier: KtModifierKeywordToken
}
fun KtDeclaration.implicitVisibility(): KtModifierKeywordToken? =
if (this is KtConstructor<*>) {
val klass = getContainingClassOrObject()
if (klass is KtClass && (klass.isEnum() || klass.isSealed())) KtTokens.PRIVATE_KEYWORD
else KtTokens.DEFAULT_VISIBILITY_KEYWORD
}
else if (hasModifier(KtTokens.OVERRIDE_KEYWORD)) {
(resolveToDescriptor(BodyResolveMode.PARTIAL) as? CallableMemberDescriptor)
?.overriddenDescriptors
?.let { OverridingUtil.findMaxVisibility(it) }
?.toKeywordToken()
}
else {
KtTokens.DEFAULT_VISIBILITY_KEYWORD
when {
this is KtConstructor<*> -> {
val klass = getContainingClassOrObject()
if (klass is KtClass && (klass.isEnum() || klass.isSealed())) KtTokens.PRIVATE_KEYWORD
else KtTokens.DEFAULT_VISIBILITY_KEYWORD
}
hasModifier(KtTokens.OVERRIDE_KEYWORD) -> {
(resolveToDescriptor(BodyResolveMode.PARTIAL) as? CallableMemberDescriptor)
?.overriddenDescriptors
?.let { OverridingUtil.findMaxVisibility(it) }
?.toKeywordToken()
}
else -> {
KtTokens.DEFAULT_VISIBILITY_KEYWORD
}
}
fun KtModifierListOwner.canBePrivate(): Boolean {
if (modifierList?.hasModifier(KtTokens.ABSTRACT_KEYWORD) ?: false) return false
return true
}
fun KtModifierListOwner.canBePrivate() = modifierList?.hasModifier(KtTokens.ABSTRACT_KEYWORD) != true
fun KtModifierListOwner.canBeProtected(): Boolean {
val parent = this.parent