[PSI] avoid loading KtFile class during parsing of chameleons
^KTIJ-28801 fixed
This commit is contained in:
@@ -25,7 +25,6 @@ import com.intellij.psi.PsiFile;
|
|||||||
import com.intellij.psi.tree.IElementType;
|
import com.intellij.psi.tree.IElementType;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.kotlin.idea.KotlinFileType;
|
import org.jetbrains.kotlin.idea.KotlinFileType;
|
||||||
import org.jetbrains.kotlin.psi.KtFile;
|
|
||||||
|
|
||||||
public class KotlinParser implements PsiParser {
|
public class KotlinParser implements PsiParser {
|
||||||
|
|
||||||
@@ -44,7 +43,7 @@ public class KotlinParser implements PsiParser {
|
|||||||
public static ASTNode parse(PsiBuilder psiBuilder, PsiFile psiFile) {
|
public static ASTNode parse(PsiBuilder psiBuilder, PsiFile psiFile) {
|
||||||
KotlinParsing ktParsing = KotlinParsing.createForTopLevel(new SemanticWhitespaceAwarePsiBuilderImpl(psiBuilder));
|
KotlinParsing ktParsing = KotlinParsing.createForTopLevel(new SemanticWhitespaceAwarePsiBuilderImpl(psiBuilder));
|
||||||
String extension = FileUtilRt.getExtension(psiFile.getName());
|
String extension = FileUtilRt.getExtension(psiFile.getName());
|
||||||
if (extension.isEmpty() || extension.equals(KotlinFileType.EXTENSION) || (psiFile instanceof KtFile && ((KtFile) psiFile).isCompiled())) {
|
if (extension.isEmpty() || extension.equals(KotlinFileType.EXTENSION) || isCompiledFile(psiFile)) {
|
||||||
ktParsing.parseFile();
|
ktParsing.parseFile();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -53,6 +52,13 @@ public class KotlinParser implements PsiParser {
|
|||||||
return psiBuilder.getTreeBuilt();
|
return psiBuilder.getTreeBuilt();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings({"deprecation", "UnnecessaryFullyQualifiedName"})
|
||||||
|
private static boolean isCompiledFile(PsiFile psiFile) {
|
||||||
|
//avoid loading KtFile which depends on java psi, which is not available in some setup
|
||||||
|
//e.g. remote dev https://youtrack.jetbrains.com/issue/GTW-7554
|
||||||
|
return psiFile instanceof org.jetbrains.kotlin.psi.KtCommonFile && ((org.jetbrains.kotlin.psi.KtCommonFile) psiFile).isCompiled();
|
||||||
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public static ASTNode parseTypeCodeFragment(PsiBuilder psiBuilder) {
|
public static ASTNode parseTypeCodeFragment(PsiBuilder psiBuilder) {
|
||||||
KotlinParsing ktParsing = KotlinParsing.createForTopLevel(new SemanticWhitespaceAwarePsiBuilderImpl(psiBuilder));
|
KotlinParsing ktParsing = KotlinParsing.createForTopLevel(new SemanticWhitespaceAwarePsiBuilderImpl(psiBuilder));
|
||||||
|
|||||||
Reference in New Issue
Block a user