Refactor custom options registration for more type-safe API

This commit is contained in:
Dmitry Jemerov
2017-06-12 16:46:20 +02:00
parent fc2a1fce8b
commit 6c954d7e04
@@ -23,6 +23,7 @@ import com.intellij.psi.codeStyle.CommonCodeStyleSettings
import com.intellij.psi.codeStyle.LanguageCodeStyleSettingsProvider import com.intellij.psi.codeStyle.LanguageCodeStyleSettingsProvider
import org.jetbrains.kotlin.idea.KotlinLanguage import org.jetbrains.kotlin.idea.KotlinLanguage
import org.jetbrains.kotlin.idea.core.formatter.KotlinCodeStyleSettings import org.jetbrains.kotlin.idea.core.formatter.KotlinCodeStyleSettings
import kotlin.reflect.KProperty
class KotlinLanguageCodeStyleSettingsProvider : LanguageCodeStyleSettingsProvider() { class KotlinLanguageCodeStyleSettingsProvider : LanguageCodeStyleSettingsProvider() {
override fun getLanguage() = KotlinLanguage.INSTANCE override fun getLanguage() = KotlinLanguage.INSTANCE
@@ -130,6 +131,10 @@ class KotlinLanguageCodeStyleSettingsProvider : LanguageCodeStyleSettingsProvide
override fun getLanguageName(): String = KotlinLanguage.NAME override fun getLanguageName(): String = KotlinLanguage.NAME
override fun customizeSettings(consumer: CodeStyleSettingsCustomizable, settingsType: LanguageCodeStyleSettingsProvider.SettingsType) { override fun customizeSettings(consumer: CodeStyleSettingsCustomizable, settingsType: LanguageCodeStyleSettingsProvider.SettingsType) {
fun showCustomOption(field: KProperty<*>, title: String, groupName: String? = null) {
consumer.showCustomOption(KotlinCodeStyleSettings::class.java, field.name, title, groupName)
}
when (settingsType) { when (settingsType) {
LanguageCodeStyleSettingsProvider.SettingsType.SPACING_SETTINGS -> { LanguageCodeStyleSettingsProvider.SettingsType.SPACING_SETTINGS -> {
consumer.showStandardOptions( consumer.showStandardOptions(
@@ -148,44 +153,45 @@ class KotlinLanguageCodeStyleSettingsProvider : LanguageCodeStyleSettingsProvide
"SPACE_BEFORE_CATCH_PARENTHESES" "SPACE_BEFORE_CATCH_PARENTHESES"
); );
consumer.showCustomOption(KotlinCodeStyleSettings::class.java, "SPACE_AROUND_RANGE", "Around range (..)", showCustomOption(KotlinCodeStyleSettings::SPACE_AROUND_RANGE,
CodeStyleSettingsCustomizable.SPACES_AROUND_OPERATORS) "Around range (..)",
CodeStyleSettingsCustomizable.SPACES_AROUND_OPERATORS)
consumer.showCustomOption(KotlinCodeStyleSettings::class.java, "SPACE_BEFORE_TYPE_COLON", showCustomOption(KotlinCodeStyleSettings::SPACE_BEFORE_TYPE_COLON,
"Space before colon, after declaration name", "Space before colon, after declaration name",
CodeStyleSettingsCustomizable.SPACES_OTHER) CodeStyleSettingsCustomizable.SPACES_OTHER)
consumer.showCustomOption(KotlinCodeStyleSettings::class.java, "SPACE_AFTER_TYPE_COLON", showCustomOption(KotlinCodeStyleSettings::SPACE_AFTER_TYPE_COLON,
"Space after colon, before declaration type", "Space after colon, before declaration type",
CodeStyleSettingsCustomizable.SPACES_OTHER) CodeStyleSettingsCustomizable.SPACES_OTHER)
consumer.showCustomOption(KotlinCodeStyleSettings::class.java, "SPACE_BEFORE_EXTEND_COLON", showCustomOption(KotlinCodeStyleSettings::SPACE_BEFORE_EXTEND_COLON,
"Space before colon in new type definition", "Space before colon in new type definition",
CodeStyleSettingsCustomizable.SPACES_OTHER) CodeStyleSettingsCustomizable.SPACES_OTHER)
consumer.showCustomOption(KotlinCodeStyleSettings::class.java, "SPACE_AFTER_EXTEND_COLON", showCustomOption(KotlinCodeStyleSettings::SPACE_AFTER_EXTEND_COLON,
"Space after colon in new type definition", "Space after colon in new type definition",
CodeStyleSettingsCustomizable.SPACES_OTHER) CodeStyleSettingsCustomizable.SPACES_OTHER)
consumer.showCustomOption(KotlinCodeStyleSettings::class.java, "INSERT_WHITESPACES_IN_SIMPLE_ONE_LINE_METHOD", showCustomOption(KotlinCodeStyleSettings::INSERT_WHITESPACES_IN_SIMPLE_ONE_LINE_METHOD,
"Insert whitespaces in simple one line methods", "Insert whitespaces in simple one line methods",
CodeStyleSettingsCustomizable.SPACES_OTHER) CodeStyleSettingsCustomizable.SPACES_OTHER)
consumer.showCustomOption(KotlinCodeStyleSettings::class.java, "SPACE_AROUND_FUNCTION_TYPE_ARROW", showCustomOption(KotlinCodeStyleSettings::SPACE_AROUND_FUNCTION_TYPE_ARROW,
"Surround arrow in function types with spaces", "Surround arrow in function types with spaces",
CodeStyleSettingsCustomizable.SPACES_OTHER) CodeStyleSettingsCustomizable.SPACES_OTHER)
consumer.showCustomOption(KotlinCodeStyleSettings::class.java, "SPACE_AROUND_WHEN_ARROW", showCustomOption(KotlinCodeStyleSettings::SPACE_AROUND_WHEN_ARROW,
"Surround arrow in \"when\" clause with spaces", "Surround arrow in \"when\" clause with spaces",
CodeStyleSettingsCustomizable.SPACES_OTHER) CodeStyleSettingsCustomizable.SPACES_OTHER)
consumer.showCustomOption(KotlinCodeStyleSettings::class.java, "SPACE_BEFORE_LAMBDA_ARROW", showCustomOption(KotlinCodeStyleSettings::SPACE_BEFORE_LAMBDA_ARROW,
"Before lambda arrow", "Before lambda arrow",
CodeStyleSettingsCustomizable.SPACES_OTHER) CodeStyleSettingsCustomizable.SPACES_OTHER)
consumer.showCustomOption(KotlinCodeStyleSettings::class.java, "SPACE_BEFORE_WHEN_PARENTHESES", showCustomOption(KotlinCodeStyleSettings::SPACE_BEFORE_WHEN_PARENTHESES,
"'when' parentheses", "'when' parentheses",
CodeStyleSettingsCustomizable.SPACES_BEFORE_PARENTHESES) CodeStyleSettingsCustomizable.SPACES_BEFORE_PARENTHESES)
} }
LanguageCodeStyleSettingsProvider.SettingsType.WRAPPING_AND_BRACES_SETTINGS -> { LanguageCodeStyleSettingsProvider.SettingsType.WRAPPING_AND_BRACES_SETTINGS -> {
consumer.showStandardOptions( consumer.showStandardOptions(
@@ -207,12 +213,13 @@ class KotlinLanguageCodeStyleSettingsProvider : LanguageCodeStyleSettingsProvide
"METHOD_PARAMETERS_RPAREN_ON_NEXT_LINE" "METHOD_PARAMETERS_RPAREN_ON_NEXT_LINE"
) )
consumer.renameStandardOption(CodeStyleSettingsCustomizable.WRAPPING_SWITCH_STATEMENT, "'when' statements") consumer.renameStandardOption(CodeStyleSettingsCustomizable.WRAPPING_SWITCH_STATEMENT, "'when' statements")
consumer.showCustomOption(KotlinCodeStyleSettings::class.java, "ALIGN_IN_COLUMNS_CASE_BRANCH", "Align 'when' branches in columns", showCustomOption(KotlinCodeStyleSettings::ALIGN_IN_COLUMNS_CASE_BRANCH,
CodeStyleSettingsCustomizable.WRAPPING_SWITCH_STATEMENT) "Align 'when' branches in columns",
CodeStyleSettingsCustomizable.WRAPPING_SWITCH_STATEMENT)
consumer.showCustomOption(KotlinCodeStyleSettings::class.java, "LBRACE_ON_NEXT_LINE", showCustomOption(KotlinCodeStyleSettings::LBRACE_ON_NEXT_LINE,
"Put left brace on new line", "Put left brace on new line",
CodeStyleSettingsCustomizable.WRAPPING_BRACES) CodeStyleSettingsCustomizable.WRAPPING_BRACES)
} }
LanguageCodeStyleSettingsProvider.SettingsType.BLANK_LINES_SETTINGS -> consumer.showStandardOptions( LanguageCodeStyleSettingsProvider.SettingsType.BLANK_LINES_SETTINGS -> consumer.showStandardOptions(
"KEEP_BLANK_LINES_IN_CODE", "KEEP_BLANK_LINES_IN_CODE",