From c802428326b14454165f385d77b66227b82de849 Mon Sep 17 00:00:00 2001 From: Natalia Selezneva Date: Tue, 31 Jul 2018 15:58:02 +0300 Subject: [PATCH] Do not check script definitions in parser --- .../org/jetbrains/kotlin/parsing/KotlinParser.java | 14 +++++++------- .../javac/diagnostics/tests/inners/Nested.kt | 2 +- .../kotlin/console/KotlinConsoleRunner.kt | 6 +++++- .../copy/ConvertTextJavaCopyPasteProcessor.kt | 2 +- 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/compiler/psi/src/org/jetbrains/kotlin/parsing/KotlinParser.java b/compiler/psi/src/org/jetbrains/kotlin/parsing/KotlinParser.java index 4e07e2c000d..e6bb98915de 100644 --- a/compiler/psi/src/org/jetbrains/kotlin/parsing/KotlinParser.java +++ b/compiler/psi/src/org/jetbrains/kotlin/parsing/KotlinParser.java @@ -20,17 +20,17 @@ import com.intellij.lang.ASTNode; import com.intellij.lang.PsiBuilder; import com.intellij.lang.PsiParser; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.io.FileUtilRt; import com.intellij.psi.PsiFile; import com.intellij.psi.tree.IElementType; import org.jetbrains.annotations.NotNull; -import org.jetbrains.kotlin.script.ScriptDefinitionProvider; +import org.jetbrains.kotlin.idea.KotlinFileType; +import org.jetbrains.kotlin.psi.KtFile; public class KotlinParser implements PsiParser { - private final ScriptDefinitionProvider scriptDefinitionProvider; public KotlinParser(Project project) { - scriptDefinitionProvider = ScriptDefinitionProvider.Companion.getInstance(project); } @Override @@ -43,12 +43,12 @@ public class KotlinParser implements PsiParser { @NotNull public ASTNode parse(IElementType iElementType, PsiBuilder psiBuilder, PsiFile psiFile) { KotlinParsing ktParsing = KotlinParsing.createForTopLevel(new SemanticWhitespaceAwarePsiBuilderImpl(psiBuilder)); - if (scriptDefinitionProvider != null && scriptDefinitionProvider.isScript(psiFile.getName()) - || psiFile.getName().endsWith(KotlinParserDefinition.STD_SCRIPT_EXT)) { - ktParsing.parseScript(); + String extension = FileUtilRt.getExtension(psiFile.getName()); + if (extension.isEmpty() || extension.equals(KotlinFileType.EXTENSION) || (psiFile instanceof KtFile && ((KtFile) psiFile).isCompiled())) { + ktParsing.parseFile(); } else { - ktParsing.parseFile(); + ktParsing.parseScript(); } return psiBuilder.getTreeBuilt(); } diff --git a/compiler/testData/javac/diagnostics/tests/inners/Nested.kt b/compiler/testData/javac/diagnostics/tests/inners/Nested.kt index 1bb7bc143d4..7bc94acebe8 100644 --- a/compiler/testData/javac/diagnostics/tests/inners/Nested.kt +++ b/compiler/testData/javac/diagnostics/tests/inners/Nested.kt @@ -1,4 +1,4 @@ -// FILE: p/p.kt; +// FILE: p/p.kt package p object Object { diff --git a/idea/idea-repl/src/org/jetbrains/kotlin/console/KotlinConsoleRunner.kt b/idea/idea-repl/src/org/jetbrains/kotlin/console/KotlinConsoleRunner.kt index 9a62deb2005..8bb442735e1 100644 --- a/idea/idea-repl/src/org/jetbrains/kotlin/console/KotlinConsoleRunner.kt +++ b/idea/idea-repl/src/org/jetbrains/kotlin/console/KotlinConsoleRunner.kt @@ -59,7 +59,7 @@ import org.jetbrains.kotlin.idea.caches.project.NotUnderContentRootModuleInfo import org.jetbrains.kotlin.idea.caches.project.forcedModuleInfo import org.jetbrains.kotlin.idea.caches.project.productionSourceInfo import org.jetbrains.kotlin.idea.caches.project.testSourceInfo -import org.jetbrains.kotlin.idea.caches.resolve.* +import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor import org.jetbrains.kotlin.idea.core.script.ScriptDefinitionContributor import org.jetbrains.kotlin.idea.core.script.ScriptDefinitionsManager import org.jetbrains.kotlin.idea.project.KOTLIN_CONSOLE_KEY @@ -143,6 +143,10 @@ class KotlinConsoleRunner( val builder = LanguageConsoleBuilder() val consoleView = builder.gutterContentProvider(ConsoleGutterContentProvider()).build(project, KotlinLanguage.INSTANCE) + + // This rename is needed to parse file in console as script + consoleView.virtualFile.rename(this, consoleView.virtualFile.name + KotlinParserDefinition.STD_SCRIPT_EXT) + consoleView.virtualFile.putUserData(KOTLIN_CONSOLE_KEY, true) diff --git a/idea/src/org/jetbrains/kotlin/idea/conversion/copy/ConvertTextJavaCopyPasteProcessor.kt b/idea/src/org/jetbrains/kotlin/idea/conversion/copy/ConvertTextJavaCopyPasteProcessor.kt index ba1d8ab6ec4..6ce007f5472 100644 --- a/idea/src/org/jetbrains/kotlin/idea/conversion/copy/ConvertTextJavaCopyPasteProcessor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/conversion/copy/ConvertTextJavaCopyPasteProcessor.kt @@ -221,7 +221,7 @@ class ConvertTextJavaCopyPasteProcessor : CopyPastePostProcessor