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"