From 6c8b3d03fd5d3988c728181194427020cdaec429 Mon Sep 17 00:00:00 2001 From: "kirill.shmakov" Date: Fri, 1 Feb 2019 11:37:03 +0300 Subject: [PATCH] Add syntax highlighting for *.def files --- idea/idea-native/build.gradle.kts | 8 +- .../ide/konan/NativeDefinitionsLexer.java | 1202 +++++++++++++++++ .../ide/konan/NativeDefinitionsParser.java | 395 ++++++ .../konan/psi/NativeDefinitionsBoolKey.java | 10 + .../psi/NativeDefinitionsBoolKeyImpl.java | 28 + .../konan/psi/NativeDefinitionsBoolValue.java | 10 + .../psi/NativeDefinitionsBoolValueImpl.java | 28 + .../ide/konan/psi/NativeDefinitionsCode.java | 10 + .../konan/psi/NativeDefinitionsCodeImpl.java | 28 + .../konan/psi/NativeDefinitionsStringKey.java | 10 + .../psi/NativeDefinitionsStringKeyImpl.java | 28 + .../psi/NativeDefinitionsStringValue.java | 10 + .../psi/NativeDefinitionsStringValueImpl.java | 28 + .../psi/NativeDefinitionsStringsKey.java | 10 + .../psi/NativeDefinitionsStringsKeyImpl.java | 28 + .../psi/NativeDefinitionsStringsValue.java | 10 + .../NativeDefinitionsStringsValueImpl.java | 28 + .../ide/konan/psi/NativeDefinitionsTypes.java | 97 ++ .../konan/psi/NativeDefinitionsVisitor.java | 42 + .../ide/konan/KotlinNativeFileTypeFactory.kt | 2 + .../kotlin/ide/konan/NativeDefinitions.bnf | 96 ++ .../kotlin/ide/konan/NativeDefinitions.flex | 145 ++ .../kotlin/ide/konan/NativeDefinitions.kt | 169 +++ .../ide/konan/psi/NativeDefinitionsTypes.kt | 46 + .../colorHighlighting/allProperties.def | 51 + .../colorHighlighting/allProperties.txt | 204 +++ .../colorHighlighting/badDefinitions.def | 12 + .../colorHighlighting/badDefinitions.txt | 36 + .../ide/konan/NativeDefinitinosParsingTest.kt | 22 + idea/resources/META-INF/native.xml | 3 + .../konan/library/KonanLibraryConstants.kt | 2 + 31 files changed, 2796 insertions(+), 2 deletions(-) create mode 100644 idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/NativeDefinitionsLexer.java create mode 100644 idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/NativeDefinitionsParser.java create mode 100644 idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsBoolKey.java create mode 100644 idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsBoolKeyImpl.java create mode 100644 idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsBoolValue.java create mode 100644 idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsBoolValueImpl.java create mode 100644 idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsCode.java create mode 100644 idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsCodeImpl.java create mode 100644 idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsStringKey.java create mode 100644 idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsStringKeyImpl.java create mode 100644 idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsStringValue.java create mode 100644 idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsStringValueImpl.java create mode 100644 idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsStringsKey.java create mode 100644 idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsStringsKeyImpl.java create mode 100644 idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsStringsValue.java create mode 100644 idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsStringsValueImpl.java create mode 100644 idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsTypes.java create mode 100644 idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsVisitor.java create mode 100644 idea/idea-native/src/org/jetbrains/kotlin/ide/konan/NativeDefinitions.bnf create mode 100644 idea/idea-native/src/org/jetbrains/kotlin/ide/konan/NativeDefinitions.flex create mode 100644 idea/idea-native/src/org/jetbrains/kotlin/ide/konan/NativeDefinitions.kt create mode 100644 idea/idea-native/src/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsTypes.kt create mode 100644 idea/idea-native/testData/colorHighlighting/allProperties.def create mode 100644 idea/idea-native/testData/colorHighlighting/allProperties.txt create mode 100644 idea/idea-native/testData/colorHighlighting/badDefinitions.def create mode 100644 idea/idea-native/testData/colorHighlighting/badDefinitions.txt create mode 100644 idea/idea-native/tests/org/jetbrains/kotlin/ide/konan/NativeDefinitinosParsingTest.kt diff --git a/idea/idea-native/build.gradle.kts b/idea/idea-native/build.gradle.kts index df9c08f75b0..2378e1c9a24 100644 --- a/idea/idea-native/build.gradle.kts +++ b/idea/idea-native/build.gradle.kts @@ -13,8 +13,12 @@ dependencies { } sourceSets { - "main" { projectDefault() } - "test" { none() } + "main" { + projectDefault() + java.srcDir("gen") + } + "test" { projectDefault() } + } configureFormInstrumentation() diff --git a/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/NativeDefinitionsLexer.java b/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/NativeDefinitionsLexer.java new file mode 100644 index 00000000000..441b1114c01 --- /dev/null +++ b/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/NativeDefinitionsLexer.java @@ -0,0 +1,1202 @@ +/* The following code was generated by JFlex 1.7.0 tweaked for IntelliJ platform */ + +package org.jetbrains.kotlin.ide.konan; + +import com.intellij.lexer.FlexLexer; +import com.intellij.psi.tree.IElementType; +import com.intellij.psi.TokenType; +import org.jetbrains.kotlin.ide.konan.psi.NativeDefinitionsTypes; + + +/** + * This class is a scanner generated by + * JFlex 1.7.0 + * from the specification file NativeDefinitions.flex + */ +class NativeDefinitionsLexer implements FlexLexer, NativeDefinitionsTypes { + + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** initial size of the lookahead buffer */ + private static final int ZZ_BUFFERSIZE = 16384; + + /** lexical states */ + public static final int YYINITIAL = 0; + public static final int WAITING_PLATFORM = 2; + public static final int WAITING_VALUE = 4; + public static final int CODE_END = 6; + + /** + * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l + * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l + * at the beginning of a line + * l is of the form l = 2*k, k a non negative integer + */ + private static final int ZZ_LEXSTATE[] = { + 0, 0, 1, 1, 2, 2, 3, 3 + }; + + /** + * Translates characters to character classes + * Chosen bits are [12, 6, 3] + * Total runtime size is 13296 bytes + */ + public static int ZZ_CMAP(int ch) { + return ZZ_CMAP_A[(ZZ_CMAP_Y[(ZZ_CMAP_Z[ch>>9]<<6)|((ch>>3)&0x3f)]<<3)|(ch&0x7)]; + } + + /* The ZZ_CMAP_Z table has 2176 entries */ + static final char ZZ_CMAP_Z[] = zzUnpackCMap( + "\1\0\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13\1\14\1\15\1\16\1\17\1"+ + "\20\5\21\1\22\1\23\1\24\1\21\14\25\1\26\50\25\1\27\2\25\1\30\1\31\1\32\1\33"+ + "\25\25\1\34\20\21\1\35\1\36\1\37\1\40\1\41\1\42\1\43\1\21\1\44\1\45\1\46\1"+ + "\21\1\47\2\21\1\50\4\21\1\25\1\51\1\52\5\21\2\25\1\53\31\21\1\25\1\54\1\21"+ + "\1\55\40\21\1\56\17\21\1\57\1\60\1\61\1\62\13\21\1\63\10\21\123\25\1\64\7"+ + "\25\1\65\1\66\37\21\1\25\1\66\u0582\21\1\67\u017f\21"); + + /* The ZZ_CMAP_Y table has 3584 entries */ + static final char ZZ_CMAP_Y[] = zzUnpackCMap( + "\1\0\1\1\1\0\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13\1\14\1\15\1\16\1"+ + "\17\3\0\1\20\1\21\1\22\1\23\2\0\1\24\3\0\1\24\71\0\1\25\1\0\1\26\1\27\1\30"+ + "\1\31\2\27\16\0\1\32\1\20\1\33\1\34\2\0\1\35\11\0\1\36\21\0\1\35\1\37\23\0"+ + "\1\27\1\40\3\0\1\24\1\41\1\40\4\0\1\42\1\40\4\0\1\36\1\43\1\27\3\0\2\44\1"+ + "\27\1\30\1\45\1\0\1\44\11\0\1\25\14\0\1\46\1\36\1\0\1\47\1\0\1\50\1\27\1\42"+ + "\7\0\1\51\14\0\1\26\1\27\6\0\1\52\1\23\5\0\1\52\2\27\3\0\1\2\10\27\1\47\1"+ + "\30\6\27\1\53\2\0\1\24\14\0\1\54\1\0\2\40\1\55\1\50\1\56\2\0\1\47\1\57\1\60"+ + "\1\50\1\61\1\42\1\62\1\54\1\0\1\2\1\45\1\55\1\63\1\56\2\0\1\47\1\64\1\65\1"+ + "\63\1\66\1\41\1\67\1\70\1\0\1\52\1\27\1\55\1\36\1\35\2\0\1\47\1\71\1\60\1"+ + "\36\1\72\1\73\1\27\1\54\1\0\1\41\1\27\1\55\1\50\1\56\2\0\1\47\1\71\1\60\1"+ + "\50\1\66\1\70\1\62\1\54\1\0\1\41\1\27\1\74\1\75\1\76\1\77\1\100\1\75\1\0\1"+ + "\25\1\75\1\76\1\101\1\27\1\70\1\0\1\27\1\41\1\55\1\32\1\47\2\0\1\47\1\46\1"+ + "\102\1\32\1\76\1\103\1\26\1\54\1\0\2\27\1\74\1\32\1\47\2\0\1\47\1\46\1\60"+ + "\1\32\1\76\1\103\1\33\1\54\1\0\1\104\1\27\1\74\1\32\1\47\4\0\1\51\1\32\1\105"+ + "\1\42\1\27\1\54\1\0\1\27\1\37\1\74\1\0\1\24\1\37\2\0\1\35\1\106\1\24\1\107"+ + "\1\110\1\0\2\27\1\111\1\27\1\40\6\0\1\63\1\0\1\24\1\0\1\26\4\27\1\112\1\113"+ + "\1\53\1\40\1\114\1\74\1\0\1\72\1\110\1\52\1\0\1\60\4\27\1\73\2\27\1\26\1\0"+ + "\1\26\1\115\1\116\1\0\1\40\3\0\1\30\1\40\1\0\1\32\2\0\1\40\3\0\1\30\1\33\7"+ + "\27\11\0\1\26\11\0\1\52\4\0\1\36\1\22\5\0\1\117\51\0\1\76\1\24\1\76\5\0\1"+ + "\76\4\0\1\76\1\24\1\76\1\0\1\24\7\0\1\76\10\0\1\51\4\27\2\0\2\27\12\0\1\30"+ + "\1\27\1\40\114\0\1\50\2\0\1\40\2\0\1\44\11\0\1\75\1\73\1\27\1\0\1\32\1\30"+ + "\1\27\2\0\1\30\1\27\2\0\1\2\1\27\1\0\1\32\1\120\1\27\12\0\1\121\1\122\1\0"+ + "\1\26\3\27\1\122\1\0\1\26\13\0\1\27\5\0\1\44\10\0\1\52\1\27\3\0\1\30\1\0\1"+ + "\2\1\0\1\2\1\70\4\0\1\52\1\30\1\27\5\0\1\2\3\0\1\26\1\0\1\26\4\27\3\0\1\2"+ + "\7\0\1\24\3\0\1\50\1\0\1\26\1\0\1\26\1\42\13\27\11\0\1\2\1\0\1\26\1\27\1\123"+ + "\1\2\1\27\16\0\1\2\1\27\7\0\1\27\1\0\1\102\5\0\1\52\12\27\1\117\3\0\1\24\1"+ + "\27\34\0\1\24\2\27\1\53\42\0\2\52\4\0\2\52\1\0\1\124\3\0\1\52\6\0\1\32\1\110"+ + "\1\125\1\30\1\54\1\2\1\0\1\30\1\125\1\30\1\27\1\123\3\27\1\126\1\27\1\42\1"+ + "\73\1\27\1\127\1\27\1\30\1\37\1\41\1\42\2\27\1\0\1\30\3\0\1\44\2\27\1\0\1"+ + "\30\1\130\1\0\1\73\1\27\1\107\1\37\1\106\1\131\1\31\1\132\1\0\1\60\1\133\1"+ + "\134\2\27\5\0\1\73\116\27\5\0\1\24\5\0\1\24\20\0\1\30\1\123\1\2\1\27\4\0\1"+ + "\36\1\22\7\0\1\42\1\27\1\42\2\0\1\24\1\27\10\24\4\0\5\27\1\42\72\27\1\133"+ + "\3\27\1\40\1\0\1\131\1\30\1\40\11\0\1\24\1\135\1\40\12\0\1\117\1\133\4\0\1"+ + "\52\1\40\12\0\1\24\2\27\3\0\1\44\6\27\170\0\1\52\11\27\71\0\1\30\6\27\21\0"+ + "\1\30\10\27\5\0\1\52\41\0\1\30\3\0\1\2\2\27\6\0\1\53\1\36\3\0\1\42\12\0\1"+ + "\26\3\27\1\42\1\0\1\37\14\0\1\61\1\2\1\27\1\0\1\44\11\27\6\0\2\27\1\73\6\0"+ + "\1\2\1\27\10\0\1\30\1\27\1\0\1\26\3\0\1\45\5\0\1\52\4\0\1\2\1\27\3\0\1\30"+ + "\10\0\1\73\1\42\1\0\1\26\4\27\6\0\1\24\1\27\1\0\1\52\1\0\1\26\2\0\1\24\1\111"+ + "\10\0\1\44\2\27\1\122\2\0\1\136\1\27\3\137\1\27\2\24\22\27\5\0\1\140\1\0\1"+ + "\26\64\0\1\2\1\27\2\0\1\24\1\123\5\0\1\2\40\27\55\0\1\52\15\0\1\26\4\27\1"+ + "\24\1\27\1\123\1\133\1\0\1\47\1\24\1\110\1\141\15\0\1\26\3\27\1\123\54\0\1"+ + "\52\2\27\10\0\1\37\6\0\5\27\1\0\1\30\2\0\2\27\1\24\1\27\1\100\2\27\1\133\3"+ + "\27\1\41\1\32\20\0\1\50\1\127\1\27\1\0\1\26\1\40\2\0\1\63\1\40\2\0\1\44\1"+ + "\70\12\0\1\24\3\37\1\142\1\143\2\27\1\144\1\0\1\46\2\0\1\24\2\0\1\145\1\0"+ + "\1\52\1\0\1\52\4\27\17\0\1\44\10\27\6\0\1\30\20\27\1\22\20\27\3\0\1\30\6\0"+ + "\1\73\5\27\3\0\1\24\2\27\3\0\1\44\6\27\3\0\1\52\4\0\1\2\1\0\1\131\5\27\23"+ + "\0\1\52\1\0\1\26\52\27\1\52\1\47\4\0\1\36\1\146\2\0\1\52\25\27\2\0\1\52\1"+ + "\27\3\0\1\26\10\27\7\0\1\70\10\27\1\147\1\53\1\46\1\40\2\0\1\2\1\63\4\27\3"+ + "\0\1\30\20\27\6\0\1\52\1\27\2\0\1\52\1\27\2\0\1\44\21\27\11\0\1\73\66\27\10"+ + "\0\1\24\3\27\1\70\1\0\2\27\7\0\1\150\2\27\3\0\1\73\1\0\1\26\6\0\1\32\1\0\10"+ + "\27\10\0\1\30\1\27\1\0\1\26\24\27\7\0\1\27\1\0\1\26\46\27\55\0\1\24\22\27"+ + "\14\0\1\44\63\27\5\0\1\24\72\27\7\0\1\73\130\27\10\0\1\30\1\27\5\0\1\24\1"+ + "\27\1\42\2\0\14\27\1\26\153\27\1\133\1\102\2\0\1\51\1\2\3\27\1\20\22\27\1"+ + "\142\67\27\12\0\1\32\10\0\1\32\1\151\1\152\1\0\1\153\1\46\7\0\1\36\1\51\2"+ + "\32\3\0\1\154\1\110\1\37\1\47\51\0\1\52\3\0\1\47\2\0\1\117\3\0\1\117\2\0\1"+ + "\32\3\0\1\32\2\0\1\24\3\0\1\24\3\0\1\47\3\0\1\47\2\0\1\117\1\54\6\0\1\46\3"+ + "\0\1\112\1\40\1\117\1\155\1\107\1\156\1\112\1\124\1\112\2\117\1\67\1\0\1\35"+ + "\1\0\1\2\1\55\1\35\1\0\1\2\50\27\32\0\1\24\5\27\106\0\1\30\1\27\33\0\1\52"+ + "\74\27\1\41\3\27\14\0\20\27\36\0\2\27"); + + /* The ZZ_CMAP_A table has 888 entries */ + static final char ZZ_CMAP_A[] = zzUnpackCMap( + "\11\7\1\4\1\2\1\1\1\5\1\3\6\7\4\0\1\14\1\15\1\0\1\15\1\7\10\0\1\16\1\12\1"+ + "\0\2\7\1\61\1\60\1\63\1\7\1\62\3\7\1\6\2\0\1\6\3\0\2\7\1\42\1\36\1\56\1\52"+ + "\2\7\1\40\2\7\1\54\1\51\1\7\1\27\1\46\1\7\1\65\1\53\7\7\1\0\1\13\2\0\1\57"+ + "\1\0\1\34\1\35\1\17\1\32\1\25\1\64\1\37\1\43\1\23\1\7\1\44\1\24\1\21\1\33"+ + "\1\20\1\22\1\7\1\26\1\31\1\30\1\50\1\11\1\55\1\47\1\45\1\41\4\0\6\7\1\10\2"+ + "\7\2\0\4\7\4\0\1\7\2\0\1\7\7\0\1\7\4\0\1\7\5\0\7\7\1\0\2\7\4\0\4\7\16\0\5"+ + "\7\7\0\1\7\1\0\1\7\1\0\5\7\1\0\2\7\6\0\1\7\1\0\3\7\1\0\1\7\1\0\4\7\1\0\13"+ + "\7\1\0\1\7\2\0\6\7\1\0\7\7\1\0\1\7\15\0\1\7\1\0\2\7\1\0\2\7\1\0\4\7\10\0\1"+ + "\7\4\0\4\7\1\0\4\7\1\0\13\7\2\0\4\7\2\0\11\7\6\0\10\7\2\0\2\7\1\0\3\7\1\0"+ + "\4\7\2\0\6\7\1\0\1\7\3\0\4\7\2\0\5\7\2\0\4\7\5\0\2\7\1\0\4\7\4\0\2\7\1\0\2"+ + "\7\1\0\2\7\1\0\2\7\2\0\1\7\1\0\3\7\2\0\3\7\3\0\4\7\1\0\1\7\7\0\3\7\1\0\2\7"+ + "\1\0\5\7\1\0\3\7\2\0\1\7\11\0\2\7\1\0\6\7\3\0\3\7\1\0\4\7\3\0\2\7\1\0\1\7"+ + "\1\0\2\7\3\0\2\7\3\0\1\7\6\0\3\7\3\0\3\7\5\0\2\7\2\0\2\7\5\0\1\7\1\0\5\7\1"+ + "\0\4\7\1\0\1\7\4\0\1\7\4\0\6\7\1\0\1\7\3\0\2\7\5\0\2\7\1\0\1\7\2\0\2\7\1\0"+ + "\1\7\2\0\1\7\3\0\3\7\1\0\1\7\1\0\1\7\5\0\1\7\1\0\1\7\1\0\1\7\4\0\5\7\1\0\5"+ + "\7\1\0\2\7\4\0\4\7\3\0\1\7\3\0\3\7\5\0\5\7\1\0\1\7\1\0\1\7\1\0\1\7\1\0\1\7"+ + "\2\0\3\7\1\0\2\7\2\1\5\7\5\0\1\7\4\0\1\7\3\0\3\7\1\0\5\7\2\0\1\7\1\0\4\7\1"+ + "\0\1\7\5\0\5\7\4\0\1\7\2\0\2\7\2\0\3\7\2\0\5\7\2\0\6\7\1\0\3\7\1\0\2\7\2\0"+ + "\2\7\1\0\2\7\1\0\2\7\2\0\3\7\3\0\2\7\3\0\2\7\2\0\3\7\4\0\3\7\1\0\2\7\1\0\2"+ + "\7\3\0\1\7\2\0\5\7\1\0\2\7\1\0\3\7\2\0\1\7\4\0\1\7\2\0\2\7\2\0\4\7\1\0\4\7"+ + "\1\0\1\7\1\0\5\7\1\0\4\7\2\0\1\7\1\0\1\7\5\0\1\7\1\0\1\7\1\0\3\7"); + + /** + * Translates DFA states to action switch labels. + */ + private static final int [] ZZ_ACTION = zzUnpackAction(); + + private static final String ZZ_ACTION_PACKED_0 = + "\3\0\1\1\2\2\1\3\2\4\1\5\1\4\1\5"+ + "\1\6\11\2\1\7\1\5\2\10\1\4\1\5\1\1"+ + "\1\4\1\0\14\2\10\11\1\0\1\10\20\2\11\11"+ + "\3\12\17\2\1\13\3\11\1\14\3\11\1\15\1\11"+ + "\17\2\10\11\1\16\2\2\1\17\14\2\2\11\1\20"+ + "\3\11\1\21\1\22\1\23\2\11\1\2\1\24\11\2"+ + "\1\25\2\2\1\26\1\2\1\11\1\27\6\11\1\30"+ + "\3\2\1\31\13\2\4\11\1\32\3\11\1\33\17\2"+ + "\1\34\10\11\1\2\1\35\1\2\1\36\13\2\1\37"+ + "\1\40\1\41\1\42\2\11\1\43\1\11\7\2\1\44"+ + "\5\2\3\11\1\45\1\46\11\2\1\47\4\11\11\2"+ + "\1\11\1\50\3\11\1\51\6\2\1\52\1\2\2\11"+ + "\1\53\1\54\4\2\1\55\2\2\1\56\1\11\6\2"+ + "\1\57\1\60\1\2\1\61\6\2\1\62\14\2\1\63"+ + "\4\2\1\64\11\2\1\65"; + + private static int [] zzUnpackAction() { + int [] result = new int[365]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAction(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); + } + return j; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\66\0\154\0\242\0\330\0\u010e\0\u0144\0\u017a"+ + "\0\u01b0\0\u01e6\0\u021c\0\u0252\0\u0288\0\u02be\0\u02f4\0\u032a"+ + "\0\u0360\0\u0396\0\u03cc\0\u0402\0\u0438\0\u046e\0\u01e6\0\u04a4"+ + "\0\u04da\0\u0510\0\u0546\0\u057c\0\u05b2\0\242\0\u0252\0\u05e8"+ + "\0\u061e\0\u0654\0\u068a\0\u06c0\0\u06f6\0\u072c\0\u0762\0\u0798"+ + "\0\u07ce\0\u0804\0\u083a\0\u0870\0\u08a6\0\u08dc\0\u0912\0\u0948"+ + "\0\u097e\0\u09b4\0\u09ea\0\u057c\0\u0a20\0\u0a56\0\u0a8c\0\u0ac2"+ + "\0\u0af8\0\u0b2e\0\u0b64\0\u0b9a\0\u0bd0\0\u0c06\0\u0c3c\0\u0c72"+ + "\0\u0ca8\0\u0cde\0\u0d14\0\u0d4a\0\u0d80\0\u0db6\0\u0dec\0\u0e22"+ + "\0\u0e58\0\u0e8e\0\u0ec4\0\u0efa\0\u0f30\0\u0f66\0\330\0\u01e6"+ + "\0\u0f9c\0\u0fd2\0\u1008\0\u103e\0\u1074\0\u10aa\0\u10e0\0\u1116"+ + "\0\u114c\0\u1182\0\u11b8\0\u11ee\0\u1224\0\u125a\0\u1290\0\u12c6"+ + "\0\u0870\0\u12fc\0\u1332\0\u1368\0\u139e\0\u13d4\0\u140a\0\u1440"+ + "\0\u0870\0\u1476\0\u14ac\0\u14e2\0\u1518\0\u154e\0\u1584\0\u15ba"+ + "\0\u15f0\0\u1626\0\u165c\0\u1692\0\u16c8\0\u16fe\0\u1734\0\u176a"+ + "\0\u17a0\0\u17d6\0\u180c\0\u1842\0\u1878\0\u18ae\0\u18e4\0\u191a"+ + "\0\u1950\0\u1986\0\u19bc\0\u19f2\0\u1a28\0\u1a5e\0\u1a94\0\u1aca"+ + "\0\u1b00\0\u1b36\0\u1b6c\0\u1ba2\0\u1bd8\0\u1c0e\0\u1c44\0\u1c7a"+ + "\0\u1cb0\0\u1ce6\0\u1d1c\0\u1d52\0\u1d88\0\u1dbe\0\u1df4\0\u1e2a"+ + "\0\u0870\0\u0870\0\u1e60\0\u1e96\0\u1ecc\0\330\0\u1f02\0\u1f38"+ + "\0\u1f6e\0\u1fa4\0\u1fda\0\u2010\0\u2046\0\u207c\0\u20b2\0\330"+ + "\0\u20e8\0\u211e\0\330\0\u2154\0\u218a\0\u0870\0\u21c0\0\u21f6"+ + "\0\u222c\0\u2262\0\u2298\0\u22ce\0\u0870\0\u2304\0\u233a\0\u2370"+ + "\0\330\0\u23a6\0\u23dc\0\u2412\0\u2448\0\u247e\0\u24b4\0\u24ea"+ + "\0\u2520\0\u2556\0\u258c\0\u25c2\0\u25f8\0\u262e\0\u2664\0\u269a"+ + "\0\u0870\0\u26d0\0\u2706\0\u273c\0\u2772\0\u27a8\0\u27de\0\u2814"+ + "\0\u284a\0\u2880\0\u28b6\0\u28ec\0\u2922\0\u2958\0\u298e\0\u29c4"+ + "\0\u29fa\0\u2a30\0\u2a66\0\u2a9c\0\u0870\0\u2ad2\0\u2b08\0\u2b3e"+ + "\0\u2b74\0\u2baa\0\u2be0\0\u2c16\0\u2c4c\0\u2c82\0\330\0\u2cb8"+ + "\0\330\0\u2cee\0\u2d24\0\u2d5a\0\u2d90\0\u2dc6\0\u2dfc\0\u2e32"+ + "\0\u2e68\0\u2e9e\0\u2ed4\0\u2f0a\0\u0870\0\u0870\0\u0870\0\u0870"+ + "\0\u2f40\0\u2f76\0\u0870\0\u2fac\0\u2fe2\0\u3018\0\u304e\0\u3084"+ + "\0\u30ba\0\u30f0\0\u3126\0\330\0\u315c\0\u3192\0\u31c8\0\u31fe"+ + "\0\u3234\0\u326a\0\u32a0\0\u32d6\0\330\0\330\0\u330c\0\u3342"+ + "\0\u3378\0\u33ae\0\u33e4\0\u341a\0\u3450\0\u3486\0\u34bc\0\330"+ + "\0\u34f2\0\u3528\0\u355e\0\u3594\0\u35ca\0\u3600\0\u3636\0\u366c"+ + "\0\u36a2\0\u36d8\0\u370e\0\u3744\0\u377a\0\u37b0\0\u0870\0\u37e6"+ + "\0\u381c\0\u3852\0\330\0\u3888\0\u38be\0\u38f4\0\u392a\0\u3960"+ + "\0\u3996\0\330\0\u39cc\0\u3a02\0\u3a38\0\u0870\0\u0870\0\u3a6e"+ + "\0\u3aa4\0\u3ada\0\u3b10\0\330\0\u3b46\0\u3b7c\0\u0870\0\u3bb2"+ + "\0\u3be8\0\u3c1e\0\u3c54\0\u3c8a\0\u3cc0\0\u3cf6\0\u0870\0\330"+ + "\0\u3d2c\0\330\0\u3d62\0\u3d98\0\u3dce\0\u3e04\0\u3e3a\0\u3e70"+ + "\0\330\0\u3ea6\0\u3edc\0\u3f12\0\u3f48\0\u3f7e\0\u3fb4\0\u3fea"+ + "\0\u4020\0\u4056\0\u408c\0\u40c2\0\u40f8\0\330\0\u412e\0\u4164"+ + "\0\u419a\0\u41d0\0\330\0\u4206\0\u423c\0\u4272\0\u42a8\0\u42de"+ + "\0\u4314\0\u434a\0\u4380\0\u43b6\0\330"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[365]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackRowMap(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); + } + return j; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\5\1\6\2\7\1\10\1\11\1\12\1\5\1\6"+ + "\1\13\1\12\1\14\1\10\1\15\1\16\1\17\2\5"+ + "\1\20\1\5\1\21\1\22\3\5\1\23\1\24\1\25"+ + "\7\5\1\26\22\5\1\12\3\7\1\10\1\11\1\27"+ + "\1\12\1\7\1\10\1\30\1\12\1\10\50\12\1\0"+ + "\1\31\1\32\1\7\1\32\1\33\1\11\2\31\1\32"+ + "\1\33\1\31\1\34\1\10\51\31\4\35\2\36\3\35"+ + "\1\36\2\35\1\36\51\35\2\5\5\0\3\5\1\0"+ + "\1\37\1\0\52\5\1\6\4\7\1\0\1\5\2\6"+ + "\1\0\1\37\1\7\51\5\1\0\5\7\2\0\2\7"+ + "\2\0\1\7\55\0\2\10\3\0\1\10\2\0\1\10"+ + "\52\0\3\7\2\11\2\0\1\7\1\11\2\0\1\11"+ + "\137\0\2\5\2\0\2\10\1\0\2\5\1\13\1\0"+ + "\1\37\1\10\51\5\14\0\1\5\51\0\2\15\2\0"+ + "\62\15\2\5\5\0\3\5\1\0\1\37\1\0\1\5"+ + "\1\40\51\5\5\0\3\5\1\0\1\37\1\0\3\5"+ + "\1\41\47\5\5\0\3\5\1\0\1\37\1\0\17\5"+ + "\1\42\33\5\5\0\3\5\1\0\1\37\1\0\6\5"+ + "\1\43\10\5\1\44\33\5\5\0\3\5\1\0\1\37"+ + "\1\0\16\5\1\45\13\5\1\46\20\5\5\0\3\5"+ + "\1\0\1\37\1\0\13\5\1\47\37\5\5\0\3\5"+ + "\1\0\1\37\1\0\6\5\1\50\1\5\1\51\42\5"+ + "\5\0\3\5\1\0\1\37\1\0\3\5\1\52\47\5"+ + "\5\0\3\5\1\0\1\37\1\0\10\5\1\53\40\5"+ + "\7\0\3\54\5\0\1\54\1\55\1\56\1\54\1\57"+ + "\1\60\7\54\1\61\12\54\1\62\5\54\1\63\10\54"+ + "\2\31\1\0\2\31\1\0\5\31\1\64\53\31\1\32"+ + "\1\7\2\32\1\7\2\31\2\32\1\31\1\64\1\32"+ + "\53\31\1\0\1\31\1\33\1\10\3\31\1\33\1\31"+ + "\1\64\1\33\54\31\1\65\62\31\66\35\2\5\5\0"+ + "\3\5\1\0\1\37\1\0\1\5\1\66\51\5\5\0"+ + "\3\5\1\0\1\37\1\0\4\5\1\67\46\5\5\0"+ + "\3\5\1\0\1\37\1\0\2\5\1\70\50\5\5\0"+ + "\3\5\1\0\1\37\1\0\16\5\1\71\1\5\1\72"+ + "\32\5\5\0\3\5\1\0\1\37\1\0\16\5\1\73"+ + "\34\5\5\0\3\5\1\0\1\37\1\0\13\5\1\74"+ + "\37\5\5\0\3\5\1\0\1\37\1\0\2\5\1\75"+ + "\2\5\1\76\45\5\5\0\3\5\1\0\1\37\1\0"+ + "\11\5\1\77\5\5\1\100\33\5\5\0\3\5\1\0"+ + "\1\37\1\0\14\5\1\101\36\5\5\0\3\5\1\0"+ + "\1\37\1\0\5\5\1\102\45\5\5\0\3\5\1\0"+ + "\1\37\1\0\16\5\1\103\17\5\1\104\14\5\5\0"+ + "\3\5\1\0\1\37\1\0\17\5\1\105\31\5\7\0"+ + "\3\54\5\0\47\54\7\0\3\54\5\0\12\54\1\106"+ + "\34\54\7\0\3\54\5\0\4\54\1\107\10\54\1\110"+ + "\31\54\7\0\3\54\5\0\1\54\1\111\45\54\7\0"+ + "\3\54\5\0\4\54\1\112\42\54\7\0\3\54\5\0"+ + "\7\54\1\113\4\54\1\114\32\54\7\0\3\54\5\0"+ + "\43\54\1\115\3\54\7\0\3\54\5\0\15\54\1\116"+ + "\31\54\5\31\1\0\5\31\1\64\52\31\1\5\1\117"+ + "\1\120\1\121\1\0\1\120\1\0\1\5\1\117\1\5"+ + "\1\0\1\37\1\0\53\5\5\0\3\5\1\0\1\37"+ + "\1\0\5\5\1\122\45\5\5\0\3\5\1\0\1\37"+ + "\1\0\27\5\1\123\23\5\5\0\3\5\1\0\1\37"+ + "\1\0\27\5\1\124\23\5\5\0\3\5\1\0\1\37"+ + "\1\0\11\5\1\125\41\5\5\0\3\5\1\0\1\37"+ + "\1\0\22\5\1\126\30\5\5\0\3\5\1\0\1\37"+ + "\1\0\11\5\1\127\41\5\5\0\3\5\1\0\1\37"+ + "\1\0\7\5\1\130\43\5\5\0\3\5\1\0\1\37"+ + "\1\0\3\5\1\131\47\5\5\0\3\5\1\0\1\37"+ + "\1\0\6\5\1\132\44\5\5\0\3\5\1\0\1\37"+ + "\1\0\13\5\1\133\37\5\5\0\3\5\1\0\1\37"+ + "\1\0\17\5\1\134\33\5\5\0\3\5\1\0\1\37"+ + "\1\0\10\5\1\135\42\5\5\0\3\5\1\0\1\37"+ + "\1\0\36\5\1\136\14\5\5\0\3\5\1\0\1\37"+ + "\1\0\13\5\1\137\37\5\5\0\3\5\1\0\1\37"+ + "\1\0\15\5\1\140\33\5\7\0\3\54\5\0\30\54"+ + "\1\141\16\54\7\0\3\54\5\0\3\54\1\142\10\54"+ + "\1\143\32\54\7\0\3\54\5\0\1\144\46\54\7\0"+ + "\3\54\5\0\12\54\1\145\34\54\7\0\3\54\5\0"+ + "\14\54\1\146\32\54\7\0\3\54\5\0\2\54\1\147"+ + "\44\54\7\0\3\54\5\0\13\54\1\150\33\54\7\0"+ + "\3\54\5\0\44\54\1\151\2\54\7\0\3\54\5\0"+ + "\12\54\1\152\34\54\2\0\1\120\63\0\2\5\5\0"+ + "\3\5\1\0\1\37\1\0\6\5\1\153\44\5\5\0"+ + "\3\5\1\0\1\37\1\0\17\5\1\154\33\5\5\0"+ + "\3\5\1\0\1\37\1\0\10\5\1\155\42\5\5\0"+ + "\3\5\1\0\1\37\1\0\17\5\1\156\33\5\5\0"+ + "\3\5\1\0\1\37\1\0\33\5\1\157\17\5\5\0"+ + "\3\5\1\0\1\37\1\0\30\5\1\160\22\5\5\0"+ + "\3\5\1\0\1\37\1\0\33\5\1\161\17\5\5\0"+ + "\3\5\1\0\1\37\1\0\11\5\1\162\41\5\5\0"+ + "\3\5\1\0\1\37\1\0\2\5\1\163\50\5\5\0"+ + "\3\5\1\0\1\37\1\0\6\5\1\164\44\5\5\0"+ + "\3\5\1\0\1\37\1\0\20\5\1\165\32\5\5\0"+ + "\3\5\1\0\1\37\1\0\16\5\1\166\34\5\5\0"+ + "\3\5\1\0\1\37\1\0\13\5\1\167\37\5\5\0"+ + "\3\5\1\0\1\37\1\0\11\5\1\170\41\5\5\0"+ + "\3\5\1\0\1\37\1\0\10\5\1\171\40\5\7\0"+ + "\3\54\5\0\12\54\1\172\34\54\7\0\3\54\5\0"+ + "\20\54\1\173\26\54\7\0\3\54\5\0\1\54\1\174"+ + "\45\54\7\0\3\54\5\0\40\54\1\175\6\54\7\0"+ + "\3\54\5\0\31\54\1\176\15\54\7\0\3\54\5\0"+ + "\41\54\1\177\1\54\1\200\3\54\7\0\3\54\5\0"+ + "\7\54\1\201\37\54\7\0\3\54\5\0\2\54\1\202"+ + "\44\54\2\5\5\0\3\5\1\0\1\37\1\0\7\5"+ + "\1\203\43\5\5\0\3\5\1\0\1\37\1\0\22\5"+ + "\1\204\30\5\5\0\3\5\1\0\1\37\1\0\11\5"+ + "\1\205\41\5\5\0\3\5\1\0\1\37\1\0\11\5"+ + "\1\206\41\5\5\0\3\5\1\0\1\37\1\0\17\5"+ + "\1\207\33\5\5\0\3\5\1\0\1\37\1\0\31\5"+ + "\1\210\21\5\5\0\3\5\1\0\1\37\1\0\15\5"+ + "\1\211\35\5\5\0\3\5\1\0\1\37\1\0\13\5"+ + "\1\212\37\5\5\0\3\5\1\0\1\37\1\0\13\5"+ + "\1\213\37\5\5\0\3\5\1\0\1\37\1\0\2\5"+ + "\1\214\50\5\5\0\3\5\1\0\1\37\1\0\7\5"+ + "\1\215\43\5\5\0\3\5\1\0\1\37\1\0\15\5"+ + "\1\216\35\5\5\0\3\5\1\0\1\37\1\0\11\5"+ + "\1\217\41\5\5\0\3\5\1\0\1\37\1\0\6\5"+ + "\1\220\44\5\5\0\3\5\1\0\1\37\1\0\11\5"+ + "\1\221\37\5\7\0\3\54\5\0\6\54\1\222\32\54"+ + "\1\223\5\54\7\0\3\54\5\0\36\54\1\224\10\54"+ + "\7\0\3\54\5\0\12\54\1\225\34\54\7\0\3\54"+ + "\5\0\15\54\1\226\12\54\1\227\16\54\7\0\3\54"+ + "\5\0\30\54\1\230\16\54\7\0\3\54\5\0\42\54"+ + "\1\231\4\54\7\0\3\54\5\0\44\54\1\232\2\54"+ + "\7\0\3\54\5\0\1\54\1\233\45\54\7\0\3\54"+ + "\5\0\41\54\1\234\5\54\2\5\5\0\3\5\1\0"+ + "\1\37\1\0\10\5\1\235\42\5\5\0\3\5\1\0"+ + "\1\37\1\0\10\5\1\236\42\5\5\0\3\5\1\0"+ + "\1\37\1\0\12\5\1\237\40\5\5\0\3\5\1\0"+ + "\1\37\1\0\30\5\1\240\22\5\5\0\3\5\1\0"+ + "\1\37\1\0\22\5\1\241\30\5\5\0\3\5\1\0"+ + "\1\37\1\0\3\5\1\242\47\5\5\0\3\5\1\0"+ + "\1\37\1\0\10\5\1\243\42\5\5\0\3\5\1\0"+ + "\1\37\1\0\35\5\1\244\15\5\5\0\3\5\1\0"+ + "\1\37\1\0\41\5\1\245\11\5\5\0\3\5\1\0"+ + "\1\37\1\0\37\5\1\246\13\5\5\0\3\5\1\0"+ + "\1\37\1\0\10\5\1\247\42\5\5\0\3\5\1\0"+ + "\1\37\1\0\14\5\1\250\36\5\5\0\3\5\1\0"+ + "\1\37\1\0\6\5\1\251\44\5\5\0\3\5\1\0"+ + "\1\37\1\0\16\5\1\252\34\5\5\0\3\5\1\0"+ + "\1\37\1\0\14\5\1\253\20\5\1\254\13\5\7\0"+ + "\3\54\5\0\5\54\1\255\41\54\7\0\3\54\5\0"+ + "\42\54\1\256\4\54\7\0\3\54\5\0\40\54\1\257"+ + "\6\54\7\0\3\54\5\0\40\54\1\260\6\54\7\0"+ + "\3\54\5\0\7\54\1\261\37\54\7\0\3\54\5\0"+ + "\43\54\1\262\3\54\7\0\3\54\5\0\40\54\1\263"+ + "\6\54\7\0\3\54\5\0\4\54\1\264\42\54\7\0"+ + "\3\54\5\0\42\54\1\265\4\54\2\5\5\0\3\5"+ + "\1\0\1\37\1\0\11\5\1\266\41\5\5\0\3\5"+ + "\1\0\1\37\1\0\5\5\1\267\45\5\5\0\3\5"+ + "\1\0\1\37\1\0\31\5\1\270\21\5\5\0\3\5"+ + "\1\0\1\37\1\0\10\5\1\271\42\5\5\0\3\5"+ + "\1\0\1\37\1\0\6\5\1\272\44\5\5\0\3\5"+ + "\1\0\1\37\1\0\15\5\1\273\3\5\1\274\14\5"+ + "\1\275\14\5\5\0\3\5\1\0\1\37\1\0\3\5"+ + "\1\276\47\5\5\0\3\5\1\0\1\37\1\0\16\5"+ + "\1\277\34\5\5\0\3\5\1\0\1\37\1\0\6\5"+ + "\1\300\44\5\5\0\3\5\1\0\1\37\1\0\21\5"+ + "\1\301\31\5\5\0\3\5\1\0\1\37\1\0\2\5"+ + "\1\302\50\5\5\0\3\5\1\0\1\37\1\0\22\5"+ + "\1\303\30\5\5\0\3\5\1\0\1\37\1\0\6\5"+ + "\1\304\42\5\7\0\3\54\5\0\41\54\1\305\5\54"+ + "\7\0\3\54\5\0\30\54\1\306\16\54\7\0\3\54"+ + "\5\0\30\54\1\307\16\54\7\0\3\54\5\0\2\54"+ + "\1\310\44\54\7\0\3\54\5\0\44\54\1\311\2\54"+ + "\7\0\3\54\5\0\2\54\1\312\12\54\1\313\12\54"+ + "\1\314\16\54\7\0\3\54\5\0\13\54\1\315\33\54"+ + "\2\5\5\0\3\5\1\0\1\37\1\0\12\5\1\316"+ + "\40\5\5\0\3\5\1\0\1\37\1\0\13\5\1\317"+ + "\37\5\5\0\3\5\1\0\1\37\1\0\17\5\1\320"+ + "\33\5\5\0\3\5\1\0\1\37\1\0\16\5\1\321"+ + "\34\5\5\0\3\5\1\0\1\37\1\0\34\5\1\322"+ + "\1\323\15\5\5\0\3\5\1\0\1\37\1\0\10\5"+ + "\1\324\42\5\5\0\3\5\1\0\1\37\1\0\30\5"+ + "\1\325\22\5\5\0\3\5\1\0\1\37\1\0\11\5"+ + "\1\326\41\5\5\0\3\5\1\0\1\37\1\0\33\5"+ + "\1\327\17\5\5\0\3\5\1\0\1\37\1\0\20\5"+ + "\1\330\32\5\5\0\3\5\1\0\1\37\1\0\10\5"+ + "\1\331\42\5\5\0\3\5\1\0\1\37\1\0\13\5"+ + "\1\332\37\5\5\0\3\5\1\0\1\37\1\0\25\5"+ + "\1\333\25\5\5\0\3\5\1\0\1\37\1\0\7\5"+ + "\1\334\41\5\7\0\3\54\5\0\42\54\1\335\4\54"+ + "\7\0\3\54\5\0\43\54\1\336\3\54\7\0\3\54"+ + "\5\0\43\54\1\337\3\54\7\0\3\54\5\0\41\54"+ + "\1\340\1\54\1\341\3\54\7\0\3\54\5\0\4\54"+ + "\1\342\42\54\7\0\3\54\5\0\7\54\1\343\37\54"+ + "\7\0\3\54\5\0\43\54\1\344\3\54\7\0\3\54"+ + "\5\0\40\54\1\345\6\54\2\5\5\0\3\5\1\0"+ + "\1\37\1\0\5\5\1\346\45\5\5\0\3\5\1\0"+ + "\1\37\1\0\14\5\1\347\36\5\5\0\3\5\1\0"+ + "\1\37\1\0\13\5\1\350\37\5\5\0\3\5\1\0"+ + "\1\37\1\0\13\5\1\351\37\5\5\0\3\5\1\0"+ + "\1\37\1\0\17\5\1\352\33\5\5\0\3\5\1\0"+ + "\1\37\1\0\33\5\1\353\17\5\5\0\3\5\1\0"+ + "\1\37\1\0\5\5\1\354\45\5\5\0\3\5\1\0"+ + "\1\37\1\0\14\5\1\355\36\5\5\0\3\5\1\0"+ + "\1\37\1\0\40\5\1\356\12\5\5\0\3\5\1\0"+ + "\1\37\1\0\4\5\1\357\46\5\5\0\3\5\1\0"+ + "\1\37\1\0\11\5\1\360\41\5\5\0\3\5\1\0"+ + "\1\37\1\0\14\5\1\361\36\5\5\0\3\5\1\0"+ + "\1\37\1\0\41\5\1\362\11\5\5\0\3\5\1\0"+ + "\1\37\1\0\3\5\1\363\47\5\5\0\3\5\1\0"+ + "\1\37\1\0\13\5\1\364\35\5\7\0\3\54\5\0"+ + "\44\54\1\365\2\54\7\0\3\54\5\0\44\54\1\366"+ + "\2\54\7\0\3\54\5\0\42\54\1\367\4\54\7\0"+ + "\3\54\5\0\44\54\1\370\2\54\7\0\3\54\5\0"+ + "\3\54\1\371\43\54\7\0\3\54\5\0\2\54\1\372"+ + "\44\54\7\0\3\54\5\0\44\54\1\373\2\54\7\0"+ + "\3\54\5\0\15\54\1\374\31\54\2\5\5\0\3\5"+ + "\1\0\1\37\1\0\13\5\1\375\37\5\5\0\3\5"+ + "\1\0\1\37\1\0\26\5\1\376\24\5\5\0\3\5"+ + "\1\0\1\37\1\0\2\5\1\377\50\5\5\0\3\5"+ + "\1\0\1\37\1\0\16\5\1\u0100\34\5\5\0\3\5"+ + "\1\0\1\37\1\0\10\5\1\u0101\42\5\5\0\3\5"+ + "\1\0\1\37\1\0\13\5\1\u0102\37\5\5\0\3\5"+ + "\1\0\1\37\1\0\17\5\1\u0103\33\5\5\0\3\5"+ + "\1\0\1\37\1\0\14\5\1\u0104\36\5\5\0\3\5"+ + "\1\0\1\37\1\0\17\5\1\u0105\33\5\5\0\3\5"+ + "\1\0\1\37\1\0\6\5\1\u0106\44\5\5\0\3\5"+ + "\1\0\1\37\1\0\16\5\1\u0107\34\5\5\0\3\5"+ + "\1\0\1\37\1\0\16\5\1\u0108\34\5\5\0\3\5"+ + "\1\0\1\37\1\0\10\5\1\u0109\40\5\7\0\3\54"+ + "\5\0\12\54\1\u010a\34\54\7\0\3\54\5\0\41\54"+ + "\1\u010b\5\54\7\0\3\54\5\0\7\54\1\u010c\37\54"+ + "\2\5\5\0\3\5\1\0\1\37\1\0\14\5\1\u010d"+ + "\36\5\5\0\3\5\1\0\1\37\1\0\14\5\1\u010e"+ + "\36\5\5\0\3\5\1\0\1\37\1\0\11\5\1\u010f"+ + "\41\5\5\0\3\5\1\0\1\37\1\0\2\5\1\u0110"+ + "\50\5\5\0\3\5\1\0\1\37\1\0\16\5\1\u0111"+ + "\34\5\5\0\3\5\1\0\1\37\1\0\10\5\1\u0112"+ + "\42\5\5\0\3\5\1\0\1\37\1\0\11\5\1\u0113"+ + "\41\5\5\0\3\5\1\0\1\37\1\0\11\5\1\u0114"+ + "\41\5\5\0\3\5\1\0\1\37\1\0\22\5\1\u0115"+ + "\30\5\5\0\3\5\1\0\1\37\1\0\33\5\1\u0116"+ + "\17\5\5\0\2\5\1\u0117\1\0\1\37\1\0\53\5"+ + "\5\0\3\5\1\0\1\37\1\0\11\5\1\u0118\37\5"+ + "\7\0\3\54\5\0\6\54\1\u0119\32\54\1\u011a\5\54"+ + "\7\0\3\54\5\0\42\54\1\u011b\4\54\7\0\3\54"+ + "\5\0\2\54\1\u011c\44\54\2\5\5\0\3\5\1\0"+ + "\1\37\1\0\3\5\1\u011d\47\5\5\0\3\5\1\0"+ + "\1\37\1\0\13\5\1\u011e\37\5\5\0\3\5\1\0"+ + "\1\37\1\0\15\5\1\u011f\35\5\5\0\3\5\1\0"+ + "\1\37\1\0\4\5\1\u0120\46\5\5\0\3\5\1\0"+ + "\1\37\1\0\15\5\1\u0121\35\5\5\0\3\5\1\0"+ + "\1\37\1\0\6\5\1\u0122\44\5\5\0\3\5\1\0"+ + "\1\37\1\0\16\5\1\u0123\34\5\5\0\3\5\1\0"+ + "\1\37\1\0\4\5\1\u0124\46\5\5\0\3\5\1\0"+ + "\1\37\1\0\10\5\1\u0125\40\5\7\0\3\54\5\0"+ + "\5\54\1\u0126\41\54\7\0\3\54\5\0\42\54\1\u0127"+ + "\4\54\7\0\3\54\5\0\40\54\1\u0128\6\54\7\0"+ + "\3\54\5\0\41\54\1\u0129\1\54\1\u012a\3\54\2\5"+ + "\5\0\3\5\1\0\1\37\1\0\14\5\1\u012b\36\5"+ + "\5\0\3\5\1\0\1\37\1\0\6\5\1\u012c\44\5"+ + "\5\0\3\5\1\0\1\37\1\0\10\5\1\u012d\42\5"+ + "\5\0\3\5\1\0\1\37\1\0\37\5\1\u012e\13\5"+ + "\5\0\3\5\1\0\1\37\1\0\21\5\1\u012f\31\5"+ + "\5\0\3\5\1\0\1\37\1\0\10\5\1\u0130\42\5"+ + "\5\0\3\5\1\0\1\37\1\0\17\5\1\u0131\33\5"+ + "\5\0\3\5\1\0\1\37\1\0\14\5\1\u0132\36\5"+ + "\5\0\3\5\1\0\1\37\1\0\11\5\1\u0133\37\5"+ + "\7\0\3\54\5\0\41\54\1\u0134\5\54\7\0\3\54"+ + "\5\0\24\54\1\u0135\22\54\7\0\3\54\5\0\42\54"+ + "\1\u0136\4\54\7\0\3\54\5\0\44\54\1\u0137\2\54"+ + "\2\5\5\0\3\5\1\0\1\37\1\0\3\5\1\u0138"+ + "\47\5\5\0\3\5\1\0\1\37\1\0\16\5\1\u0139"+ + "\34\5\5\0\3\5\1\0\1\37\1\0\6\5\1\u013a"+ + "\44\5\5\0\3\5\1\0\1\37\1\0\10\5\1\u013b"+ + "\42\5\5\0\3\5\1\0\1\37\1\0\14\5\1\u013c"+ + "\36\5\5\0\3\5\1\0\1\37\1\0\13\5\1\u013d"+ + "\37\5\5\0\3\5\1\0\1\37\1\0\14\5\1\u013e"+ + "\34\5\7\0\3\54\5\0\42\54\1\u013f\4\54\7\0"+ + "\3\54\5\0\45\54\1\u0140\1\54\2\5\5\0\3\5"+ + "\1\0\1\37\1\0\16\5\1\u0141\34\5\5\0\3\5"+ + "\1\0\1\37\1\0\13\5\1\u0142\37\5\5\0\3\5"+ + "\1\0\1\37\1\0\20\5\1\u0143\32\5\5\0\3\5"+ + "\1\0\1\37\1\0\2\5\1\u0144\50\5\5\0\3\5"+ + "\1\0\1\37\1\0\10\5\1\u0145\42\5\5\0\3\5"+ + "\1\0\1\37\1\0\6\5\1\u0146\42\5\7\0\3\54"+ + "\5\0\3\54\1\u0147\43\54\2\5\5\0\3\5\1\0"+ + "\1\37\1\0\14\5\1\u0148\36\5\5\0\3\5\1\0"+ + "\1\37\1\0\34\5\1\u0149\16\5\5\0\3\5\1\0"+ + "\1\37\1\0\14\5\1\u014a\36\5\5\0\3\5\1\0"+ + "\1\37\1\0\7\5\1\u014b\43\5\5\0\3\5\1\0"+ + "\1\37\1\0\15\5\1\u014c\35\5\5\0\3\5\1\0"+ + "\1\37\1\0\3\5\1\u014d\47\5\5\0\3\5\1\0"+ + "\1\37\1\0\3\5\1\u014e\47\5\5\0\3\5\1\0"+ + "\1\37\1\0\17\5\1\u014f\33\5\5\0\3\5\1\0"+ + "\1\37\1\0\23\5\1\u0150\27\5\5\0\3\5\1\0"+ + "\1\37\1\0\16\5\1\u0151\34\5\5\0\3\5\1\0"+ + "\1\37\1\0\15\5\1\u0152\35\5\5\0\3\5\1\0"+ + "\1\37\1\0\11\5\1\u0153\41\5\5\0\3\5\1\0"+ + "\1\37\1\0\16\5\1\u0154\34\5\5\0\3\5\1\0"+ + "\1\37\1\0\33\5\1\u0155\17\5\5\0\3\5\1\0"+ + "\1\37\1\0\17\5\1\u0156\33\5\5\0\3\5\1\0"+ + "\1\37\1\0\6\5\1\u0157\44\5\5\0\3\5\1\0"+ + "\1\37\1\0\7\5\1\u0158\43\5\5\0\3\5\1\0"+ + "\1\37\1\0\13\5\1\u0159\37\5\5\0\3\5\1\0"+ + "\1\37\1\0\13\5\1\u015a\37\5\5\0\3\5\1\0"+ + "\1\37\1\0\10\5\1\u015b\42\5\5\0\3\5\1\0"+ + "\1\37\1\0\6\5\1\u015c\44\5\5\0\3\5\1\0"+ + "\1\37\1\0\6\5\1\u015d\44\5\5\0\3\5\1\0"+ + "\1\37\1\0\14\5\1\u015e\36\5\5\0\3\5\1\0"+ + "\1\37\1\0\3\5\1\u015f\47\5\5\0\3\5\1\0"+ + "\1\37\1\0\17\5\1\u0160\33\5\5\0\3\5\1\0"+ + "\1\37\1\0\16\5\1\u0161\34\5\5\0\3\5\1\0"+ + "\1\37\1\0\7\5\1\u0162\43\5\5\0\3\5\1\0"+ + "\1\37\1\0\14\5\1\u0163\36\5\5\0\3\5\1\0"+ + "\1\37\1\0\6\5\1\u0164\44\5\5\0\3\5\1\0"+ + "\1\37\1\0\24\5\1\u0165\26\5\5\0\3\5\1\0"+ + "\1\37\1\0\10\5\1\u0166\42\5\5\0\3\5\1\0"+ + "\1\37\1\0\11\5\1\u0167\41\5\5\0\3\5\1\0"+ + "\1\37\1\0\25\5\1\u0168\25\5\5\0\3\5\1\0"+ + "\1\37\1\0\26\5\1\u0169\24\5\5\0\3\5\1\0"+ + "\1\37\1\0\10\5\1\u016a\42\5\5\0\3\5\1\0"+ + "\1\37\1\0\2\5\1\u016b\50\5\5\0\3\5\1\0"+ + "\1\37\1\0\27\5\1\u016c\23\5\5\0\3\5\1\0"+ + "\1\37\1\0\14\5\1\u016d\34\5"; + + private static int [] zzUnpackTrans() { + int [] result = new int[17388]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackTrans(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do result[j++] = value; while (--count > 0); + } + return j; + } + + + /* error codes */ + private static final int ZZ_UNKNOWN_ERROR = 0; + private static final int ZZ_NO_MATCH = 1; + private static final int ZZ_PUSHBACK_2BIG = 2; + + /* error messages for the codes above */ + private static final String[] ZZ_ERROR_MSG = { + "Unknown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; + + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); + + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\3\0\6\1\1\11\14\1\1\11\7\1\1\0\24\1"+ + "\1\0\33\1\1\11\u011d\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[365]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAttribute(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); + } + return j; + } + + /** the input device */ + private java.io.Reader zzReader; + + /** the current state of the DFA */ + private int zzState; + + /** the current lexical state */ + private int zzLexicalState = YYINITIAL; + + /** this buffer contains the current text to be matched and is + the source of the yytext() string */ + private CharSequence zzBuffer = ""; + + /** the textposition at the last accepting state */ + private int zzMarkedPos; + + /** the current text position in the buffer */ + private int zzCurrentPos; + + /** startRead marks the beginning of the yytext() string in the buffer */ + private int zzStartRead; + + /** endRead marks the last character in the buffer, that has been read + from input */ + private int zzEndRead; + + /** + * zzAtBOL == true <=> the scanner is currently at the beginning of a line + */ + private boolean zzAtBOL = true; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /** denotes if the user-EOF-code has already been executed */ + private boolean zzEOFDone; + + + /** + * Creates a new scanner + * + * @param in the java.io.Reader to read input from. + */ + NativeDefinitionsLexer(java.io.Reader in) { + this.zzReader = in; + } + + + /** + * Unpacks the compressed character translation table. + * + * @param packed the packed character translation table + * @return the unpacked character translation table + */ + private static char [] zzUnpackCMap(String packed) { + int size = 0; + for (int i = 0, length = packed.length(); i < length; i += 2) { + size += packed.charAt(i); + } + char[] map = new char[size]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < packed.length()) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); + } + return map; + } + + public final int getTokenStart() { + return zzStartRead; + } + + public final int getTokenEnd() { + return getTokenStart() + yylength(); + } + + public void reset(CharSequence buffer, int start, int end, int initialState) { + zzBuffer = buffer; + zzCurrentPos = zzMarkedPos = zzStartRead = start; + zzAtEOF = false; + zzAtBOL = true; + zzEndRead = end; + yybegin(initialState); + } + + /** + * Refills the input buffer. + * + * @return false, iff there was new input. + * + * @exception java.io.IOException if any I/O-Error occurs + */ + private boolean zzRefill() throws java.io.IOException { + return true; + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + public final void yybegin(int newState) { + zzLexicalState = newState; + } + + + /** + * Returns the text matched by the current regular expression. + */ + public final CharSequence yytext() { + return zzBuffer.subSequence(zzStartRead, zzMarkedPos); + } + + + /** + * Returns the character at position pos from the + * matched text. + * + * It is equivalent to yytext().charAt(pos), but faster + * + * @param pos the position of the character to fetch. + * A value from 0 to yylength()-1. + * + * @return the character at position pos + */ + public final char yycharat(int pos) { + return zzBuffer.charAt(zzStartRead+pos); + } + + + /** + * Returns the length of the matched text region. + */ + public final int yylength() { + return zzMarkedPos-zzStartRead; + } + + + /** + * Reports an error that occured while scanning. + * + * In a wellformed scanner (no or only correct usage of + * yypushback(int) and a match-all fallback rule) this method + * will only be called with things that "Can't Possibly Happen". + * If this method is called, something is seriously wrong + * (e.g. a JFlex bug producing a faulty scanner etc.). + * + * Usual syntax/scanner level error handling should be done + * in error fallback rules. + * + * @param errorCode the code of the errormessage to display + */ + private void zzScanError(int errorCode) { + String message; + try { + message = ZZ_ERROR_MSG[errorCode]; + } + catch (ArrayIndexOutOfBoundsException e) { + message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; + } + + throw new Error(message); + } + + + /** + * Pushes the specified amount of characters back into the input stream. + * + * They will be read again by then next call of the scanning method + * + * @param number the number of characters to be read again. + * This number must not be greater than yylength()! + */ + public void yypushback(int number) { + if ( number > yylength() ) + zzScanError(ZZ_PUSHBACK_2BIG); + + zzMarkedPos -= number; + } + + + /** + * Contains user EOF-code, which will be executed exactly once, + * when the end of file is reached + */ + private void zzDoEOF() { + if (!zzEOFDone) { + zzEOFDone = true; + + } + } + + + /** + * Resumes scanning until the next regular expression is matched, + * the end of input is encountered or an I/O-Error occurs. + * + * @return the next token + * @exception java.io.IOException if any I/O-Error occurs + */ + public IElementType advance() throws java.io.IOException { + int zzInput; + int zzAction; + + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + CharSequence zzBufferL = zzBuffer; + + int [] zzTransL = ZZ_TRANS; + int [] zzRowMapL = ZZ_ROWMAP; + int [] zzAttrL = ZZ_ATTRIBUTE; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = ZZ_LEXSTATE[zzLexicalState]; + + // set up zzAction for empty match case: + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + } + + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) { + zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL/*, zzEndReadL*/); + zzCurrentPosL += Character.charCount(zzInput); + } + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } + else { + zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL/*, zzEndReadL*/); + zzCurrentPosL += Character.charCount(zzInput); + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + ZZ_CMAP(zzInput) ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + zzDoEOF(); + return null; + } + else { + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 1: + { return CODE_CHARS; + } + // fall through + case 54: break; + case 2: + { yybegin(WAITING_PLATFORM); return UNKNOWN_KEY; + } + // fall through + case 55: break; + case 3: + { yybegin(YYINITIAL); return TokenType.WHITE_SPACE; + } + // fall through + case 56: break; + case 4: + { return TokenType.WHITE_SPACE; + } + // fall through + case 57: break; + case 5: + { yybegin(YYINITIAL); return TokenType.BAD_CHARACTER; + } + // fall through + case 58: break; + case 6: + { return COMMENT; + } + // fall through + case 59: break; + case 7: + { yybegin(WAITING_VALUE); return SEPARATOR; + } + // fall through + case 60: break; + case 8: + { yybegin(YYINITIAL); return VALUE; + } + // fall through + case 61: break; + case 9: + { return UNKNOWN_PLATFORM; + } + // fall through + case 62: break; + case 10: + { yybegin(CODE_END); return DELIM; + } + // fall through + case 63: break; + case 11: + { return OSX; + } + // fall through + case 64: break; + case 12: + { return IOS; + } + // fall through + case 65: break; + case 13: + { return X64; + } + // fall through + case 66: break; + case 14: + { return WASM; + } + // fall through + case 67: break; + case 15: + { yybegin(WAITING_PLATFORM); return LINKER; + } + // fall through + case 68: break; + case 16: + { return MINGW; + } + // fall through + case 69: break; + case 17: + { return LINUX; + } + // fall through + case 70: break; + case 18: + { return ARM32; + } + // fall through + case 71: break; + case 19: + { return ARM64; + } + // fall through + case 72: break; + case 20: + { yybegin(WAITING_PLATFORM); return PACKAGE; + } + // fall through + case 73: break; + case 21: + { yybegin(WAITING_PLATFORM); return DEPENDS; + } + // fall through + case 74: break; + case 22: + { yybegin(WAITING_PLATFORM); return HEADERS; + } + // fall through + case 75: break; + case 23: + { return MIPS32; + } + // fall through + case 76: break; + case 24: + { return WASM32; + } + // fall through + case 77: break; + case 25: + { yybegin(WAITING_PLATFORM); return LANGUAGE; + } + // fall through + case 78: break; + case 26: + { return IOS_X64; + } + // fall through + case 79: break; + case 27: + { return ANDROID; + } + // fall through + case 80: break; + case 28: + { return MIPSEL32; + } + // fall through + case 81: break; + case 29: + { yybegin(WAITING_PLATFORM); return LINKER_OPTS; + } + // fall through + case 82: break; + case 30: + { yybegin(WAITING_PLATFORM); return ENTRY_POINT; + } + // fall through + case 83: break; + case 31: + { return MINGW_X64; + } + // fall through + case 84: break; + case 32: + { return MACOS_X64; + } + // fall through + case 85: break; + case 33: + { return IOS_ARM32; + } + // fall through + case 86: break; + case 34: + { return IOS_ARM64; + } + // fall through + case 87: break; + case 35: + { return LINUX_X64; + } + // fall through + case 88: break; + case 36: + { yybegin(WAITING_PLATFORM); return STRICT_ENUMS; + } + // fall through + case 89: break; + case 37: + { yybegin(WAITING_PLATFORM); return COMPILER_OPTS; + } + // fall through + case 90: break; + case 38: + { yybegin(WAITING_PLATFORM); return LIBRARY_PATHS; + } + // fall through + case 91: break; + case 39: + { yybegin(WAITING_PLATFORM); return HEADER_FILTER; + } + // fall through + case 92: break; + case 40: + { return LINUX_MIPS32; + } + // fall through + case 93: break; + case 41: + { yybegin(WAITING_PLATFORM); return EXCLUDED_MACROS; + } + // fall through + case 94: break; + case 42: + { yybegin(WAITING_PLATFORM); return NON_STRICT_ENUMS; + } + // fall through + case 95: break; + case 43: + { return ANDROID_ARM32; + } + // fall through + case 96: break; + case 44: + { return ANDROID_ARM64; + } + // fall through + case 97: break; + case 45: + { yybegin(WAITING_PLATFORM); return STATIC_LIBRARIES; + } + // fall through + case 98: break; + case 46: + { return LINUX_MIPSEL32; + } + // fall through + case 99: break; + case 47: + { return LINUX_ARM32_HFP; + } + // fall through + case 100: break; + case 48: + { yybegin(WAITING_PLATFORM); return EXCLUDED_FUNCTIONS; + } + // fall through + case 101: break; + case 49: + { yybegin(WAITING_PLATFORM); return EXCLUDE_SYSTEM_LIBS; + } + // fall through + case 102: break; + case 50: + { yybegin(WAITING_PLATFORM); return NO_STRING_CONVERSION; + } + // fall through + case 103: break; + case 51: + { yybegin(WAITING_PLATFORM); return EXCLUDE_DEPENDENT_MODULES; + } + // fall through + case 104: break; + case 52: + { yybegin(WAITING_PLATFORM); return EXPORT_FORWARD_DECLARATIONS; + } + // fall through + case 105: break; + case 53: + { yybegin(WAITING_PLATFORM); return DISABLE_DESIGNATED_INITIALIZER_CHECKS; + } + // fall through + case 106: break; + default: + zzScanError(ZZ_NO_MATCH); + } + } + } + } + + +} diff --git a/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/NativeDefinitionsParser.java b/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/NativeDefinitionsParser.java new file mode 100644 index 00000000000..8f8aed0c0fc --- /dev/null +++ b/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/NativeDefinitionsParser.java @@ -0,0 +1,395 @@ +// This is a generated file. Not intended for manual editing. +package org.jetbrains.kotlin.ide.konan; + +import com.intellij.lang.PsiBuilder; +import com.intellij.lang.PsiBuilder.Marker; +import static org.jetbrains.kotlin.ide.konan.psi.NativeDefinitionsTypes.*; +import static com.intellij.lang.parser.GeneratedParserUtilBase.*; +import com.intellij.psi.tree.IElementType; +import com.intellij.lang.ASTNode; +import com.intellij.psi.tree.TokenSet; +import com.intellij.lang.PsiParser; +import com.intellij.lang.LightPsiParser; + +@SuppressWarnings({"SimplifiableIfStatement", "UnusedAssignment"}) +public class NativeDefinitionsParser implements PsiParser, LightPsiParser { + + public ASTNode parse(IElementType t, PsiBuilder b) { + parseLight(t, b); + return b.getTreeBuilt(); + } + + public void parseLight(IElementType t, PsiBuilder b) { + boolean r; + b = adapt_builder_(t, b, this, null); + Marker m = enter_section_(b, 0, _COLLAPSE_, null); + if (t == BOOL_KEY) { + r = boolKey(b, 0); + } + else if (t == BOOL_VALUE) { + r = boolValue(b, 0); + } + else if (t == CODE) { + r = code(b, 0); + } + else if (t == STRING_KEY) { + r = stringKey(b, 0); + } + else if (t == STRING_VALUE) { + r = stringValue(b, 0); + } + else if (t == STRINGS_KEY) { + r = stringsKey(b, 0); + } + else if (t == STRINGS_VALUE) { + r = stringsValue(b, 0); + } + else { + r = parse_root_(t, b, 0); + } + exit_section_(b, 0, m, t, r, true, TRUE_CONDITION); + } + + protected boolean parse_root_(IElementType t, PsiBuilder b, int l) { + return root(b, l + 1); + } + + /* ********************************************************** */ + // boolKey platform_? SEPARATOR boolValue + static boolean boolDefinition_(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "boolDefinition_")) return false; + boolean r; + Marker m = enter_section_(b); + r = boolKey(b, l + 1); + r = r && boolDefinition__1(b, l + 1); + r = r && consumeToken(b, SEPARATOR); + r = r && boolValue(b, l + 1); + exit_section_(b, m, null, r); + return r; + } + + // platform_? + private static boolean boolDefinition__1(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "boolDefinition__1")) return false; + platform_(b, l + 1); + return true; + } + + /* ********************************************************** */ + // DISABLE_DESIGNATED_INITIALIZER_CHECKS | EXCLUDE_DEPENDENT_MODULES | EXCLUDE_SYSTEM_LIBS + public static boolean boolKey(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "boolKey")) return false; + boolean r; + Marker m = enter_section_(b, l, _NONE_, BOOL_KEY, ""); + r = consumeToken(b, DISABLE_DESIGNATED_INITIALIZER_CHECKS); + if (!r) r = consumeToken(b, EXCLUDE_DEPENDENT_MODULES); + if (!r) r = consumeToken(b, EXCLUDE_SYSTEM_LIBS); + exit_section_(b, l, m, r, false, null); + return r; + } + + /* ********************************************************** */ + // VALUE + public static boolean boolValue(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "boolValue")) return false; + if (!nextTokenIs(b, VALUE)) return false; + boolean r; + Marker m = enter_section_(b); + r = consumeToken(b, VALUE); + exit_section_(b, m, BOOL_VALUE, r); + return r; + } + + /* ********************************************************** */ + // CODE_CHARS + public static boolean code(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "code")) return false; + if (!nextTokenIs(b, CODE_CHARS)) return false; + boolean r; + Marker m = enter_section_(b); + r = consumeToken(b, CODE_CHARS); + exit_section_(b, m, CODE, r); + return r; + } + + /* ********************************************************** */ + // COMMENT | boolDefinition_ | stringDefinition_ | stringsDefinition_ | incorrectDefinition_ + static boolean definitionItem_(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "definitionItem_")) return false; + boolean r; + r = consumeToken(b, COMMENT); + if (!r) r = boolDefinition_(b, l + 1); + if (!r) r = stringDefinition_(b, l + 1); + if (!r) r = stringsDefinition_(b, l + 1); + if (!r) r = incorrectDefinition_(b, l + 1); + return r; + } + + /* ********************************************************** */ + // LANGUAGE | LINKER + static boolean extensibleStringKey_(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "extensibleStringKey_")) return false; + if (!nextTokenIs(b, "", LANGUAGE, LINKER)) return false; + boolean r; + r = consumeToken(b, LANGUAGE); + if (!r) r = consumeToken(b, LINKER); + return r; + } + + /* ********************************************************** */ + // UNKNOWN_KEY? UNKNOWN_PLATFORM? SEPARATOR VALUE? | UNKNOWN_KEY UNKNOWN_PLATFORM? + static boolean incorrectDefinition_(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "incorrectDefinition_")) return false; + boolean r; + Marker m = enter_section_(b); + r = incorrectDefinition__0(b, l + 1); + if (!r) r = incorrectDefinition__1(b, l + 1); + exit_section_(b, m, null, r); + return r; + } + + // UNKNOWN_KEY? UNKNOWN_PLATFORM? SEPARATOR VALUE? + private static boolean incorrectDefinition__0(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "incorrectDefinition__0")) return false; + boolean r; + Marker m = enter_section_(b); + r = incorrectDefinition__0_0(b, l + 1); + r = r && incorrectDefinition__0_1(b, l + 1); + r = r && consumeToken(b, SEPARATOR); + r = r && incorrectDefinition__0_3(b, l + 1); + exit_section_(b, m, null, r); + return r; + } + + // UNKNOWN_KEY? + private static boolean incorrectDefinition__0_0(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "incorrectDefinition__0_0")) return false; + consumeToken(b, UNKNOWN_KEY); + return true; + } + + // UNKNOWN_PLATFORM? + private static boolean incorrectDefinition__0_1(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "incorrectDefinition__0_1")) return false; + consumeToken(b, UNKNOWN_PLATFORM); + return true; + } + + // VALUE? + private static boolean incorrectDefinition__0_3(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "incorrectDefinition__0_3")) return false; + consumeToken(b, VALUE); + return true; + } + + // UNKNOWN_KEY UNKNOWN_PLATFORM? + private static boolean incorrectDefinition__1(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "incorrectDefinition__1")) return false; + boolean r; + Marker m = enter_section_(b); + r = consumeToken(b, UNKNOWN_KEY); + r = r && incorrectDefinition__1_1(b, l + 1); + exit_section_(b, m, null, r); + return r; + } + + // UNKNOWN_PLATFORM? + private static boolean incorrectDefinition__1_1(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "incorrectDefinition__1_1")) return false; + consumeToken(b, UNKNOWN_PLATFORM); + return true; + } + + /* ********************************************************** */ + // ANDROID | ANDROID_ARM32 | ANDROID_ARM64 | ARM32 | ARM64 | IOS | IOS_ARM32 + // | IOS_ARM64 | IOS_X64 | LINUX | LINUX_ARM32_HFP | LINUX_MIPS32 + // | LINUX_MIPSEL32 | LINUX_X64 | MACOS_X64 | MINGW | MINGW_X64 | MIPS32 + // | MIPSEL32 | OSX | WASM | WASM32 | X64 | UNKNOWN_PLATFORM + static boolean platform_(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "platform_")) return false; + boolean r; + r = consumeToken(b, ANDROID); + if (!r) r = consumeToken(b, ANDROID_ARM32); + if (!r) r = consumeToken(b, ANDROID_ARM64); + if (!r) r = consumeToken(b, ARM32); + if (!r) r = consumeToken(b, ARM64); + if (!r) r = consumeToken(b, IOS); + if (!r) r = consumeToken(b, IOS_ARM32); + if (!r) r = consumeToken(b, IOS_ARM64); + if (!r) r = consumeToken(b, IOS_X64); + if (!r) r = consumeToken(b, LINUX); + if (!r) r = consumeToken(b, LINUX_ARM32_HFP); + if (!r) r = consumeToken(b, LINUX_MIPS32); + if (!r) r = consumeToken(b, LINUX_MIPSEL32); + if (!r) r = consumeToken(b, LINUX_X64); + if (!r) r = consumeToken(b, MACOS_X64); + if (!r) r = consumeToken(b, MINGW); + if (!r) r = consumeToken(b, MINGW_X64); + if (!r) r = consumeToken(b, MIPS32); + if (!r) r = consumeToken(b, MIPSEL32); + if (!r) r = consumeToken(b, OSX); + if (!r) r = consumeToken(b, WASM); + if (!r) r = consumeToken(b, WASM32); + if (!r) r = consumeToken(b, X64); + if (!r) r = consumeToken(b, UNKNOWN_PLATFORM); + return r; + } + + /* ********************************************************** */ + // definitionItem_* (DELIM code)? + static boolean root(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "root")) return false; + boolean r; + Marker m = enter_section_(b); + r = root_0(b, l + 1); + r = r && root_1(b, l + 1); + exit_section_(b, m, null, r); + return r; + } + + // definitionItem_* + private static boolean root_0(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "root_0")) return false; + while (true) { + int c = current_position_(b); + if (!definitionItem_(b, l + 1)) break; + if (!empty_element_parsed_guard_(b, "root_0", c)) break; + } + return true; + } + + // (DELIM code)? + private static boolean root_1(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "root_1")) return false; + root_1_0(b, l + 1); + return true; + } + + // DELIM code + private static boolean root_1_0(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "root_1_0")) return false; + boolean r; + Marker m = enter_section_(b); + r = consumeToken(b, DELIM); + r = r && code(b, l + 1); + exit_section_(b, m, null, r); + return r; + } + + /* ********************************************************** */ + // stringKey SEPARATOR stringValue + static boolean stringDefinition_(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "stringDefinition_")) return false; + boolean r; + Marker m = enter_section_(b); + r = stringKey(b, l + 1); + r = r && consumeToken(b, SEPARATOR); + r = r && stringValue(b, l + 1); + exit_section_(b, m, null, r); + return r; + } + + /* ********************************************************** */ + // extensibleStringKey_ platform_? | PACKAGE + public static boolean stringKey(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "stringKey")) return false; + boolean r; + Marker m = enter_section_(b, l, _NONE_, STRING_KEY, ""); + r = stringKey_0(b, l + 1); + if (!r) r = consumeToken(b, PACKAGE); + exit_section_(b, l, m, r, false, null); + return r; + } + + // extensibleStringKey_ platform_? + private static boolean stringKey_0(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "stringKey_0")) return false; + boolean r; + Marker m = enter_section_(b); + r = extensibleStringKey_(b, l + 1); + r = r && stringKey_0_1(b, l + 1); + exit_section_(b, m, null, r); + return r; + } + + // platform_? + private static boolean stringKey_0_1(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "stringKey_0_1")) return false; + platform_(b, l + 1); + return true; + } + + /* ********************************************************** */ + // VALUE + public static boolean stringValue(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "stringValue")) return false; + if (!nextTokenIs(b, VALUE)) return false; + boolean r; + Marker m = enter_section_(b); + r = consumeToken(b, VALUE); + exit_section_(b, m, STRING_VALUE, r); + return r; + } + + /* ********************************************************** */ + // stringsKey platform_? SEPARATOR stringsValue + static boolean stringsDefinition_(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "stringsDefinition_")) return false; + boolean r; + Marker m = enter_section_(b); + r = stringsKey(b, l + 1); + r = r && stringsDefinition__1(b, l + 1); + r = r && consumeToken(b, SEPARATOR); + r = r && stringsValue(b, l + 1); + exit_section_(b, m, null, r); + return r; + } + + // platform_? + private static boolean stringsDefinition__1(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "stringsDefinition__1")) return false; + platform_(b, l + 1); + return true; + } + + /* ********************************************************** */ + // COMPILER_OPTS | DEPENDS | ENTRY_POINT | EXCLUDED_FUNCTIONS + // | EXCLUDED_MACROS | EXPORT_FORWARD_DECLARATIONS | HEADER_FILTER + // | HEADERS | LIBRARY_PATHS | LINKER_OPTS | NON_STRICT_ENUMS + // | NO_STRING_CONVERSION | PACKAGE | STATIC_LIBRARIES | STRICT_ENUMS + public static boolean stringsKey(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "stringsKey")) return false; + boolean r; + Marker m = enter_section_(b, l, _NONE_, STRINGS_KEY, ""); + r = consumeToken(b, COMPILER_OPTS); + if (!r) r = consumeToken(b, DEPENDS); + if (!r) r = consumeToken(b, ENTRY_POINT); + if (!r) r = consumeToken(b, EXCLUDED_FUNCTIONS); + if (!r) r = consumeToken(b, EXCLUDED_MACROS); + if (!r) r = consumeToken(b, EXPORT_FORWARD_DECLARATIONS); + if (!r) r = consumeToken(b, HEADER_FILTER); + if (!r) r = consumeToken(b, HEADERS); + if (!r) r = consumeToken(b, LIBRARY_PATHS); + if (!r) r = consumeToken(b, LINKER_OPTS); + if (!r) r = consumeToken(b, NON_STRICT_ENUMS); + if (!r) r = consumeToken(b, NO_STRING_CONVERSION); + if (!r) r = consumeToken(b, PACKAGE); + if (!r) r = consumeToken(b, STATIC_LIBRARIES); + if (!r) r = consumeToken(b, STRICT_ENUMS); + exit_section_(b, l, m, r, false, null); + return r; + } + + /* ********************************************************** */ + // VALUE + public static boolean stringsValue(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "stringsValue")) return false; + if (!nextTokenIs(b, VALUE)) return false; + boolean r; + Marker m = enter_section_(b); + r = consumeToken(b, VALUE); + exit_section_(b, m, STRINGS_VALUE, r); + return r; + } + +} diff --git a/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsBoolKey.java b/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsBoolKey.java new file mode 100644 index 00000000000..55ea08c9b78 --- /dev/null +++ b/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsBoolKey.java @@ -0,0 +1,10 @@ +// This is a generated file. Not intended for manual editing. +package org.jetbrains.kotlin.ide.konan.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface NativeDefinitionsBoolKey extends PsiElement { + +} diff --git a/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsBoolKeyImpl.java b/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsBoolKeyImpl.java new file mode 100644 index 00000000000..5b366a87cc3 --- /dev/null +++ b/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsBoolKeyImpl.java @@ -0,0 +1,28 @@ +// This is a generated file. Not intended for manual editing. +package org.jetbrains.kotlin.ide.konan.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static org.jetbrains.kotlin.ide.konan.psi.NativeDefinitionsTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; + +public class NativeDefinitionsBoolKeyImpl extends ASTWrapperPsiElement implements NativeDefinitionsBoolKey { + + public NativeDefinitionsBoolKeyImpl(@NotNull ASTNode node) { + super(node); + } + + public void accept(@NotNull NativeDefinitionsVisitor visitor) { + visitor.visitBoolKey(this); + } + + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof NativeDefinitionsVisitor) accept((NativeDefinitionsVisitor)visitor); + else super.accept(visitor); + } + +} diff --git a/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsBoolValue.java b/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsBoolValue.java new file mode 100644 index 00000000000..925d509cd9b --- /dev/null +++ b/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsBoolValue.java @@ -0,0 +1,10 @@ +// This is a generated file. Not intended for manual editing. +package org.jetbrains.kotlin.ide.konan.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface NativeDefinitionsBoolValue extends PsiElement { + +} diff --git a/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsBoolValueImpl.java b/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsBoolValueImpl.java new file mode 100644 index 00000000000..5efd44a7780 --- /dev/null +++ b/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsBoolValueImpl.java @@ -0,0 +1,28 @@ +// This is a generated file. Not intended for manual editing. +package org.jetbrains.kotlin.ide.konan.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static org.jetbrains.kotlin.ide.konan.psi.NativeDefinitionsTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; + +public class NativeDefinitionsBoolValueImpl extends ASTWrapperPsiElement implements NativeDefinitionsBoolValue { + + public NativeDefinitionsBoolValueImpl(@NotNull ASTNode node) { + super(node); + } + + public void accept(@NotNull NativeDefinitionsVisitor visitor) { + visitor.visitBoolValue(this); + } + + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof NativeDefinitionsVisitor) accept((NativeDefinitionsVisitor)visitor); + else super.accept(visitor); + } + +} diff --git a/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsCode.java b/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsCode.java new file mode 100644 index 00000000000..a930f5b098c --- /dev/null +++ b/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsCode.java @@ -0,0 +1,10 @@ +// This is a generated file. Not intended for manual editing. +package org.jetbrains.kotlin.ide.konan.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface NativeDefinitionsCode extends PsiElement { + +} diff --git a/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsCodeImpl.java b/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsCodeImpl.java new file mode 100644 index 00000000000..155a5f4276a --- /dev/null +++ b/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsCodeImpl.java @@ -0,0 +1,28 @@ +// This is a generated file. Not intended for manual editing. +package org.jetbrains.kotlin.ide.konan.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static org.jetbrains.kotlin.ide.konan.psi.NativeDefinitionsTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; + +public class NativeDefinitionsCodeImpl extends ASTWrapperPsiElement implements NativeDefinitionsCode { + + public NativeDefinitionsCodeImpl(@NotNull ASTNode node) { + super(node); + } + + public void accept(@NotNull NativeDefinitionsVisitor visitor) { + visitor.visitCode(this); + } + + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof NativeDefinitionsVisitor) accept((NativeDefinitionsVisitor)visitor); + else super.accept(visitor); + } + +} diff --git a/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsStringKey.java b/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsStringKey.java new file mode 100644 index 00000000000..4891db21bc6 --- /dev/null +++ b/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsStringKey.java @@ -0,0 +1,10 @@ +// This is a generated file. Not intended for manual editing. +package org.jetbrains.kotlin.ide.konan.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface NativeDefinitionsStringKey extends PsiElement { + +} diff --git a/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsStringKeyImpl.java b/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsStringKeyImpl.java new file mode 100644 index 00000000000..378fd5f3639 --- /dev/null +++ b/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsStringKeyImpl.java @@ -0,0 +1,28 @@ +// This is a generated file. Not intended for manual editing. +package org.jetbrains.kotlin.ide.konan.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static org.jetbrains.kotlin.ide.konan.psi.NativeDefinitionsTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; + +public class NativeDefinitionsStringKeyImpl extends ASTWrapperPsiElement implements NativeDefinitionsStringKey { + + public NativeDefinitionsStringKeyImpl(@NotNull ASTNode node) { + super(node); + } + + public void accept(@NotNull NativeDefinitionsVisitor visitor) { + visitor.visitStringKey(this); + } + + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof NativeDefinitionsVisitor) accept((NativeDefinitionsVisitor)visitor); + else super.accept(visitor); + } + +} diff --git a/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsStringValue.java b/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsStringValue.java new file mode 100644 index 00000000000..7014be0ed6a --- /dev/null +++ b/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsStringValue.java @@ -0,0 +1,10 @@ +// This is a generated file. Not intended for manual editing. +package org.jetbrains.kotlin.ide.konan.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface NativeDefinitionsStringValue extends PsiElement { + +} diff --git a/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsStringValueImpl.java b/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsStringValueImpl.java new file mode 100644 index 00000000000..188222118cb --- /dev/null +++ b/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsStringValueImpl.java @@ -0,0 +1,28 @@ +// This is a generated file. Not intended for manual editing. +package org.jetbrains.kotlin.ide.konan.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static org.jetbrains.kotlin.ide.konan.psi.NativeDefinitionsTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; + +public class NativeDefinitionsStringValueImpl extends ASTWrapperPsiElement implements NativeDefinitionsStringValue { + + public NativeDefinitionsStringValueImpl(@NotNull ASTNode node) { + super(node); + } + + public void accept(@NotNull NativeDefinitionsVisitor visitor) { + visitor.visitStringValue(this); + } + + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof NativeDefinitionsVisitor) accept((NativeDefinitionsVisitor)visitor); + else super.accept(visitor); + } + +} diff --git a/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsStringsKey.java b/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsStringsKey.java new file mode 100644 index 00000000000..0b6acfb310e --- /dev/null +++ b/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsStringsKey.java @@ -0,0 +1,10 @@ +// This is a generated file. Not intended for manual editing. +package org.jetbrains.kotlin.ide.konan.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface NativeDefinitionsStringsKey extends PsiElement { + +} diff --git a/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsStringsKeyImpl.java b/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsStringsKeyImpl.java new file mode 100644 index 00000000000..4df752d0cac --- /dev/null +++ b/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsStringsKeyImpl.java @@ -0,0 +1,28 @@ +// This is a generated file. Not intended for manual editing. +package org.jetbrains.kotlin.ide.konan.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static org.jetbrains.kotlin.ide.konan.psi.NativeDefinitionsTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; + +public class NativeDefinitionsStringsKeyImpl extends ASTWrapperPsiElement implements NativeDefinitionsStringsKey { + + public NativeDefinitionsStringsKeyImpl(@NotNull ASTNode node) { + super(node); + } + + public void accept(@NotNull NativeDefinitionsVisitor visitor) { + visitor.visitStringsKey(this); + } + + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof NativeDefinitionsVisitor) accept((NativeDefinitionsVisitor)visitor); + else super.accept(visitor); + } + +} diff --git a/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsStringsValue.java b/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsStringsValue.java new file mode 100644 index 00000000000..c837a934e53 --- /dev/null +++ b/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsStringsValue.java @@ -0,0 +1,10 @@ +// This is a generated file. Not intended for manual editing. +package org.jetbrains.kotlin.ide.konan.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface NativeDefinitionsStringsValue extends PsiElement { + +} diff --git a/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsStringsValueImpl.java b/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsStringsValueImpl.java new file mode 100644 index 00000000000..f663820a76e --- /dev/null +++ b/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsStringsValueImpl.java @@ -0,0 +1,28 @@ +// This is a generated file. Not intended for manual editing. +package org.jetbrains.kotlin.ide.konan.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static org.jetbrains.kotlin.ide.konan.psi.NativeDefinitionsTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; + +public class NativeDefinitionsStringsValueImpl extends ASTWrapperPsiElement implements NativeDefinitionsStringsValue { + + public NativeDefinitionsStringsValueImpl(@NotNull ASTNode node) { + super(node); + } + + public void accept(@NotNull NativeDefinitionsVisitor visitor) { + visitor.visitStringsValue(this); + } + + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof NativeDefinitionsVisitor) accept((NativeDefinitionsVisitor)visitor); + else super.accept(visitor); + } + +} diff --git a/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsTypes.java b/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsTypes.java new file mode 100644 index 00000000000..58e25b5e2e1 --- /dev/null +++ b/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsTypes.java @@ -0,0 +1,97 @@ +// This is a generated file. Not intended for manual editing. +package org.jetbrains.kotlin.ide.konan.psi; + +import com.intellij.psi.tree.IElementType; +import com.intellij.psi.PsiElement; +import com.intellij.lang.ASTNode; + +public interface NativeDefinitionsTypes { + + IElementType BOOL_KEY = new NativeDefinitionsElementType("BOOL_KEY"); + IElementType BOOL_VALUE = new NativeDefinitionsElementType("BOOL_VALUE"); + IElementType CODE = new NativeDefinitionsElementType("CODE"); + IElementType STRINGS_KEY = new NativeDefinitionsElementType("STRINGS_KEY"); + IElementType STRINGS_VALUE = new NativeDefinitionsElementType("STRINGS_VALUE"); + IElementType STRING_KEY = new NativeDefinitionsElementType("STRING_KEY"); + IElementType STRING_VALUE = new NativeDefinitionsElementType("STRING_VALUE"); + + IElementType ANDROID = new NativeDefinitionsTokenType("android"); + IElementType ANDROID_ARM32 = new NativeDefinitionsTokenType("android_arm32"); + IElementType ANDROID_ARM64 = new NativeDefinitionsTokenType("android_arm64"); + IElementType ARM32 = new NativeDefinitionsTokenType("arm32"); + IElementType ARM64 = new NativeDefinitionsTokenType("arm64"); + IElementType BAD_CHARACTER = new NativeDefinitionsTokenType("BAD_CHARACTER"); + IElementType CODE_CHARS = new NativeDefinitionsTokenType("CODE_CHARS"); + IElementType COMMENT = new NativeDefinitionsTokenType("COMMENT"); + IElementType COMPILER_OPTS = new NativeDefinitionsTokenType("compilerOpts"); + IElementType DELIM = new NativeDefinitionsTokenType("DELIM"); + IElementType DEPENDS = new NativeDefinitionsTokenType("depends"); + IElementType DISABLE_DESIGNATED_INITIALIZER_CHECKS = new NativeDefinitionsTokenType("disableDesignatedInitializerChecks"); + IElementType ENTRY_POINT = new NativeDefinitionsTokenType("entryPoint"); + IElementType EXCLUDED_FUNCTIONS = new NativeDefinitionsTokenType("excludedFunctions"); + IElementType EXCLUDED_MACROS = new NativeDefinitionsTokenType("excludedMacros"); + IElementType EXCLUDE_DEPENDENT_MODULES = new NativeDefinitionsTokenType("excludeDependentModules"); + IElementType EXCLUDE_SYSTEM_LIBS = new NativeDefinitionsTokenType("excludeSystemLibs"); + IElementType EXPORT_FORWARD_DECLARATIONS = new NativeDefinitionsTokenType("exportForwardDeclarations"); + IElementType HEADERS = new NativeDefinitionsTokenType("headers"); + IElementType HEADER_FILTER = new NativeDefinitionsTokenType("headerFilter"); + IElementType IOS = new NativeDefinitionsTokenType("ios"); + IElementType IOS_ARM32 = new NativeDefinitionsTokenType("ios_arm32"); + IElementType IOS_ARM64 = new NativeDefinitionsTokenType("ios_arm64"); + IElementType IOS_X64 = new NativeDefinitionsTokenType("ios_x64"); + IElementType LANGUAGE = new NativeDefinitionsTokenType("language"); + IElementType LIBRARY_PATHS = new NativeDefinitionsTokenType("libraryPaths"); + IElementType LINKER = new NativeDefinitionsTokenType("linker"); + IElementType LINKER_OPTS = new NativeDefinitionsTokenType("linkerOpts"); + IElementType LINUX = new NativeDefinitionsTokenType("linux"); + IElementType LINUX_ARM32_HFP = new NativeDefinitionsTokenType("linux_arm32_hfp"); + IElementType LINUX_MIPS32 = new NativeDefinitionsTokenType("linux_mips32"); + IElementType LINUX_MIPSEL32 = new NativeDefinitionsTokenType("linux_mipsel32"); + IElementType LINUX_X64 = new NativeDefinitionsTokenType("linux_x64"); + IElementType MACOS_X64 = new NativeDefinitionsTokenType("macos_x64"); + IElementType MINGW = new NativeDefinitionsTokenType("mingw"); + IElementType MINGW_X64 = new NativeDefinitionsTokenType("mingw_x64"); + IElementType MIPS32 = new NativeDefinitionsTokenType("mips32"); + IElementType MIPSEL32 = new NativeDefinitionsTokenType("mipsel32"); + IElementType NON_STRICT_ENUMS = new NativeDefinitionsTokenType("nonStrictEnums"); + IElementType NO_STRING_CONVERSION = new NativeDefinitionsTokenType("noStringConversion"); + IElementType OSX = new NativeDefinitionsTokenType("osx"); + IElementType PACKAGE = new NativeDefinitionsTokenType("package"); + IElementType SEPARATOR = new NativeDefinitionsTokenType("SEPARATOR"); + IElementType STATIC_LIBRARIES = new NativeDefinitionsTokenType("staticLibraries"); + IElementType STRICT_ENUMS = new NativeDefinitionsTokenType("strictEnums"); + IElementType UNKNOWN_KEY = new NativeDefinitionsTokenType(""); + IElementType UNKNOWN_PLATFORM = new NativeDefinitionsTokenType(""); + IElementType VALUE = new NativeDefinitionsTokenType("VALUE"); + IElementType WASM = new NativeDefinitionsTokenType("wasm"); + IElementType WASM32 = new NativeDefinitionsTokenType("wasm32"); + IElementType X64 = new NativeDefinitionsTokenType("x64"); + + class Factory { + public static PsiElement createElement(ASTNode node) { + IElementType type = node.getElementType(); + if (type == BOOL_KEY) { + return new NativeDefinitionsBoolKeyImpl(node); + } + else if (type == BOOL_VALUE) { + return new NativeDefinitionsBoolValueImpl(node); + } + else if (type == CODE) { + return new NativeDefinitionsCodeImpl(node); + } + else if (type == STRINGS_KEY) { + return new NativeDefinitionsStringsKeyImpl(node); + } + else if (type == STRINGS_VALUE) { + return new NativeDefinitionsStringsValueImpl(node); + } + else if (type == STRING_KEY) { + return new NativeDefinitionsStringKeyImpl(node); + } + else if (type == STRING_VALUE) { + return new NativeDefinitionsStringValueImpl(node); + } + throw new AssertionError("Unknown element type: " + type); + } + } +} diff --git a/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsVisitor.java b/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsVisitor.java new file mode 100644 index 00000000000..f1f0e54dc9c --- /dev/null +++ b/idea/idea-native/gen/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsVisitor.java @@ -0,0 +1,42 @@ +// This is a generated file. Not intended for manual editing. +package org.jetbrains.kotlin.ide.konan.psi; + +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.PsiElement; + +public class NativeDefinitionsVisitor extends PsiElementVisitor { + + public void visitBoolKey(@NotNull NativeDefinitionsBoolKey o) { + visitPsiElement(o); + } + + public void visitBoolValue(@NotNull NativeDefinitionsBoolValue o) { + visitPsiElement(o); + } + + public void visitCode(@NotNull NativeDefinitionsCode o) { + visitPsiElement(o); + } + + public void visitStringKey(@NotNull NativeDefinitionsStringKey o) { + visitPsiElement(o); + } + + public void visitStringValue(@NotNull NativeDefinitionsStringValue o) { + visitPsiElement(o); + } + + public void visitStringsKey(@NotNull NativeDefinitionsStringsKey o) { + visitPsiElement(o); + } + + public void visitStringsValue(@NotNull NativeDefinitionsStringsValue o) { + visitPsiElement(o); + } + + public void visitPsiElement(@NotNull PsiElement o) { + visitElement(o); + } + +} diff --git a/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/KotlinNativeFileTypeFactory.kt b/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/KotlinNativeFileTypeFactory.kt index b9538b111a6..e9fd8740a85 100644 --- a/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/KotlinNativeFileTypeFactory.kt +++ b/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/KotlinNativeFileTypeFactory.kt @@ -9,9 +9,11 @@ import com.intellij.ide.highlighter.ArchiveFileType import com.intellij.openapi.fileTypes.FileTypeConsumer import com.intellij.openapi.fileTypes.FileTypeFactory import org.jetbrains.kotlin.konan.library.KLIB_FILE_EXTENSION +import org.jetbrains.kotlin.konan.library.KDEFINITIONS_FILE_EXTENSION class KotlinNativeFileTypeFactory : FileTypeFactory() { override fun createFileTypes(consumer: FileTypeConsumer) { consumer.consume(ArchiveFileType.INSTANCE, KLIB_FILE_EXTENSION) + consumer.consume(NativeDefinitionsFileType, KDEFINITIONS_FILE_EXTENSION) } } \ No newline at end of file diff --git a/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/NativeDefinitions.bnf b/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/NativeDefinitions.bnf new file mode 100644 index 00000000000..d1584ce39a9 --- /dev/null +++ b/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/NativeDefinitions.bnf @@ -0,0 +1,96 @@ +{ + parserClass="org.jetbrains.kotlin.ide.konan.NativeDefinitionsParser" + + extends="com.intellij.extapi.psi.ASTWrapperPsiElement" + + psiClassPrefix="NativeDefinitions" + psiImplClassSuffix="Impl" + psiPackage="org.jetbrains.kotlin.ide.konan.psi" + psiImplPackage="org.jetbrains.kotlin.ide.konan.psi" + + elementTypeHolderClass="org.jetbrains.kotlin.ide.konan.psi.NativeDefinitionsTypes" + elementTypeClass="org.jetbrains.kotlin.ide.konan.psi.NativeDefinitionsElementType" + tokenTypeClass="org.jetbrains.kotlin.ide.konan.psi.NativeDefinitionsTokenType" + + tokens = [ + // known properties + COMPILER_OPTS="compilerOpts" + DEPENDS="depends" + DISABLE_DESIGNATED_INITIALIZER_CHECKS="disableDesignatedInitializerChecks" + ENTRY_POINT="entryPoint" + EXCLUDE_DEPENDENT_MODULES="excludeDependentModules" + EXCLUDED_FUNCTIONS="excludedFunctions" + EXCLUDED_MACROS="excludedMacros" + EXCLUDE_SYSTEM_LIBS="excludeSystemLibs" + EXPORT_FORWARD_DECLARATIONS="exportForwardDeclarations" + HEADER_FILTER="headerFilter" + HEADERS="headers" + LANGUAGE="language" + LIBRARY_PATHS="libraryPaths" + LINKER="linker" + LINKER_OPTS="linkerOpts" + NON_STRICT_ENUMS="nonStrictEnums" + NO_STRING_CONVERSION="noStringConversion" + PACKAGE="package" + STATIC_LIBRARIES="staticLibraries" + STRICT_ENUMS="strictEnums" + + // known platforms + ANDROID="android" + ANDROID_ARM32="android_arm32" + ANDROID_ARM64="android_arm64" + ARM32="arm32" + ARM64="arm64" + IOS="ios" + IOS_ARM32="ios_arm32" + IOS_ARM64="ios_arm64" + IOS_X64="ios_x64" + LINUX="linux" + LINUX_ARM32_HFP="linux_arm32_hfp" + LINUX_MIPS32="linux_mips32" + LINUX_MIPSEL32="linux_mipsel32" + LINUX_X64="linux_x64" + MACOS_X64="macos_x64" + MINGW="mingw" + MINGW_X64="mingw_x64" + MIPS32="mips32" + MIPSEL32="mipsel32" + OSX="osx" + WASM="wasm" + WASM32="wasm32" + X64="x64" + + UNKNOWN_KEY="" + UNKNOWN_PLATFORM="" + ] +} + +root ::= definitionItem_* (DELIM code)? + +private definitionItem_ ::= COMMENT | boolDefinition_ | stringDefinition_ | stringsDefinition_ | incorrectDefinition_ + +private boolDefinition_ ::= boolKey platform_? SEPARATOR boolValue +boolKey ::= DISABLE_DESIGNATED_INITIALIZER_CHECKS | EXCLUDE_DEPENDENT_MODULES | EXCLUDE_SYSTEM_LIBS +boolValue ::= VALUE + +private stringDefinition_ ::= stringKey SEPARATOR stringValue +stringKey ::= extensibleStringKey_ platform_? | PACKAGE +private extensibleStringKey_ ::= LANGUAGE | LINKER +stringValue ::= VALUE + +private stringsDefinition_ ::= stringsKey platform_? SEPARATOR stringsValue +stringsKey ::= COMPILER_OPTS | DEPENDS | ENTRY_POINT | EXCLUDED_FUNCTIONS + | EXCLUDED_MACROS | EXPORT_FORWARD_DECLARATIONS | HEADER_FILTER + | HEADERS | LIBRARY_PATHS | LINKER_OPTS | NON_STRICT_ENUMS + | NO_STRING_CONVERSION | PACKAGE | STATIC_LIBRARIES | STRICT_ENUMS + +stringsValue ::= VALUE + +private incorrectDefinition_ ::= UNKNOWN_KEY? UNKNOWN_PLATFORM? SEPARATOR VALUE? | UNKNOWN_KEY UNKNOWN_PLATFORM? + +private platform_ ::= ANDROID | ANDROID_ARM32 | ANDROID_ARM64 | ARM32 | ARM64 | IOS | IOS_ARM32 + | IOS_ARM64 | IOS_X64 | LINUX | LINUX_ARM32_HFP | LINUX_MIPS32 + | LINUX_MIPSEL32 | LINUX_X64 | MACOS_X64 | MINGW | MINGW_X64 | MIPS32 + | MIPSEL32 | OSX | WASM | WASM32 | X64 | UNKNOWN_PLATFORM + +code ::= CODE_CHARS \ No newline at end of file diff --git a/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/NativeDefinitions.flex b/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/NativeDefinitions.flex new file mode 100644 index 00000000000..f6636e1d394 --- /dev/null +++ b/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/NativeDefinitions.flex @@ -0,0 +1,145 @@ +package org.jetbrains.kotlin.ide.konan; + +import com.intellij.lexer.FlexLexer; +import com.intellij.psi.tree.IElementType; +import com.intellij.psi.TokenType; +import org.jetbrains.kotlin.ide.konan.psi.NativeDefinitionsTypes; + +%% + +%class NativeDefinitionsLexer +%implements FlexLexer, NativeDefinitionsTypes +%unicode +%function advance +%type IElementType +%eof{ return; +%eof} + +CRLF=\R +WHITE_SPACE=[\ \v\t\f] + +SEPARATOR=[:=] +PLATFORM_CHAR=[:jletterdigit:] +KEY_CHAR=[^:=\ \r\n\t\f\\.] | "\\ " +FIRST_VALUE_CHAR=[^ \n\f\\] | "\\"{CRLF} | "\\". +VALUE_CHAR= [^\n\f\\] | "\\"{CRLF} | "\\". +COMMENT=("#"|"!")[^\r\n]* +DELIM=---{CRLF} + +// known properties +COMPILER_OPTS="compilerOpts" +DEPENDS="depends" +DISABLE_DESIGNATED_INITIALIZER_CHECKS="disableDesignatedInitializerChecks" +ENTRY_POINT="entryPoint" +EXCLUDE_DEPENDENT_MODULES="excludeDependentModules" +EXCLUDED_FUNCTIONS="excludedFunctions" +EXCLUDED_MACROS="excludedMacros" +EXCLUDE_SYSTEM_LIBS="excludeSystemLibs" +EXPORT_FORWARD_DECLARATIONS="exportForwardDeclarations" +HEADER_FILTER="headerFilter" +HEADERS="headers" +LANGUAGE="language" +LIBRARY_PATHS="libraryPaths" +LINKER="linker" +LINKER_OPTS="linkerOpts" +NON_STRICT_ENUMS="nonStrictEnums" +NO_STRING_CONVERSION="noStringConversion" +PACKAGE="package" +STATIC_LIBRARIES="staticLibraries" +STRICT_ENUMS="strictEnums" + +// known platforms +ANDROID="android" +ANDROID_ARM32="android_arm32" +ANDROID_ARM64="android_arm64" +ARM32="arm32" +ARM64="arm64" +IOS="ios" +IOS_ARM32="ios_arm32" +IOS_ARM64="ios_arm64" +IOS_X64="ios_x64" +LINUX="linux" +LINUX_ARM32_HFP="linux_arm32_hfp" +LINUX_MIPS32="linux_mips32" +LINUX_MIPSEL32="linux_mipsel32" +LINUX_X64="linux_x64" +MACOS_X64="macos_x64" +MINGW="mingw" +MINGW_X64="mingw_x64" +MIPS32="mips32" +MIPSEL32="mipsel32" +OSX="osx" +WASM="wasm" +WASM32="wasm32" +X64="x64" + + +%state WAITING_PLATFORM +%state WAITING_VALUE +%state CODE_END + +%% + +{WHITE_SPACE}+ { return TokenType.WHITE_SPACE; } + + { + {DELIM} { yybegin(CODE_END); return DELIM; } + {COMMENT} { return COMMENT; } + {COMPILER_OPTS} { yybegin(WAITING_PLATFORM); return COMPILER_OPTS; } + {DEPENDS} { yybegin(WAITING_PLATFORM); return DEPENDS; } + {DISABLE_DESIGNATED_INITIALIZER_CHECKS} { yybegin(WAITING_PLATFORM); return DISABLE_DESIGNATED_INITIALIZER_CHECKS; } + {ENTRY_POINT} { yybegin(WAITING_PLATFORM); return ENTRY_POINT; } + {EXCLUDE_DEPENDENT_MODULES} { yybegin(WAITING_PLATFORM); return EXCLUDE_DEPENDENT_MODULES; } + {EXCLUDED_FUNCTIONS} { yybegin(WAITING_PLATFORM); return EXCLUDED_FUNCTIONS; } + {EXCLUDED_MACROS} { yybegin(WAITING_PLATFORM); return EXCLUDED_MACROS; } + {EXCLUDE_SYSTEM_LIBS} { yybegin(WAITING_PLATFORM); return EXCLUDE_SYSTEM_LIBS; } + {EXPORT_FORWARD_DECLARATIONS} { yybegin(WAITING_PLATFORM); return EXPORT_FORWARD_DECLARATIONS; } + {HEADER_FILTER} { yybegin(WAITING_PLATFORM); return HEADER_FILTER; } + {HEADERS} { yybegin(WAITING_PLATFORM); return HEADERS; } + {LANGUAGE} { yybegin(WAITING_PLATFORM); return LANGUAGE; } + {LIBRARY_PATHS} { yybegin(WAITING_PLATFORM); return LIBRARY_PATHS; } + {LINKER} { yybegin(WAITING_PLATFORM); return LINKER; } + {LINKER_OPTS} { yybegin(WAITING_PLATFORM); return LINKER_OPTS; } + {NON_STRICT_ENUMS} { yybegin(WAITING_PLATFORM); return NON_STRICT_ENUMS; } + {NO_STRING_CONVERSION} { yybegin(WAITING_PLATFORM); return NO_STRING_CONVERSION; } + {PACKAGE} { yybegin(WAITING_PLATFORM); return PACKAGE; } + {STATIC_LIBRARIES} { yybegin(WAITING_PLATFORM); return STATIC_LIBRARIES; } + {STRICT_ENUMS} { yybegin(WAITING_PLATFORM); return STRICT_ENUMS; } + {KEY_CHAR}+ { yybegin(WAITING_PLATFORM); return UNKNOWN_KEY; } +} + + { + [.]{ANDROID} { return ANDROID; } + [.]{ANDROID_ARM32} { return ANDROID_ARM32; } + [.]{ANDROID_ARM64} { return ANDROID_ARM64; } + [.]{ARM32} { return ARM32; } + [.]{ARM64} { return ARM64; } + [.]{IOS} { return IOS; } + [.]{IOS_ARM32} { return IOS_ARM32; } + [.]{IOS_ARM64} { return IOS_ARM64; } + [.]{IOS_X64} { return IOS_X64; } + [.]{LINUX} { return LINUX; } + [.]{LINUX_ARM32_HFP} { return LINUX_ARM32_HFP; } + [.]{LINUX_MIPS32} { return LINUX_MIPS32; } + [.]{LINUX_MIPSEL32} { return LINUX_MIPSEL32; } + [.]{LINUX_X64} { return LINUX_X64; } + [.]{MACOS_X64} { return MACOS_X64; } + [.]{MINGW} { return MINGW; } + [.]{MINGW_X64} { return MINGW_X64; } + [.]{MIPS32} { return MIPS32; } + [.]{MIPSEL32} { return MIPSEL32; } + [.]{OSX} { return OSX; } + [.]{WASM} { return WASM; } + [.]{WASM32} { return WASM32; } + [.]{X64} { return X64; } + [.]{PLATFORM_CHAR}+ { return UNKNOWN_PLATFORM; } + {SEPARATOR} { yybegin(WAITING_VALUE); return SEPARATOR; } +} + + {FIRST_VALUE_CHAR}{VALUE_CHAR}* { yybegin(YYINITIAL); return VALUE; } + + [^]* { return CODE_CHARS; } + +{CRLF}({CRLF}|{WHITE_SPACE})* { yybegin(YYINITIAL); return TokenType.WHITE_SPACE; } + +[^\r\n\R] { yybegin(YYINITIAL); return TokenType.BAD_CHARACTER; } \ No newline at end of file diff --git a/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/NativeDefinitions.kt b/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/NativeDefinitions.kt new file mode 100644 index 00000000000..794024c10f8 --- /dev/null +++ b/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/NativeDefinitions.kt @@ -0,0 +1,169 @@ +/* + * Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.ide.konan + +import com.intellij.extapi.psi.PsiFileBase +import com.intellij.lang.* +import com.intellij.lexer.FlexAdapter +import com.intellij.lexer.Lexer +import com.intellij.openapi.editor.colors.TextAttributesKey +import com.intellij.openapi.editor.DefaultLanguageHighlighterColors +import com.intellij.openapi.editor.HighlighterColors +import com.intellij.openapi.fileTypes.* +import com.intellij.openapi.project.Project +import com.intellij.openapi.vfs.VirtualFile +import com.intellij.psi.* +import com.intellij.psi.tree.* +import javax.swing.Icon +import java.io.Reader +import org.jetbrains.kotlin.ide.konan.psi.* +import org.jetbrains.kotlin.idea.KotlinIcons +import org.jetbrains.kotlin.konan.library.KDEFINITIONS_FILE_EXTENSION + + +const val NATIVE_DEFINITIONS_NAME = "KND" +const val NATIVE_DEFINITIONS_DESCRIPTION = "Definitions file for Kotlin/Native C interop" + +object NativeDefinitionsFileType : LanguageFileType(NativeDefinitionsLanguage.INSTANCE) { + + override fun getName(): String = NATIVE_DEFINITIONS_NAME + + override fun getDescription(): String = NATIVE_DEFINITIONS_DESCRIPTION + + override fun getDefaultExtension(): String = KDEFINITIONS_FILE_EXTENSION + + override fun getIcon(): Icon = KotlinIcons.NATIVE +} + +class NativeDefinitionsLanguage private constructor() : Language(NATIVE_DEFINITIONS_NAME) { + companion object { + val INSTANCE = NativeDefinitionsLanguage() + } +} + +class NativeDefinitionsFile(viewProvider: FileViewProvider) : PsiFileBase(viewProvider, NativeDefinitionsLanguage.INSTANCE) { + + override fun getFileType(): FileType = NativeDefinitionsFileType + + override fun toString(): String = NATIVE_DEFINITIONS_DESCRIPTION + + override fun getIcon(flags: Int): Icon? = super.getIcon(flags) +} + +class NativeDefinitionsLexerAdapter : FlexAdapter(NativeDefinitionsLexer(null as Reader?)) + +class NativeDefinitionsParserDefinition : ParserDefinition { + private val COMMENTS = TokenSet.create(NativeDefinitionsTypes.COMMENT) + private val FILE = IFileElementType(NativeDefinitionsLanguage.INSTANCE) + + override fun getWhitespaceTokens(): TokenSet = TokenSet.WHITE_SPACE + override fun getCommentTokens(): TokenSet = COMMENTS + override fun getStringLiteralElements(): TokenSet = TokenSet.EMPTY + override fun getFileNodeType(): IFileElementType = FILE + + override fun createLexer(project: Project): Lexer = NativeDefinitionsLexerAdapter() + override fun createParser(project: Project): PsiParser = NativeDefinitionsParser() + + override fun createFile(viewProvider: FileViewProvider): PsiFile = NativeDefinitionsFile(viewProvider) + override fun createElement(node: ASTNode): PsiElement = NativeDefinitionsTypes.Factory.createElement(node) + + @Suppress("DEPRECATE") // Just switch to correctly named function, when old one is removed. + override fun spaceExistanceTypeBetweenTokens(left: ASTNode?, right: ASTNode?): ParserDefinition.SpaceRequirements = + ParserDefinition.SpaceRequirements.MAY +} + +class CLanguageInjector : LanguageInjector { + val cLanguage = Language.findLanguageByID("ObjectiveC") + + override fun getLanguagesToInject(host: PsiLanguageInjectionHost, registrar: InjectedLanguagePlaces) { + if (!host.isValid) return + + if (host is NativeDefinitionsCodeImpl && cLanguage != null) { + val range = host.getTextRange().shiftLeft(host.startOffsetInParent) + registrar.addPlace(cLanguage, range, null, null) + } + } +} + +object NativeDefinitionsSyntaxHighlighter : SyntaxHighlighterBase() { + + override fun getTokenHighlights(tokenType: IElementType?): Array = + when (tokenType) { + TokenType.BAD_CHARACTER -> BAD_CHAR_KEYS + NativeDefinitionsTypes.COMMENT -> COMMENT_KEYS + NativeDefinitionsTypes.DELIM -> COMMENT_KEYS + NativeDefinitionsTypes.SEPARATOR -> OPERATOR_KEYS + NativeDefinitionsTypes.UNKNOWN_KEY -> BAD_CHAR_KEYS + NativeDefinitionsTypes.UNKNOWN_PLATFORM -> BAD_CHAR_KEYS + NativeDefinitionsTypes.VALUE -> VALUE_KEYS + // known properties + NativeDefinitionsTypes.COMPILER_OPTS -> KNOWN_PROPERTIES_KEYS + NativeDefinitionsTypes.DEPENDS -> KNOWN_PROPERTIES_KEYS + NativeDefinitionsTypes.DISABLE_DESIGNATED_INITIALIZER_CHECKS -> KNOWN_PROPERTIES_KEYS + NativeDefinitionsTypes.ENTRY_POINT -> KNOWN_PROPERTIES_KEYS + NativeDefinitionsTypes.EXCLUDE_DEPENDENT_MODULES -> KNOWN_PROPERTIES_KEYS + NativeDefinitionsTypes.EXCLUDE_SYSTEM_LIBS -> KNOWN_PROPERTIES_KEYS + NativeDefinitionsTypes.EXCLUDED_FUNCTIONS -> KNOWN_PROPERTIES_KEYS + NativeDefinitionsTypes.EXCLUDED_MACROS -> KNOWN_PROPERTIES_KEYS + NativeDefinitionsTypes.EXPORT_FORWARD_DECLARATIONS -> KNOWN_PROPERTIES_KEYS + NativeDefinitionsTypes.HEADERS -> KNOWN_PROPERTIES_KEYS + NativeDefinitionsTypes.HEADER_FILTER -> KNOWN_PROPERTIES_KEYS + NativeDefinitionsTypes.LANGUAGE -> KNOWN_PROPERTIES_KEYS + NativeDefinitionsTypes.LIBRARY_PATHS -> KNOWN_PROPERTIES_KEYS + NativeDefinitionsTypes.LINKER -> KNOWN_PROPERTIES_KEYS + NativeDefinitionsTypes.LINKER_OPTS -> KNOWN_PROPERTIES_KEYS + NativeDefinitionsTypes.NON_STRICT_ENUMS -> KNOWN_PROPERTIES_KEYS + NativeDefinitionsTypes.NO_STRING_CONVERSION -> KNOWN_PROPERTIES_KEYS + NativeDefinitionsTypes.PACKAGE -> KNOWN_PROPERTIES_KEYS + NativeDefinitionsTypes.STATIC_LIBRARIES -> KNOWN_PROPERTIES_KEYS + NativeDefinitionsTypes.STRICT_ENUMS -> KNOWN_PROPERTIES_KEYS + // known extensions + NativeDefinitionsTypes.ANDROID -> KNOWN_EXTENSIONS_KEYS + NativeDefinitionsTypes.ANDROID_ARM32 -> KNOWN_EXTENSIONS_KEYS + NativeDefinitionsTypes.ANDROID_ARM64 -> KNOWN_EXTENSIONS_KEYS + NativeDefinitionsTypes.ARM32 -> KNOWN_EXTENSIONS_KEYS + NativeDefinitionsTypes.ARM64 -> KNOWN_EXTENSIONS_KEYS + NativeDefinitionsTypes.IOS -> KNOWN_EXTENSIONS_KEYS + NativeDefinitionsTypes.IOS_ARM32 -> KNOWN_EXTENSIONS_KEYS + NativeDefinitionsTypes.IOS_ARM64 -> KNOWN_EXTENSIONS_KEYS + NativeDefinitionsTypes.IOS_X64 -> KNOWN_EXTENSIONS_KEYS + NativeDefinitionsTypes.LINUX -> KNOWN_EXTENSIONS_KEYS + NativeDefinitionsTypes.LINUX_ARM32_HFP -> KNOWN_EXTENSIONS_KEYS + NativeDefinitionsTypes.LINUX_MIPS32 -> KNOWN_EXTENSIONS_KEYS + NativeDefinitionsTypes.LINUX_MIPSEL32 -> KNOWN_EXTENSIONS_KEYS + NativeDefinitionsTypes.LINUX_X64 -> KNOWN_EXTENSIONS_KEYS + NativeDefinitionsTypes.MACOS_X64 -> KNOWN_EXTENSIONS_KEYS + NativeDefinitionsTypes.MINGW -> KNOWN_EXTENSIONS_KEYS + NativeDefinitionsTypes.MINGW_X64 -> KNOWN_EXTENSIONS_KEYS + NativeDefinitionsTypes.MIPS32 -> KNOWN_EXTENSIONS_KEYS + NativeDefinitionsTypes.MIPSEL32 -> KNOWN_EXTENSIONS_KEYS + NativeDefinitionsTypes.OSX -> KNOWN_EXTENSIONS_KEYS + NativeDefinitionsTypes.WASM -> KNOWN_EXTENSIONS_KEYS + NativeDefinitionsTypes.WASM32 -> KNOWN_EXTENSIONS_KEYS + NativeDefinitionsTypes.X64 -> KNOWN_EXTENSIONS_KEYS + else -> EMPTY_KEYS + } + + override fun getHighlightingLexer(): Lexer = NativeDefinitionsLexerAdapter() + + + private fun createKeys(externalName: String, key: TextAttributesKey): Array { + return arrayOf(TextAttributesKey.createTextAttributesKey(externalName, key)) + } + + private val BAD_CHAR_KEYS = createKeys("Unknown key", HighlighterColors.BAD_CHARACTER) + private val COMMENT_KEYS = createKeys("Comment", DefaultLanguageHighlighterColors.LINE_COMMENT) + private val EMPTY_KEYS = emptyArray() + private val KNOWN_EXTENSIONS_KEYS = createKeys("Known extension", DefaultLanguageHighlighterColors.LABEL) + private val KNOWN_PROPERTIES_KEYS = createKeys("Known property", DefaultLanguageHighlighterColors.KEYWORD) + private val OPERATOR_KEYS = createKeys("Operator", DefaultLanguageHighlighterColors.OPERATION_SIGN) + private val VALUE_KEYS = createKeys("Value", DefaultLanguageHighlighterColors.STRING) +} + +class NativeDefinitionsSyntaxHighlighterFactory : SyntaxHighlighterFactory() { + override fun getSyntaxHighlighter(project: Project?, virtualFile: VirtualFile?): SyntaxHighlighter = + NativeDefinitionsSyntaxHighlighter +} \ No newline at end of file diff --git a/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsTypes.kt b/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsTypes.kt new file mode 100644 index 00000000000..b2c56ccde62 --- /dev/null +++ b/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/psi/NativeDefinitionsTypes.kt @@ -0,0 +1,46 @@ +/* + * Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.ide.konan.psi + + +import com.intellij.extapi.psi.ASTWrapperPsiElement +import com.intellij.lang.ASTNode +import com.intellij.openapi.util.TextRange +import com.intellij.psi.ElementManipulators +import com.intellij.psi.LiteralTextEscaper +import com.intellij.psi.PsiLanguageInjectionHost +import com.intellij.psi.tree.IElementType +import org.jetbrains.kotlin.ide.konan.* + +class NativeDefinitionsElementType(debugName: String) : IElementType(debugName, NativeDefinitionsLanguage.INSTANCE) + +class NativeDefinitionsTokenType(debugName: String) : IElementType(debugName, NativeDefinitionsLanguage.INSTANCE) { + override fun toString(): String = "NativeDefinitionsTokenType." + super.toString() +} + +private class CodeEscaper(host: NativeDefinitionsCodeImpl) : LiteralTextEscaper(host) { + override fun isOneLine(): Boolean = false + + override fun getOffsetInHost(offsetInDecoded: Int, rangeInsideHost: TextRange): Int = offsetInDecoded + + override fun decode(rangeInsideHost: TextRange, outChars: StringBuilder): Boolean { + outChars.append(myHost.text) + return true + } +} + +class NativeDefinitionsCodeImpl(node: ASTNode) : ASTWrapperPsiElement(node), NativeDefinitionsCode, PsiLanguageInjectionHost { + + override fun updateText(text: String): PsiLanguageInjectionHost { + return ElementManipulators.handleContentChange(this, text) + } + + override fun createLiteralTextEscaper(): LiteralTextEscaper { + return CodeEscaper(this) + } + + override fun isValidHost(): Boolean = true +} diff --git a/idea/idea-native/testData/colorHighlighting/allProperties.def b/idea/idea-native/testData/colorHighlighting/allProperties.def new file mode 100644 index 00000000000..b2f124ed926 --- /dev/null +++ b/idea/idea-native/testData/colorHighlighting/allProperties.def @@ -0,0 +1,51 @@ +# In this test case all supported properties are used. +package = AllProps +language=C +depends = png +disableDesignatedInitializerChecks = false +excludeDependentModules = true +excludeSystemLibs = false +! Second type of comment and separators. +headers : OpenGL/gl.h OpenGL/glu.h GLUT/glut.h +headers.android : curl/curl.h +headerFilter : OpengGL/** OpenGL/** + +excludedFunctions = sin cos atan2 +excludedMacros.mingw_x64 = MIN MAX +exportForwardDeclarations = export forward declarations + +compilerOpts = -DBAR=bar -I/usr/include -I/usr/include/x86_64-linux-gnu +compilerOpts.linux = -DFOO3=foo3 -DFOO4=foo4 +compilerOpts.macos_x64 = -DFOO1=foo1 -DFOO2=foo2 + +staticLibraries = libfoo.a +libraryPaths = /opt/local/lib /usr/local/opt/curl/lib + +linker=clang +linkerOpts = -DBAR=bar -DBAZ=baz +linkerOpts.linux_mipsel32 = -fpic +entryPoint = main1 main2 + +nonStrictEnums.wasm32 = non strict +noStringConversion.linux_arm32_hfp = no string +strictEnums.android_arm64 = strict enums + + +--- + +struct Hash { // Line comment. + int data[2]; +}; + +/********************** + * Multiline comment. * + **********************/ +inline static int strangeSum(const int* buffer, int bufferSize) { + int result = 20; + const char * stringLiteral = "This is a string"; + for (int i = 0; i < bufferSize; ++i) { + result += stringLiteral[i % 10] & 1 == 0 ? (i << 1) : buffer[i / 2]; + if (stringLiter) + } + return result; +} diff --git a/idea/idea-native/testData/colorHighlighting/allProperties.txt b/idea/idea-native/testData/colorHighlighting/allProperties.txt new file mode 100644 index 00000000000..4b645a2035c --- /dev/null +++ b/idea/idea-native/testData/colorHighlighting/allProperties.txt @@ -0,0 +1,204 @@ +Definitions file for Kotlin/Native C interop(0,1401) + PsiComment(NativeDefinitionsTokenType.COMMENT)('# In this test case all supported properties are used.')(0,54) + PsiWhiteSpace('\n')(54,55) + NativeDefinitionsStringKeyImpl(STRING_KEY)(55,62) + PsiElement(NativeDefinitionsTokenType.package)('package')(55,62) + PsiWhiteSpace(' ')(62,63) + PsiElement(NativeDefinitionsTokenType.SEPARATOR)('=')(63,64) + PsiWhiteSpace(' ')(64,65) + NativeDefinitionsStringValueImpl(STRING_VALUE)(65,73) + PsiElement(NativeDefinitionsTokenType.VALUE)('AllProps')(65,73) + PsiWhiteSpace('\n')(73,74) + NativeDefinitionsStringKeyImpl(STRING_KEY)(74,82) + PsiElement(NativeDefinitionsTokenType.language)('language')(74,82) + PsiElement(NativeDefinitionsTokenType.SEPARATOR)('=')(82,83) + NativeDefinitionsStringValueImpl(STRING_VALUE)(83,84) + PsiElement(NativeDefinitionsTokenType.VALUE)('C')(83,84) + PsiWhiteSpace('\n')(84,85) + NativeDefinitionsStringsKeyImpl(STRINGS_KEY)(85,92) + PsiElement(NativeDefinitionsTokenType.depends)('depends')(85,92) + PsiWhiteSpace(' ')(92,93) + PsiElement(NativeDefinitionsTokenType.SEPARATOR)('=')(93,94) + PsiWhiteSpace(' ')(94,95) + NativeDefinitionsStringsValueImpl(STRINGS_VALUE)(95,98) + PsiElement(NativeDefinitionsTokenType.VALUE)('png')(95,98) + PsiWhiteSpace('\n')(98,99) + NativeDefinitionsBoolKeyImpl(BOOL_KEY)(99,133) + PsiElement(NativeDefinitionsTokenType.disableDesignatedInitializerChecks)('disableDesignatedInitializerChecks')(99,133) + PsiWhiteSpace(' ')(133,134) + PsiElement(NativeDefinitionsTokenType.SEPARATOR)('=')(134,135) + PsiWhiteSpace(' ')(135,136) + NativeDefinitionsBoolValueImpl(BOOL_VALUE)(136,141) + PsiElement(NativeDefinitionsTokenType.VALUE)('false')(136,141) + PsiWhiteSpace('\n')(141,142) + NativeDefinitionsBoolKeyImpl(BOOL_KEY)(142,165) + PsiElement(NativeDefinitionsTokenType.excludeDependentModules)('excludeDependentModules')(142,165) + PsiWhiteSpace(' ')(165,166) + PsiElement(NativeDefinitionsTokenType.SEPARATOR)('=')(166,167) + PsiWhiteSpace(' ')(167,168) + NativeDefinitionsBoolValueImpl(BOOL_VALUE)(168,172) + PsiElement(NativeDefinitionsTokenType.VALUE)('true')(168,172) + PsiWhiteSpace('\n')(172,173) + NativeDefinitionsBoolKeyImpl(BOOL_KEY)(173,190) + PsiElement(NativeDefinitionsTokenType.excludeSystemLibs)('excludeSystemLibs')(173,190) + PsiWhiteSpace(' ')(190,191) + PsiElement(NativeDefinitionsTokenType.SEPARATOR)('=')(191,192) + PsiWhiteSpace(' ')(192,193) + NativeDefinitionsBoolValueImpl(BOOL_VALUE)(193,198) + PsiElement(NativeDefinitionsTokenType.VALUE)('false')(193,198) + PsiWhiteSpace('\n')(198,199) + PsiComment(NativeDefinitionsTokenType.COMMENT)('! Second type of comment and separators.')(199,239) + PsiWhiteSpace('\n')(239,240) + NativeDefinitionsStringsKeyImpl(STRINGS_KEY)(240,247) + PsiElement(NativeDefinitionsTokenType.headers)('headers')(240,247) + PsiWhiteSpace(' ')(247,248) + PsiElement(NativeDefinitionsTokenType.SEPARATOR)(':')(248,249) + PsiWhiteSpace(' ')(249,250) + NativeDefinitionsStringsValueImpl(STRINGS_VALUE)(250,286) + PsiElement(NativeDefinitionsTokenType.VALUE)('OpenGL/gl.h OpenGL/glu.h GLUT/glut.h')(250,286) + PsiWhiteSpace('\n')(286,287) + NativeDefinitionsStringsKeyImpl(STRINGS_KEY)(287,294) + PsiElement(NativeDefinitionsTokenType.headers)('headers')(287,294) + PsiElement(NativeDefinitionsTokenType.android)('.android')(294,302) + PsiWhiteSpace(' ')(302,303) + PsiElement(NativeDefinitionsTokenType.SEPARATOR)(':')(303,304) + PsiWhiteSpace(' ')(304,305) + NativeDefinitionsStringsValueImpl(STRINGS_VALUE)(305,316) + PsiElement(NativeDefinitionsTokenType.VALUE)('curl/curl.h')(305,316) + PsiWhiteSpace('\n')(316,317) + NativeDefinitionsStringsKeyImpl(STRINGS_KEY)(317,329) + PsiElement(NativeDefinitionsTokenType.headerFilter)('headerFilter')(317,329) + PsiWhiteSpace(' ')(329,330) + PsiElement(NativeDefinitionsTokenType.SEPARATOR)(':')(330,331) + PsiWhiteSpace(' ')(331,332) + NativeDefinitionsStringsValueImpl(STRINGS_VALUE)(332,352) + PsiElement(NativeDefinitionsTokenType.VALUE)('OpengGL/** OpenGL/**')(332,352) + PsiWhiteSpace('\n\n')(352,354) + NativeDefinitionsStringsKeyImpl(STRINGS_KEY)(354,371) + PsiElement(NativeDefinitionsTokenType.excludedFunctions)('excludedFunctions')(354,371) + PsiWhiteSpace(' ')(371,372) + PsiElement(NativeDefinitionsTokenType.SEPARATOR)('=')(372,373) + PsiWhiteSpace(' ')(373,374) + NativeDefinitionsStringsValueImpl(STRINGS_VALUE)(374,387) + PsiElement(NativeDefinitionsTokenType.VALUE)('sin cos atan2')(374,387) + PsiWhiteSpace('\n')(387,388) + NativeDefinitionsStringsKeyImpl(STRINGS_KEY)(388,402) + PsiElement(NativeDefinitionsTokenType.excludedMacros)('excludedMacros')(388,402) + PsiElement(NativeDefinitionsTokenType.mingw_x64)('.mingw_x64')(402,412) + PsiWhiteSpace(' ')(412,413) + PsiElement(NativeDefinitionsTokenType.SEPARATOR)('=')(413,414) + PsiWhiteSpace(' ')(414,415) + NativeDefinitionsStringsValueImpl(STRINGS_VALUE)(415,422) + PsiElement(NativeDefinitionsTokenType.VALUE)('MIN MAX')(415,422) + PsiWhiteSpace('\n')(422,423) + NativeDefinitionsStringsKeyImpl(STRINGS_KEY)(423,448) + PsiElement(NativeDefinitionsTokenType.exportForwardDeclarations)('exportForwardDeclarations')(423,448) + PsiWhiteSpace(' ')(448,449) + PsiElement(NativeDefinitionsTokenType.SEPARATOR)('=')(449,450) + PsiWhiteSpace(' ')(450,451) + NativeDefinitionsStringsValueImpl(STRINGS_VALUE)(451,478) + PsiElement(NativeDefinitionsTokenType.VALUE)('export forward declarations')(451,478) + PsiWhiteSpace('\n\n')(478,480) + NativeDefinitionsStringsKeyImpl(STRINGS_KEY)(480,492) + PsiElement(NativeDefinitionsTokenType.compilerOpts)('compilerOpts')(480,492) + PsiWhiteSpace(' ')(492,493) + PsiElement(NativeDefinitionsTokenType.SEPARATOR)('=')(493,494) + PsiWhiteSpace(' ')(494,495) + NativeDefinitionsStringsValueImpl(STRINGS_VALUE)(495,551) + PsiElement(NativeDefinitionsTokenType.VALUE)('-DBAR=bar -I/usr/include -I/usr/include/x86_64-linux-gnu')(495,551) + PsiWhiteSpace('\n')(551,552) + NativeDefinitionsStringsKeyImpl(STRINGS_KEY)(552,564) + PsiElement(NativeDefinitionsTokenType.compilerOpts)('compilerOpts')(552,564) + PsiElement(NativeDefinitionsTokenType.linux)('.linux')(564,570) + PsiWhiteSpace(' ')(570,571) + PsiElement(NativeDefinitionsTokenType.SEPARATOR)('=')(571,572) + PsiWhiteSpace(' ')(572,573) + NativeDefinitionsStringsValueImpl(STRINGS_VALUE)(573,596) + PsiElement(NativeDefinitionsTokenType.VALUE)('-DFOO3=foo3 -DFOO4=foo4')(573,596) + PsiWhiteSpace('\n')(596,597) + NativeDefinitionsStringsKeyImpl(STRINGS_KEY)(597,609) + PsiElement(NativeDefinitionsTokenType.compilerOpts)('compilerOpts')(597,609) + PsiElement(NativeDefinitionsTokenType.macos_x64)('.macos_x64')(609,619) + PsiWhiteSpace(' ')(619,620) + PsiElement(NativeDefinitionsTokenType.SEPARATOR)('=')(620,621) + PsiWhiteSpace(' ')(621,622) + NativeDefinitionsStringsValueImpl(STRINGS_VALUE)(622,645) + PsiElement(NativeDefinitionsTokenType.VALUE)('-DFOO1=foo1 -DFOO2=foo2')(622,645) + PsiWhiteSpace('\n\n')(645,647) + NativeDefinitionsStringsKeyImpl(STRINGS_KEY)(647,662) + PsiElement(NativeDefinitionsTokenType.staticLibraries)('staticLibraries')(647,662) + PsiWhiteSpace(' ')(662,663) + PsiElement(NativeDefinitionsTokenType.SEPARATOR)('=')(663,664) + PsiWhiteSpace(' ')(664,665) + NativeDefinitionsStringsValueImpl(STRINGS_VALUE)(665,673) + PsiElement(NativeDefinitionsTokenType.VALUE)('libfoo.a')(665,673) + PsiWhiteSpace('\n')(673,674) + NativeDefinitionsStringsKeyImpl(STRINGS_KEY)(674,686) + PsiElement(NativeDefinitionsTokenType.libraryPaths)('libraryPaths')(674,686) + PsiWhiteSpace(' ')(686,687) + PsiElement(NativeDefinitionsTokenType.SEPARATOR)('=')(687,688) + PsiWhiteSpace(' ')(688,689) + NativeDefinitionsStringsValueImpl(STRINGS_VALUE)(689,727) + PsiElement(NativeDefinitionsTokenType.VALUE)('/opt/local/lib /usr/local/opt/curl/lib')(689,727) + PsiWhiteSpace('\n\n')(727,729) + NativeDefinitionsStringKeyImpl(STRING_KEY)(729,735) + PsiElement(NativeDefinitionsTokenType.linker)('linker')(729,735) + PsiElement(NativeDefinitionsTokenType.SEPARATOR)('=')(735,736) + NativeDefinitionsStringValueImpl(STRING_VALUE)(736,741) + PsiElement(NativeDefinitionsTokenType.VALUE)('clang')(736,741) + PsiWhiteSpace('\n')(741,742) + NativeDefinitionsStringsKeyImpl(STRINGS_KEY)(742,752) + PsiElement(NativeDefinitionsTokenType.linkerOpts)('linkerOpts')(742,752) + PsiWhiteSpace(' ')(752,753) + PsiElement(NativeDefinitionsTokenType.SEPARATOR)('=')(753,754) + PsiWhiteSpace(' ')(754,755) + NativeDefinitionsStringsValueImpl(STRINGS_VALUE)(755,774) + PsiElement(NativeDefinitionsTokenType.VALUE)('-DBAR=bar -DBAZ=baz')(755,774) + PsiWhiteSpace('\n')(774,775) + NativeDefinitionsStringsKeyImpl(STRINGS_KEY)(775,785) + PsiElement(NativeDefinitionsTokenType.linkerOpts)('linkerOpts')(775,785) + PsiElement(NativeDefinitionsTokenType.linux_mipsel32)('.linux_mipsel32')(785,800) + PsiWhiteSpace(' ')(800,801) + PsiElement(NativeDefinitionsTokenType.SEPARATOR)('=')(801,802) + PsiWhiteSpace(' ')(802,803) + NativeDefinitionsStringsValueImpl(STRINGS_VALUE)(803,808) + PsiElement(NativeDefinitionsTokenType.VALUE)('-fpic')(803,808) + PsiWhiteSpace('\n')(808,809) + NativeDefinitionsStringsKeyImpl(STRINGS_KEY)(809,819) + PsiElement(NativeDefinitionsTokenType.entryPoint)('entryPoint')(809,819) + PsiWhiteSpace(' ')(819,820) + PsiElement(NativeDefinitionsTokenType.SEPARATOR)('=')(820,821) + PsiWhiteSpace(' ')(821,822) + NativeDefinitionsStringsValueImpl(STRINGS_VALUE)(822,833) + PsiElement(NativeDefinitionsTokenType.VALUE)('main1 main2')(822,833) + PsiWhiteSpace('\n\n')(833,835) + NativeDefinitionsStringsKeyImpl(STRINGS_KEY)(835,849) + PsiElement(NativeDefinitionsTokenType.nonStrictEnums)('nonStrictEnums')(835,849) + PsiElement(NativeDefinitionsTokenType.wasm32)('.wasm32')(849,856) + PsiWhiteSpace(' ')(856,857) + PsiElement(NativeDefinitionsTokenType.SEPARATOR)('=')(857,858) + PsiWhiteSpace(' ')(858,859) + NativeDefinitionsStringsValueImpl(STRINGS_VALUE)(859,869) + PsiElement(NativeDefinitionsTokenType.VALUE)('non strict')(859,869) + PsiWhiteSpace('\n')(869,870) + NativeDefinitionsStringsKeyImpl(STRINGS_KEY)(870,888) + PsiElement(NativeDefinitionsTokenType.noStringConversion)('noStringConversion')(870,888) + PsiElement(NativeDefinitionsTokenType.linux_arm32_hfp)('.linux_arm32_hfp')(888,904) + PsiWhiteSpace(' ')(904,905) + PsiElement(NativeDefinitionsTokenType.SEPARATOR)('=')(905,906) + PsiWhiteSpace(' ')(906,907) + NativeDefinitionsStringsValueImpl(STRINGS_VALUE)(907,916) + PsiElement(NativeDefinitionsTokenType.VALUE)('no string')(907,916) + PsiWhiteSpace('\n')(916,917) + NativeDefinitionsStringsKeyImpl(STRINGS_KEY)(917,928) + PsiElement(NativeDefinitionsTokenType.strictEnums)('strictEnums')(917,928) + PsiElement(NativeDefinitionsTokenType.android_arm64)('.android_arm64')(928,942) + PsiWhiteSpace(' ')(942,943) + PsiElement(NativeDefinitionsTokenType.SEPARATOR)('=')(943,944) + PsiWhiteSpace(' ')(944,945) + NativeDefinitionsStringsValueImpl(STRINGS_VALUE)(945,957) + PsiElement(NativeDefinitionsTokenType.VALUE)('strict enums')(945,957) + PsiWhiteSpace('\n\n\n')(957,960) + PsiElement(NativeDefinitionsTokenType.DELIM)('---\n')(960,964) + NativeDefinitionsCodeImpl(CODE)(964,1401) + PsiElement(NativeDefinitionsTokenType.CODE_CHARS)('\nstruct Hash { // Line comment.\n int data[2];\n};\n\n/**********************\n * Multiline comment. *\n **********************/\ninline static int strangeSum(const int* buffer, int bufferSize) {\n int result = 20;\n const char * stringLiteral = "This is a string";\n for (int i = 0; i < bufferSize; ++i) {\n result += stringLiteral[i % 10] & 1 == 0 ? (i << 1) : buffer[i / 2];\n if (stringLiter)\n }\n return result;\n}')(964,1401) diff --git a/idea/idea-native/testData/colorHighlighting/badDefinitions.def b/idea/idea-native/testData/colorHighlighting/badDefinitions.def new file mode 100644 index 00000000000..94213333651 --- /dev/null +++ b/idea/idea-native/testData/colorHighlighting/badDefinitions.def @@ -0,0 +1,12 @@ +bad_key +headers = library/base.h +does.not= +linker=clang +affect +package=png +good=one +--- + +static inline int foo(int arg) { + return FOO(arg); +} \ No newline at end of file diff --git a/idea/idea-native/testData/colorHighlighting/badDefinitions.txt b/idea/idea-native/testData/colorHighlighting/badDefinitions.txt new file mode 100644 index 00000000000..c20c3792a50 --- /dev/null +++ b/idea/idea-native/testData/colorHighlighting/badDefinitions.txt @@ -0,0 +1,36 @@ +Definitions file for Kotlin/Native C interop(0,144) + PsiElement(NativeDefinitionsTokenType.)('bad_key')(0,7) + PsiWhiteSpace('\n')(7,8) + NativeDefinitionsStringsKeyImpl(STRINGS_KEY)(8,15) + PsiElement(NativeDefinitionsTokenType.headers)('headers')(8,15) + PsiWhiteSpace(' ')(15,16) + PsiElement(NativeDefinitionsTokenType.SEPARATOR)('=')(16,17) + PsiWhiteSpace(' ')(17,18) + NativeDefinitionsStringsValueImpl(STRINGS_VALUE)(18,32) + PsiElement(NativeDefinitionsTokenType.VALUE)('library/base.h')(18,32) + PsiWhiteSpace('\n')(32,33) + PsiElement(NativeDefinitionsTokenType.)('does')(33,37) + PsiElement(NativeDefinitionsTokenType.)('.not')(37,41) + PsiElement(NativeDefinitionsTokenType.SEPARATOR)('=')(41,42) + PsiWhiteSpace('\n')(42,43) + NativeDefinitionsStringKeyImpl(STRING_KEY)(43,49) + PsiElement(NativeDefinitionsTokenType.linker)('linker')(43,49) + PsiElement(NativeDefinitionsTokenType.SEPARATOR)('=')(49,50) + NativeDefinitionsStringValueImpl(STRING_VALUE)(50,55) + PsiElement(NativeDefinitionsTokenType.VALUE)('clang')(50,55) + PsiWhiteSpace('\n')(55,56) + PsiElement(NativeDefinitionsTokenType.)('affect')(56,62) + PsiWhiteSpace('\n')(62,63) + NativeDefinitionsStringKeyImpl(STRING_KEY)(63,70) + PsiElement(NativeDefinitionsTokenType.package)('package')(63,70) + PsiElement(NativeDefinitionsTokenType.SEPARATOR)('=')(70,71) + NativeDefinitionsStringValueImpl(STRING_VALUE)(71,74) + PsiElement(NativeDefinitionsTokenType.VALUE)('png')(71,74) + PsiWhiteSpace('\n')(74,75) + PsiElement(NativeDefinitionsTokenType.)('good')(75,79) + PsiElement(NativeDefinitionsTokenType.SEPARATOR)('=')(79,80) + PsiElement(NativeDefinitionsTokenType.VALUE)('one')(80,83) + PsiWhiteSpace('\n')(83,84) + PsiElement(NativeDefinitionsTokenType.DELIM)('---\n')(84,88) + NativeDefinitionsCodeImpl(CODE)(88,144) + PsiElement(NativeDefinitionsTokenType.CODE_CHARS)('\nstatic inline int foo(int arg) {\n return FOO(arg);\n}')(88,144) diff --git a/idea/idea-native/tests/org/jetbrains/kotlin/ide/konan/NativeDefinitinosParsingTest.kt b/idea/idea-native/tests/org/jetbrains/kotlin/ide/konan/NativeDefinitinosParsingTest.kt new file mode 100644 index 00000000000..75ef7df3dd8 --- /dev/null +++ b/idea/idea-native/tests/org/jetbrains/kotlin/ide/konan/NativeDefinitinosParsingTest.kt @@ -0,0 +1,22 @@ +/* + * Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.ide.konan + +import com.intellij.testFramework.ParsingTestCase + + +class NativeDefinitionsParsingTest : ParsingTestCase("", "def", NativeDefinitionsParserDefinition()) { + + fun testAllProperties() = doTest(true) + + fun testBadDefinitions() = doTest(true) + + override fun getTestDataPath(): String = "testData/colorHighlighting" + + override fun skipSpaces(): Boolean = false + + override fun includeRanges(): Boolean = true +} \ No newline at end of file diff --git a/idea/resources/META-INF/native.xml b/idea/resources/META-INF/native.xml index accd1c17412..7745fd5418c 100644 --- a/idea/resources/META-INF/native.xml +++ b/idea/resources/META-INF/native.xml @@ -16,6 +16,9 @@ + + + diff --git a/konan/library-reader/src/org/jetbrains/kotlin/konan/library/KonanLibraryConstants.kt b/konan/library-reader/src/org/jetbrains/kotlin/konan/library/KonanLibraryConstants.kt index e83594a373d..b3d6bdaa77d 100644 --- a/konan/library-reader/src/org/jetbrains/kotlin/konan/library/KonanLibraryConstants.kt +++ b/konan/library-reader/src/org/jetbrains/kotlin/konan/library/KonanLibraryConstants.kt @@ -14,6 +14,8 @@ const val KLIB_FILE_EXTENSION_WITH_DOT = ".$KLIB_FILE_EXTENSION" const val KLIB_METADATA_FILE_EXTENSION = "knm" const val KLIB_METADATA_FILE_EXTENSION_WITH_DOT = ".$KLIB_METADATA_FILE_EXTENSION" +const val KDEFINITIONS_FILE_EXTENSION = "def" + const val KLIB_MODULE_METADATA_FILE_NAME = "module" const val KONAN_STDLIB_NAME = "stdlib"