Do not store script definition in psiFile
This may cause problems when definitions are reordered or switched off KT-27375 Fixed
This commit is contained in:
@@ -18,8 +18,6 @@ package org.jetbrains.kotlin.psi;
|
||||
|
||||
import com.intellij.lang.ASTNode;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import kotlin.Lazy;
|
||||
import kotlin.LazyKt;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.kotlin.name.FqName;
|
||||
import org.jetbrains.kotlin.psi.stubs.KotlinScriptStub;
|
||||
@@ -29,14 +27,12 @@ import org.jetbrains.kotlin.script.ScriptDefinitionProvider;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static kotlin.LazyThreadSafetyMode.PUBLICATION;
|
||||
|
||||
public class KtScript extends KtNamedDeclarationStub<KotlinScriptStub> implements KtDeclarationContainer {
|
||||
public final Lazy<KotlinScriptDefinition> kotlinScriptDefinition = LazyKt.lazy(PUBLICATION, () -> {
|
||||
public KotlinScriptDefinition getKotlinScriptDefinition() {
|
||||
ScriptDefinitionProvider definitionsProvider = ScriptDefinitionProvider.Companion.getInstance(getProject());
|
||||
KotlinScriptDefinition definition = definitionsProvider.findScriptDefinition(getContainingKtFile().getName());
|
||||
return definition != null ? definition : definitionsProvider.getDefaultScriptDefinition();
|
||||
});
|
||||
}
|
||||
|
||||
public KtScript(@NotNull ASTNode node) {
|
||||
super(node);
|
||||
@@ -54,7 +50,7 @@ public class KtScript extends KtNamedDeclarationStub<KotlinScriptStub> implement
|
||||
return stub.getFqName();
|
||||
}
|
||||
KtFile containingKtFile = getContainingKtFile();
|
||||
return containingKtFile.getPackageFqName().child(kotlinScriptDefinition.getValue().getScriptName(this));
|
||||
return containingKtFile.getPackageFqName().child(getKotlinScriptDefinition().getScriptName(this));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -22,7 +22,6 @@ import com.intellij.openapi.components.ServiceManager
|
||||
import com.intellij.openapi.project.DumbService
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.psi.PsiFile
|
||||
import com.intellij.psi.PsiManager
|
||||
import org.jetbrains.kotlin.idea.KotlinFileType
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
@@ -55,18 +54,13 @@ fun findScriptDefinition(file: VirtualFile, project: Project): KotlinScriptDefin
|
||||
if (psiFile != null) {
|
||||
if (psiFile !is KtFile) return null
|
||||
if (!DumbService.isDumb(project)) {
|
||||
return psiFile.script?.kotlinScriptDefinition?.value
|
||||
return psiFile.script?.kotlinScriptDefinition
|
||||
}
|
||||
}
|
||||
|
||||
return ScriptDefinitionProvider.getInstance(project).findScriptDefinition(file.name)
|
||||
}
|
||||
|
||||
fun findScriptDefinition(psiFile: PsiFile): KotlinScriptDefinition? {
|
||||
if (psiFile.isDirectory) return null
|
||||
return (psiFile as? KtFile)?.script?.kotlinScriptDefinition?.value
|
||||
}
|
||||
|
||||
abstract class LazyScriptDefinitionProvider : ScriptDefinitionProvider {
|
||||
|
||||
protected val lock = ReentrantReadWriteLock()
|
||||
|
||||
Reference in New Issue
Block a user