Add syntax highlighting for *.def files

This commit is contained in:
kirill.shmakov
2019-02-01 11:37:03 +03:00
parent 8b286faa6a
commit 6c8b3d03fd
31 changed files with 2796 additions and 2 deletions
+6 -2
View File
@@ -13,8 +13,12 @@ dependencies {
}
sourceSets {
"main" { projectDefault() }
"test" { none() }
"main" {
projectDefault()
java.srcDir("gen")
}
"test" { projectDefault() }
}
configureFormInstrumentation()
File diff suppressed because it is too large Load Diff
@@ -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, "<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, "<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, "<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;
}
}
@@ -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 {
}
@@ -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);
}
}
@@ -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 {
}
@@ -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);
}
}
@@ -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 {
}
@@ -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);
}
}
@@ -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 {
}
@@ -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);
}
}
@@ -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 {
}
@@ -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);
}
}
@@ -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 {
}
@@ -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);
}
}
@@ -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 {
}
@@ -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);
}
}
@@ -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("<unknown key>");
IElementType UNKNOWN_PLATFORM = new NativeDefinitionsTokenType("<unknown platform>");
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);
}
}
}
@@ -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);
}
}
@@ -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)
}
}
@@ -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 key>"
UNKNOWN_PLATFORM="<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
@@ -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; }
<YYINITIAL> {
{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; }
}
<WAITING_PLATFORM> {
[.]{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; }
}
<WAITING_VALUE> {FIRST_VALUE_CHAR}{VALUE_CHAR}* { yybegin(YYINITIAL); return VALUE; }
<CODE_END> [^]* { return CODE_CHARS; }
{CRLF}({CRLF}|{WHITE_SPACE})* { yybegin(YYINITIAL); return TokenType.WHITE_SPACE; }
[^\r\n\R] { yybegin(YYINITIAL); return TokenType.BAD_CHARACTER; }
@@ -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<TextAttributesKey> =
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<TextAttributesKey> {
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<TextAttributesKey>()
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
}
@@ -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<NativeDefinitionsCodeImpl>(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<out PsiLanguageInjectionHost> {
return CodeEscaper(this)
}
override fun isValidHost(): Boolean = true
}
@@ -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;
}
@@ -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)
@@ -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);
}
@@ -0,0 +1,36 @@
Definitions file for Kotlin/Native C interop(0,144)
PsiElement(NativeDefinitionsTokenType.<unknown key>)('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.<unknown key>)('does')(33,37)
PsiElement(NativeDefinitionsTokenType.<unknown platform>)('.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.<unknown key>)('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.<unknown key>)('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)
@@ -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
}
+3
View File
@@ -16,6 +16,9 @@
<fileTypeFactory implementation="org.jetbrains.kotlin.ide.konan.KotlinNativeFileTypeFactory"/>
<fileBasedIndex implementation="org.jetbrains.kotlin.ide.konan.index.KotlinNativeMetaFileIndex"/>
<library.type implementation="org.jetbrains.kotlin.ide.konan.NativeLibraryType"/>
<lang.parserDefinition language="KND" implementationClass="org.jetbrains.kotlin.ide.konan.NativeDefinitionsParserDefinition"/>
<lang.syntaxHighlighterFactory language="KND" implementationClass="org.jetbrains.kotlin.ide.konan.NativeDefinitionsSyntaxHighlighterFactory"/>
<languageInjector implementation="org.jetbrains.kotlin.ide.konan.CLanguageInjector"/>
</extensions>
<extensions defaultExtensionNs="org.jetbrains.kotlin">
@@ -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"