From c5d03ec1bfc0e780135cb23aebfef7d7fcc3696b Mon Sep 17 00:00:00 2001 From: ice1000 Date: Fri, 20 Apr 2018 15:37:28 +0800 Subject: [PATCH] [ lang ] Update laji code structure --- .../src/org/ice1000/devkt/lang/languages.kt | 30 +++++++++++-------- .../org/ice1000/devkt/openapi/languages.kt | 4 +-- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/common/src/org/ice1000/devkt/lang/languages.kt b/common/src/org/ice1000/devkt/lang/languages.kt index 55cd2d7..6adda44 100644 --- a/common/src/org/ice1000/devkt/lang/languages.kt +++ b/common/src/org/ice1000/devkt/lang/languages.kt @@ -23,31 +23,34 @@ import javax.swing.Icon * @since v1.2 * @see Language */ -abstract class DevKtLanguage internal constructor( - val language: Language -) : Annotator, SyntaxHighlighter { +interface DevKtLanguage : Annotator, SyntaxHighlighter { + val language: Language /** * Check if a file is of this language * @param fileName String the file name * @return Boolean is of this language or not */ - open fun satisfies(fileName: String) = false + @JvmDefault + fun satisfies(fileName: String) = false /** * Line comment start, used when pressing Ctrl + / */ - open val lineCommentStart: String? get() = null + @JvmDefault + val lineCommentStart: String? get() = null /** * Block comment surrounding, used when pressing * Ctrl + Shift + / */ - open val blockComment: Pair? get() = null + @JvmDefault + val blockComment: Pair? get() = null - open val icon: Icon get() = DevKtIcons.ANY + @JvmDefault + val icon: Icon get() = DevKtIcons.ANY - abstract fun createLexer(project: Project): Lexer + fun createLexer(project: Project): Lexer /** * Called when typing, before the typed character is inserted. @@ -59,7 +62,8 @@ abstract class DevKtLanguage internal constructor( * @see org.ice1000.devkt.ui.DevKtDocumentHandler.insertDirectly * @see org.ice1000.devkt.ui.DevKtDocumentHandler.insert */ - open fun handleTyping( + @JvmDefault + fun handleTyping( offset: Int, text: String?, element: PsiElement?, @@ -76,8 +80,8 @@ abstract class DevKtLanguage internal constructor( sealed class BuiltinDevKtLanguage( annotator: Annotator, syntaxHighlighter: SyntaxHighlighter, - language: Language -) : DevKtLanguage(language), + override val language: Language +) : DevKtLanguage, Annotator by annotator, SyntaxHighlighter by syntaxHighlighter { override fun satisfies(fileName: String) = false @@ -140,11 +144,13 @@ class Kotlin( class PlainText( annotator: Annotator, syntaxHighlighter: SyntaxHighlighter -) : DevKtLanguage(PlainTextLanguage.INSTANCE), +) : DevKtLanguage, Annotator by annotator, SyntaxHighlighter by syntaxHighlighter { + override val language: PlainTextLanguage = PlainTextLanguage.INSTANCE override fun satisfies(fileName: String) = fileName.endsWith(".txt") && !fileName.endsWith(".lua.txt") || '.' !in fileName + private val lexer = EmptyLexer() override fun createLexer(project: Project) = lexer } diff --git a/common/src/org/ice1000/devkt/openapi/languages.kt b/common/src/org/ice1000/devkt/openapi/languages.kt index 46c9adc..2cb0dc9 100644 --- a/common/src/org/ice1000/devkt/openapi/languages.kt +++ b/common/src/org/ice1000/devkt/openapi/languages.kt @@ -17,9 +17,9 @@ import javax.swing.Icon * @since v1.2 */ abstract class ExtendedDevKtLanguage( - language: Language, + override val language: Language, val parserDefinition: ParserDefinition -) : DevKtLanguage(language) { +) : DevKtLanguage { /** * Creates a lexer for syntax highlight *