[PSI] avoid loading KtFile class during parsing of chameleons

^KTIJ-28801 fixed
This commit is contained in:
Anna Kozlova
2024-02-14 15:30:16 +01:00
committed by Space Team
parent d925d3be76
commit b4b1c7cd69
@@ -25,7 +25,6 @@ import com.intellij.psi.PsiFile;
import com.intellij.psi.tree.IElementType;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.idea.KotlinFileType;
import org.jetbrains.kotlin.psi.KtFile;
public class KotlinParser implements PsiParser {
@@ -44,7 +43,7 @@ public class KotlinParser implements PsiParser {
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())) {
if (extension.isEmpty() || extension.equals(KotlinFileType.EXTENSION) || isCompiledFile(psiFile)) {
ktParsing.parseFile();
}
else {
@@ -53,6 +52,13 @@ public class KotlinParser implements PsiParser {
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
public static ASTNode parseTypeCodeFragment(PsiBuilder psiBuilder) {
KotlinParsing ktParsing = KotlinParsing.createForTopLevel(new SemanticWhitespaceAwarePsiBuilderImpl(psiBuilder));