From d703284d01e12111ee7b6045ddda8497d022234a Mon Sep 17 00:00:00 2001 From: Toshiaki Kameyama Date: Thu, 16 Jan 2020 10:08:13 +0900 Subject: [PATCH] Naming convention inspection: don't report for factory functions #KT-20438 Fixed --- .../NamingConventionInspections.kt | 20 ++++++++++++++----- .../inspections/naming/function/test.kt | 9 +++++++++ 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/NamingConventionInspections.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/NamingConventionInspections.kt index 3c575098a60..28ccf528df7 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/NamingConventionInspections.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/NamingConventionInspections.kt @@ -26,8 +26,10 @@ import org.intellij.lang.regexp.RegExpFileType import org.jdom.Element import org.jetbrains.annotations.NonNls import org.jetbrains.kotlin.idea.KotlinBundle +import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.core.packageMatchesDirectoryOrImplicit import org.jetbrains.kotlin.idea.quickfix.RenameIdentifierFix +import org.jetbrains.kotlin.idea.refactoring.fqName.fqName import org.jetbrains.kotlin.idea.refactoring.isInjectedFragment import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.* @@ -100,10 +102,10 @@ class NamingConventionInspectionSettings( } } - fun verifyName(element: PsiNameIdentifierOwner, holder: ProblemsHolder) { + fun verifyName(element: PsiNameIdentifierOwner, holder: ProblemsHolder, additionalCheck: () -> Boolean) { val name = element.name val nameIdentifier = element.nameIdentifier - if (name != null && nameIdentifier != null && nameRegex?.matches(name) == false) { + if (name != null && nameIdentifier != null && nameRegex?.matches(name) == false && additionalCheck()) { val message = getNameMismatchMessage(name) holder.registerProblem( element.nameIdentifier!!, @@ -162,8 +164,8 @@ sealed class NamingConventionInspection( rules = *rules ) - protected fun verifyName(element: PsiNameIdentifierOwner, holder: ProblemsHolder) { - namingSettings.verifyName(element, holder) + protected fun verifyName(element: PsiNameIdentifierOwner, holder: ProblemsHolder, additionalCheck: () -> Boolean = { true }) { + namingSettings.verifyName(element, holder, additionalCheck) } protected fun getNameMismatchMessage(name: String): String { @@ -217,7 +219,15 @@ class FunctionNameInspection : NamingConventionInspection( return@namedFunctionVisitor } if (!TestUtils.isInTestSourceContent(function)) { - verifyName(function, holder) + verifyName(function, holder) { + val functionName = function.name + val typeReference = function.typeReference + if (typeReference != null) { + typeReference.text != functionName + } else { + function.resolveToDescriptorIfAny()?.returnType?.fqName?.shortName()?.asString() != functionName + } + } } } } diff --git a/idea/testData/inspections/naming/function/test.kt b/idea/testData/inspections/naming/function/test.kt index ef9100f6dc2..830421c49d8 100644 --- a/idea/testData/inspections/naming/function/test.kt +++ b/idea/testData/inspections/naming/function/test.kt @@ -15,3 +15,12 @@ class C : I { } fun Vector3d(): Int = 42 + +interface D +fun D(): D = object : D {} + +interface E +fun E() = object : E {} + +typealias F = () -> String +fun F(): F = { "" }