diff --git a/compiler/psi/src/org/jetbrains/kotlin/kdoc/lexer/KDocTokens.java b/compiler/psi/src/org/jetbrains/kotlin/kdoc/lexer/KDocTokens.java index 86d2c5e93db..7762e763527 100644 --- a/compiler/psi/src/org/jetbrains/kotlin/kdoc/lexer/KDocTokens.java +++ b/compiler/psi/src/org/jetbrains/kotlin/kdoc/lexer/KDocTokens.java @@ -76,6 +76,7 @@ public interface KDocTokens { KDocToken MARKDOWN_ESCAPED_CHAR = new KDocToken("KDOC_MARKDOWN_ESCAPED_CHAR", MARKDOWN_ESCAPED_CHAR_Id); KDocToken MARKDOWN_INLINE_LINK = new KDocToken("KDOC_MARKDOWN_INLINE_LINK", MARKDOWN_INLINE_LINK_Id); + @SuppressWarnings("unused") TokenSet KDOC_HIGHLIGHT_TOKENS = TokenSet.create(START, END, LEADING_ASTERISK, TEXT, CODE_BLOCK_TEXT, MARKDOWN_LINK, MARKDOWN_ESCAPED_CHAR, MARKDOWN_INLINE_LINK); TokenSet CONTENT_TOKENS = TokenSet.create(TEXT, CODE_BLOCK_TEXT, TAG_NAME, MARKDOWN_LINK, MARKDOWN_ESCAPED_CHAR, MARKDOWN_INLINE_LINK); } diff --git a/compiler/psi/src/org/jetbrains/kotlin/parsing/AbstractKotlinParsing.java b/compiler/psi/src/org/jetbrains/kotlin/parsing/AbstractKotlinParsing.java index 0ff0b549c89..d6f4034135f 100644 --- a/compiler/psi/src/org/jetbrains/kotlin/parsing/AbstractKotlinParsing.java +++ b/compiler/psi/src/org/jetbrains/kotlin/parsing/AbstractKotlinParsing.java @@ -78,6 +78,16 @@ import static org.jetbrains.kotlin.lexer.KtTokens.*; } protected boolean expect(KtToken expectation, String message, TokenSet recoverySet) { + if (expect(expectation)) { + return true; + } + + errorWithRecovery(message, recoverySet); + + return false; + } + + protected boolean expect(KtToken expectation) { if (at(expectation)) { advance(); // expectation return true; @@ -87,8 +97,6 @@ import static org.jetbrains.kotlin.lexer.KtTokens.*; advance(); } - errorWithRecovery(message, recoverySet); - return false; } diff --git a/compiler/psi/src/org/jetbrains/kotlin/parsing/KotlinExpressionParsing.java b/compiler/psi/src/org/jetbrains/kotlin/parsing/KotlinExpressionParsing.java index edb7b674227..931b5aa4b44 100644 --- a/compiler/psi/src/org/jetbrains/kotlin/parsing/KotlinExpressionParsing.java +++ b/compiler/psi/src/org/jetbrains/kotlin/parsing/KotlinExpressionParsing.java @@ -129,6 +129,7 @@ public class KotlinExpressionParsing extends AbstractKotlinParsing { LBRACKET // Collection literal expression ); + @SuppressWarnings("WeakerAccess") public static final TokenSet STATEMENT_FIRST = TokenSet.orSet( EXPRESSION_FIRST, TokenSet.create( @@ -202,7 +203,7 @@ public class KotlinExpressionParsing extends AbstractKotlinParsing { ; static { - Precedence[] values = Precedence.values(); + Precedence[] values = values(); for (Precedence precedence : values) { int ordinal = precedence.ordinal(); precedence.higher = ordinal > 0 ? values[ordinal - 1] : null; @@ -238,7 +239,7 @@ public class KotlinExpressionParsing extends AbstractKotlinParsing { } } - public static final TokenSet ALLOW_NEWLINE_OPERATIONS = TokenSet.create( + private static final TokenSet ALLOW_NEWLINE_OPERATIONS = TokenSet.create( DOT, SAFE_ACCESS, COLON, AS_KEYWORD, AS_SAFE, ELVIS, @@ -255,7 +256,7 @@ public class KotlinExpressionParsing extends AbstractKotlinParsing { for (Precedence precedence : values) { operations.addAll(Arrays.asList(precedence.getOperations().getTypes())); } - ALL_OPERATIONS = TokenSet.create(operations.toArray(new IElementType[operations.size()])); + ALL_OPERATIONS = TokenSet.create(operations.toArray(new IElementType[0])); } static { @@ -862,7 +863,7 @@ public class KotlinExpressionParsing extends AbstractKotlinParsing { advanceAt(LPAR); PsiBuilder.Marker atWhenStart = mark(); - myKotlinParsing.parseAnnotationsList(DEFAULT, EQ_RPAR_SET); + myKotlinParsing.parseAnnotationsList(EQ_RPAR_SET); if (at(VAL_KEYWORD) || at(VAR_KEYWORD)) { IElementType declType = myKotlinParsing.parseProperty(KotlinParsing.DeclarationParsingMode.LOCAL); @@ -1115,7 +1116,7 @@ public class KotlinExpressionParsing extends AbstractKotlinParsing { private boolean parseLocalDeclaration(boolean rollbackIfDefinitelyNotExpression, boolean isScriptTopLevel) { PsiBuilder.Marker decl = mark(); KotlinParsing.ModifierDetector detector = new KotlinParsing.ModifierDetector(); - myKotlinParsing.parseModifierList(detector, DEFAULT, TokenSet.EMPTY); + myKotlinParsing.parseModifierList(detector, TokenSet.EMPTY); IElementType declType = parseLocalDeclarationRest(detector, rollbackIfDefinitelyNotExpression, isScriptTopLevel); @@ -1158,13 +1159,14 @@ public class KotlinExpressionParsing extends AbstractKotlinParsing { boolean paramsFound = false; - if (at(ARROW)) { + IElementType token = tt(); + if (token == ARROW) { // { -> ...} mark().done(VALUE_PARAMETER_LIST); advance(); // ARROW paramsFound = true; } - else if (at(IDENTIFIER) || at(COLON) || at(LPAR)) { + else if (token == IDENTIFIER || token == COLON || token == LPAR) { // Try to parse a simple name list followed by an ARROW // {a -> ...} // {a, b -> ...} @@ -1480,7 +1482,7 @@ public class KotlinExpressionParsing extends AbstractKotlinParsing { PsiBuilder.Marker parameter = mark(); if (!at(IN_KEYWORD)) { - myKotlinParsing.parseModifierList(DEFAULT, IN_KEYWORD_R_PAR_COLON_SET); + myKotlinParsing.parseModifierList(IN_KEYWORD_R_PAR_COLON_SET); } if (at(VAL_KEYWORD) || at(VAR_KEYWORD)) advance(); // VAL_KEYWORD or VAR_KEYWORD diff --git a/compiler/psi/src/org/jetbrains/kotlin/parsing/KotlinParser.java b/compiler/psi/src/org/jetbrains/kotlin/parsing/KotlinParser.java index 8a4a7a8a151..f2056bd265a 100644 --- a/compiler/psi/src/org/jetbrains/kotlin/parsing/KotlinParser.java +++ b/compiler/psi/src/org/jetbrains/kotlin/parsing/KotlinParser.java @@ -41,7 +41,7 @@ public class KotlinParser implements PsiParser { // we need this method because we need psiFile @NotNull - public ASTNode parse(IElementType iElementType, PsiBuilder psiBuilder, PsiFile psiFile) { + public static ASTNode parse(PsiBuilder psiBuilder, PsiFile psiFile) { KotlinParsing ktParsing = KotlinParsing.createForTopLevel(new SemanticWhitespaceAwarePsiBuilderImpl(psiBuilder)); String extension = FileUtilRt.getExtension(psiFile.getName()); if (extension.isEmpty() || extension.equals(KotlinFileType.EXTENSION) || (psiFile instanceof KtFile && ((KtFile) psiFile).isCompiled())) { diff --git a/compiler/psi/src/org/jetbrains/kotlin/parsing/KotlinParserDefinition.kt b/compiler/psi/src/org/jetbrains/kotlin/parsing/KotlinParserDefinition.kt index 0503320d6e1..17fe4425b1b 100644 --- a/compiler/psi/src/org/jetbrains/kotlin/parsing/KotlinParserDefinition.kt +++ b/compiler/psi/src/org/jetbrains/kotlin/parsing/KotlinParserDefinition.kt @@ -74,6 +74,7 @@ class KotlinParserDefinition : ParserDefinition { override fun createFile(fileViewProvider: FileViewProvider): PsiFile = KtFile(fileViewProvider, false) + @Deprecated("Deprecated in Java") override fun spaceExistanceTypeBetweenTokens(left: ASTNode, right: ASTNode): ParserDefinition.SpaceRequirements { val rightTokenType = right.elementType diff --git a/compiler/psi/src/org/jetbrains/kotlin/parsing/KotlinParsing.java b/compiler/psi/src/org/jetbrains/kotlin/parsing/KotlinParsing.java index e0193bdc311..24569e45095 100644 --- a/compiler/psi/src/org/jetbrains/kotlin/parsing/KotlinParsing.java +++ b/compiler/psi/src/org/jetbrains/kotlin/parsing/KotlinParsing.java @@ -287,7 +287,7 @@ public class KotlinParsing extends AbstractKotlinParsing { * ; */ PsiBuilder.Marker packageDirective = mark(); - parseModifierList(DEFAULT, TokenSet.EMPTY); + parseModifierList(TokenSet.EMPTY); if (at(PACKAGE_KEYWORD)) { advance(); // PACKAGE_KEYWORD @@ -495,7 +495,7 @@ public class KotlinParsing extends AbstractKotlinParsing { } ModifierDetector detector = new ModifierDetector(); - parseModifierList(detector, DEFAULT, TokenSet.EMPTY); + parseModifierList(detector, TokenSet.EMPTY); IElementType declType = parseCommonDeclaration(detector, NameParsingMode.REQUIRED, DeclarationParsingMode.MEMBER_OR_TOPLEVEL); @@ -550,46 +550,36 @@ public class KotlinParsing extends AbstractKotlinParsing { /* * (modifier | annotation)* */ - boolean parseModifierList( - @NotNull AnnotationParsingMode annotationParsingMode, - @NotNull TokenSet noModifiersBefore - ) { - return parseModifierList(null, annotationParsingMode, noModifiersBefore); + boolean parseModifierList(@NotNull TokenSet noModifiersBefore) { + return parseModifierList(null, noModifiersBefore); } - boolean parseAnnotationsList( - @NotNull AnnotationParsingMode annotationParsingMode, - @NotNull TokenSet noModifiersBefore - ) { - return doParseModifierList(null, TokenSet.EMPTY, annotationParsingMode, noModifiersBefore); + void parseAnnotationsList(@NotNull TokenSet noModifiersBefore) { + doParseModifierList(null, TokenSet.EMPTY, AnnotationParsingMode.DEFAULT, noModifiersBefore); } /** * (modifier | annotation)* - * + *

* Feeds modifiers (not annotations) into the passed consumer, if it is not null * * @param noModifiersBefore is a token set with elements indicating when met them * that previous token must be parsed as an identifier rather than modifier */ - boolean parseModifierList( - @Nullable Consumer tokenConsumer, - @NotNull AnnotationParsingMode annotationParsingMode, - @NotNull TokenSet noModifiersBefore - ) { - return doParseModifierList(tokenConsumer, MODIFIER_KEYWORDS, annotationParsingMode, noModifiersBefore); + boolean parseModifierList(@Nullable Consumer tokenConsumer, @NotNull TokenSet noModifiersBefore) { + return doParseModifierList(tokenConsumer, MODIFIER_KEYWORDS, AnnotationParsingMode.DEFAULT, noModifiersBefore); } - private boolean parseFunctionTypeValueParameterModifierList() { - return doParseModifierList(null, RESERVED_VALUE_PARAMETER_MODIFIER_KEYWORDS, NO_ANNOTATIONS, NO_MODIFIER_BEFORE_FOR_VALUE_PARAMETER); + private void parseFunctionTypeValueParameterModifierList() { + doParseModifierList(null, RESERVED_VALUE_PARAMETER_MODIFIER_KEYWORDS, NO_ANNOTATIONS, NO_MODIFIER_BEFORE_FOR_VALUE_PARAMETER); } - private boolean parseTypeModifierList() { - return doParseModifierList(null, TYPE_MODIFIER_KEYWORDS, TYPE_CONTEXT, TokenSet.EMPTY); + private void parseTypeModifierList() { + doParseModifierList(null, TYPE_MODIFIER_KEYWORDS, TYPE_CONTEXT, TokenSet.EMPTY); } - private boolean parseTypeArgumentModifierList() { - return doParseModifierList(null, TYPE_ARGUMENT_MODIFIER_KEYWORDS, NO_ANNOTATIONS, COMMA_COLON_GT_SET); + private void parseTypeArgumentModifierList() { + doParseModifierList(null, TYPE_ARGUMENT_MODIFIER_KEYWORDS, NO_ANNOTATIONS, COMMA_COLON_GT_SET); } private boolean doParseModifierListBody( @@ -951,7 +941,7 @@ public class KotlinParsing extends AbstractKotlinParsing { PsiBuilder.Marker reference = mark(); PsiBuilder.Marker typeReference = mark(); - parseUserType(/* allowSimpleIntersectionTypes */ false); + parseUserType(); typeReference.done(TYPE_REFERENCE); reference.done(CONSTRUCTOR_CALLEE); @@ -1053,7 +1043,7 @@ public class KotlinParsing extends AbstractKotlinParsing { PsiBuilder.Marker beforeConstructorModifiers = mark(); PsiBuilder.Marker primaryConstructorMarker = mark(); - boolean hasConstructorModifiers = parseModifierList(DEFAULT, TokenSet.EMPTY); + boolean hasConstructorModifiers = parseModifierList(TokenSet.EMPTY); // Some modifiers found, but no parentheses following: class has already ended, and we are looking at something else if (hasConstructorModifiers && !atSet(LPAR_LBRACE_COLON_CONSTRUCTOR_KEYWORD_SET)) { @@ -1192,7 +1182,7 @@ public class KotlinParsing extends AbstractKotlinParsing { private ParseEnumEntryResult parseEnumEntry() { PsiBuilder.Marker entry = mark(); - parseModifierList(DEFAULT, COMMA_SEMICOLON_RBRACE_SET); + parseModifierList(COMMA_SEMICOLON_RBRACE_SET); if (!atSet(SOFT_KEYWORDS_AT_MEMBER_START) && at(IDENTIFIER)) { advance(); // IDENTIFIER @@ -1301,7 +1291,7 @@ public class KotlinParsing extends AbstractKotlinParsing { } ModifierDetector detector = new ModifierDetector(); - parseModifierList(detector, DEFAULT, TokenSet.EMPTY); + parseModifierList(detector, TokenSet.EMPTY); IElementType declType = parseMemberDeclarationRest(detector); @@ -1605,7 +1595,7 @@ public class KotlinParsing extends AbstractKotlinParsing { } PsiBuilder.Marker property = mark(); - parseModifierList(DEFAULT, COMMA_RPAR_COLON_EQ_SET); + parseModifierList(COMMA_RPAR_COLON_EQ_SET); expect(IDENTIFIER, "Expecting a name", recoverySet); @@ -1659,7 +1649,7 @@ public class KotlinParsing extends AbstractKotlinParsing { private PropertyComponentKind parsePropertyComponent(PropertyComponentKind.Collector notAllowedKind) { PsiBuilder.Marker propertyComponent = mark(); - parseModifierList(DEFAULT, TokenSet.EMPTY); + parseModifierList(TokenSet.EMPTY); PropertyComponentKind propertyComponentKind; if (at(GET_KEYWORD)) { @@ -1701,7 +1691,7 @@ public class KotlinParsing extends AbstractKotlinParsing { if (propertyComponentKind == PropertyComponentKind.SET) { PsiBuilder.Marker parameterList = mark(); PsiBuilder.Marker setterParameter = mark(); - parseModifierList(DEFAULT, COMMA_COLON_RPAR_SET); + parseModifierList(COMMA_COLON_RPAR_SET); expect(IDENTIFIER, "Expecting parameter name", RPAR_COLON_LBRACE_EQ_SET); if (at(COLON)) { @@ -1748,7 +1738,7 @@ public class KotlinParsing extends AbstractKotlinParsing { } @NotNull - IElementType parseFunction() { + private IElementType parseFunction() { return parseFunction(false); } @@ -1883,11 +1873,17 @@ public class KotlinParsing extends AbstractKotlinParsing { /* * IDENTIFIER */ - private boolean parseFunctionOrPropertyName(boolean receiverFound, String title, TokenSet nameFollow, TokenSet recoverySet, boolean nameRequired) { - if (!nameRequired && atSet(nameFollow)) return true; // no name + private void parseFunctionOrPropertyName(boolean receiverFound, String title, TokenSet nameFollow, TokenSet recoverySet, boolean nameRequired) { + if (!nameRequired && atSet(nameFollow)) return; // no name - String expectingMessage = "Expecting " + title + " name" + (!receiverFound ? " or receiver type" : ""); - return expect(IDENTIFIER, expectingMessage, recoverySet); + if (expect(IDENTIFIER)) { + return; + } + + errorWithRecovery( + "Expecting " + title + " name" + (!receiverFound ? " or receiver type" : ""), + recoverySet + ); } /* @@ -2135,7 +2131,7 @@ public class KotlinParsing extends AbstractKotlinParsing { PsiBuilder.Marker mark = mark(); - parseModifierList(DEFAULT, GT_COMMA_COLON_SET); + parseModifierList(GT_COMMA_COLON_SET); expect(IDENTIFIER, "Type parameter name expected", TokenSet.EMPTY); @@ -2209,7 +2205,7 @@ public class KotlinParsing extends AbstractKotlinParsing { dynamicType.done(DYNAMIC_TYPE); } else if (at(IDENTIFIER) || at(PACKAGE_KEYWORD) || atParenthesizedMutableForPlatformTypes(0)) { - parseUserType(allowSimpleIntersectionTypes); + parseUserType(); } else if (at(LPAR)) { PsiBuilder.Marker functionOrParenthesizedType = mark(); @@ -2323,7 +2319,7 @@ public class KotlinParsing extends AbstractKotlinParsing { * - (Mutable)List! * - Array<(out) Foo>! */ - private void parseUserType(boolean allowSimpleIntersectionTypes) { + private void parseUserType() { PsiBuilder.Marker userType = mark(); if (at(PACKAGE_KEYWORD)) { @@ -2416,15 +2412,14 @@ public class KotlinParsing extends AbstractKotlinParsing { /* * (optionalProjection type){","} */ - private PsiBuilder.Marker parseTypeArgumentList() { - if (!at(LT)) return null; + private void parseTypeArgumentList() { + if (!at(LT)) return; PsiBuilder.Marker list = mark(); tryParseTypeArgumentList(TokenSet.EMPTY); list.done(TYPE_ARGUMENT_LIST); - return list; } boolean tryParseTypeArgumentList(TokenSet extraRecoverySet) { @@ -2566,7 +2561,7 @@ public class KotlinParsing extends AbstractKotlinParsing { private boolean parseValueParameter(boolean rollbackOnFailure, boolean typeRequired) { PsiBuilder.Marker parameter = mark(); - parseModifierList(DEFAULT, NO_MODIFIER_BEFORE_FOR_VALUE_PARAMETER); + parseModifierList(NO_MODIFIER_BEFORE_FOR_VALUE_PARAMETER); if (at(VAR_KEYWORD) || at(VAL_KEYWORD)) { advance(); // VAR_KEYWORD | VAL_KEYWORD @@ -2667,10 +2662,10 @@ public class KotlinParsing extends AbstractKotlinParsing { WITH_SIGNIFICANT_WHITESPACE_BEFORE_ARGUMENTS(false, true, true, true), NO_ANNOTATIONS(false, false, false, false); - boolean isFileAnnotationParsingMode; - boolean allowAnnotations; - boolean withSignificantWhitespaceBeforeArguments; - boolean typeContext; + final boolean isFileAnnotationParsingMode; + final boolean allowAnnotations; + final boolean withSignificantWhitespaceBeforeArguments; + final boolean typeContext; AnnotationParsingMode( boolean isFileAnnotationParsingMode, diff --git a/compiler/psi/src/org/jetbrains/kotlin/parsing/LastBefore.java b/compiler/psi/src/org/jetbrains/kotlin/parsing/LastBefore.java index c3bd59546e5..f8eb290310a 100644 --- a/compiler/psi/src/org/jetbrains/kotlin/parsing/LastBefore.java +++ b/compiler/psi/src/org/jetbrains/kotlin/parsing/LastBefore.java @@ -20,10 +20,9 @@ public class LastBefore extends AbstractTokenStreamPattern { private final boolean dontStopRightAfterOccurrence; private final TokenStreamPredicate lookFor; private final TokenStreamPredicate stopAt; - private boolean previousLookForResult; - public LastBefore(TokenStreamPredicate lookFor, TokenStreamPredicate stopAt, boolean dontStopRightAfterOccurrence) { + private LastBefore(TokenStreamPredicate lookFor, TokenStreamPredicate stopAt, boolean dontStopRightAfterOccurrence) { this.lookFor = lookFor; this.stopAt = stopAt; this.dontStopRightAfterOccurrence = dontStopRightAfterOccurrence; diff --git a/compiler/psi/src/org/jetbrains/kotlin/parsing/ParseUtils.kt b/compiler/psi/src/org/jetbrains/kotlin/parsing/ParseUtils.kt index ce110f3aa32..8cc06d91bce 100644 --- a/compiler/psi/src/org/jetbrains/kotlin/parsing/ParseUtils.kt +++ b/compiler/psi/src/org/jetbrains/kotlin/parsing/ParseUtils.kt @@ -10,7 +10,7 @@ import com.intellij.util.text.LiteralFormatUtil import org.jetbrains.kotlin.KtNodeTypes import org.jetbrains.kotlin.utils.extractRadix -private val FP_LITERAL_PARTS = "(?:([_\\d]*)\\.?([_\\d]*)e?[+-]?([_\\d]*))[f]?".toRegex() +private val FP_LITERAL_PARTS = "([_\\d]*)\\.?([_\\d]*)e?[+-]?([_\\d]*)[f]?".toRegex() fun hasIllegalUnderscore(text: String, elementType: IElementType): Boolean { val parts: List = if (elementType === KtNodeTypes.INTEGER_CONSTANT) { @@ -79,32 +79,32 @@ private fun parseLong(text: String): Long? { } private fun parseFloatingLiteral(text: String): Number? { - if (text.lowercase().endsWith('f')) { + if (text.endsWith('f') || text.endsWith('F')) { return parseFloat(text) } return parseDouble(text) } private fun parseDouble(text: String): Double? { - try { - return java.lang.Double.parseDouble(text) + return try { + java.lang.Double.parseDouble(text) } catch (e: NumberFormatException) { - return null + null } } private fun parseFloat(text: String): Float? { - try { - return java.lang.Float.parseFloat(text) + return try { + java.lang.Float.parseFloat(text) } catch (e: NumberFormatException) { - return null + null } } fun parseBoolean(text: String): Boolean { - if ("true".equals(text)) { + if ("true" == text) { return true - } else if ("false".equals(text)) { + } else if ("false" == text) { return false } diff --git a/compiler/psi/src/org/jetbrains/kotlin/parsing/SemanticWhitespaceAwarePsiBuilder.java b/compiler/psi/src/org/jetbrains/kotlin/parsing/SemanticWhitespaceAwarePsiBuilder.java index b4c940556aa..64b05d6f7f3 100644 --- a/compiler/psi/src/org/jetbrains/kotlin/parsing/SemanticWhitespaceAwarePsiBuilder.java +++ b/compiler/psi/src/org/jetbrains/kotlin/parsing/SemanticWhitespaceAwarePsiBuilder.java @@ -32,5 +32,6 @@ public interface SemanticWhitespaceAwarePsiBuilder extends PsiBuilder { void enableJoiningComplexTokens(); void disableJoiningComplexTokens(); + @Override boolean isWhitespaceOrComment(@NotNull IElementType elementType); } diff --git a/compiler/psi/src/org/jetbrains/kotlin/psi/stubs/elements/KtFileElementType.java b/compiler/psi/src/org/jetbrains/kotlin/psi/stubs/elements/KtFileElementType.java index 03443efef6a..d1e9c68ddf4 100644 --- a/compiler/psi/src/org/jetbrains/kotlin/psi/stubs/elements/KtFileElementType.java +++ b/compiler/psi/src/org/jetbrains/kotlin/psi/stubs/elements/KtFileElementType.java @@ -39,7 +39,7 @@ public class KtFileElementType extends IStubFileElementType { public static KtFileElementType INSTANCE = new KtFileElementType(); - public KtFileElementType() { + private KtFileElementType() { super(NAME, KotlinLanguage.INSTANCE); } @@ -80,8 +80,7 @@ public class KtFileElementType extends IStubFileElementType { Project project = psi.getProject(); Language languageForParser = getLanguageForParser(psi); PsiBuilder builder = PsiBuilderFactory.getInstance().createBuilder(project, chameleon, null, languageForParser, chameleon.getChars()); - KotlinParser parser = (KotlinParser) LanguageParserDefinitions.INSTANCE.forLanguage(languageForParser).createParser(project); - return parser.parse(this, builder, psi.getContainingFile()).getFirstChildNode(); + return KotlinParser.parse(builder, psi.getContainingFile()).getFirstChildNode(); } @Override