diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/parsing/JetParsing.java b/compiler/frontend/src/org/jetbrains/jet/lang/parsing/JetParsing.java index 99dbf27efa0..387ba405c9b 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/parsing/JetParsing.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/parsing/JetParsing.java @@ -93,7 +93,7 @@ public class JetParsing extends AbstractJetParsing { void parseFile() { PsiBuilder.Marker fileMarker = mark(); - parsePreamble(true); + parsePreamble(); while (!eof()) { parseTopLevelObject(); @@ -129,10 +129,9 @@ public class JetParsing extends AbstractJetParsing { void parseScript() { PsiBuilder.Marker fileMarker = mark(); - parsePreamble(false); + parsePreamble(); PsiBuilder.Marker scriptMarker = mark(); - parseImportDirectives(); PsiBuilder.Marker blockMarker = mark(); @@ -148,7 +147,7 @@ public class JetParsing extends AbstractJetParsing { * : packageDirective? import* * ; */ - private void parsePreamble(boolean imports) { + private void parsePreamble() { /* * packageDirective * : modifiers "package" SimpleName{"."} SEMI? @@ -180,8 +179,7 @@ public class JetParsing extends AbstractJetParsing { } packageDirective.done(PACKAGE_DIRECTIVE); - if(imports) - parseImportDirectives(); + parseImportDirectives(); } /* SimpleName{"."} */ diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetScript.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetScript.java index 14cbe96c654..15850276070 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetScript.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetScript.java @@ -19,9 +19,7 @@ package org.jetbrains.jet.lang.psi; import com.intellij.lang.ASTNode; import com.intellij.psi.util.PsiTreeUtil; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import java.util.Collections; import java.util.List; // SCRIPT: Script declaration @@ -36,17 +34,6 @@ public class JetScript extends JetDeclarationImpl { return findNotNullChildByClass(JetBlockExpression.class); } - @Nullable - public JetImportList getImportList() { - return findChildByClass(JetImportList.class); - } - - @NotNull - public List getImportDirectives() { - JetImportList importList = getImportList(); - return importList != null ? importList.getImports() : Collections.emptyList(); - } - @NotNull public List getDeclarations() { return PsiTreeUtil.getChildrenOfTypeAsList(getBlockExpression(), JetDeclaration.class); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ImportsResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ImportsResolver.java index 75fc1165efe..8a722ca5833 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ImportsResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ImportsResolver.java @@ -75,13 +75,14 @@ public class ImportsResolver { private void processImports(@NotNull TopDownAnalysisContext c, @NotNull LookupMode lookupMode) { for (JetFile file : c.getFiles()) { + if (file.isScript()) continue; WritableScope fileScope = c.getFileScopes().get(file); processImportsInFile(lookupMode, fileScope, Lists.newArrayList(file.getImportDirectives()), file.getPackageFqName().isRoot()); } // SCRIPT: process script import directives for (JetScript script : c.getScripts().keySet()) { WritableScope scriptScope = ((ScriptDescriptorImpl) c.getScripts().get(script)).getScopeForBodyResolution(); - processImportsInFile(lookupMode, scriptScope, script.getImportDirectives(), true); + processImportsInFile(lookupMode, scriptScope, ((JetFile) script.getContainingFile()).getImportDirectives(), true); } } diff --git a/compiler/testData/psi/script/Import.txt b/compiler/testData/psi/script/Import.txt index 7fb1a3cd7e4..e00c543a86e 100644 --- a/compiler/testData/psi/script/Import.txt +++ b/compiler/testData/psi/script/Import.txt @@ -1,7 +1,7 @@ JetFile: Import.kts PACKAGE_DIRECTIVE - SCRIPT + IMPORT_LIST IMPORT_DIRECTIVE PsiElement(import)('import') PsiWhiteSpace(' ') @@ -23,7 +23,8 @@ JetFile: Import.kts PsiElement(IDENTIFIER)('ddd') PsiElement(DOT)('.') PsiElement(MUL)('*') - PsiWhiteSpace('\n\n') + PsiWhiteSpace('\n\n') + SCRIPT BLOCK FUN PsiElement(fun)('fun') diff --git a/compiler/tests/org/jetbrains/jet/parsing/AbstractJetParsingTest.java b/compiler/tests/org/jetbrains/jet/parsing/AbstractJetParsingTest.java index 97453274070..a2ec69117d5 100644 --- a/compiler/tests/org/jetbrains/jet/parsing/AbstractJetParsingTest.java +++ b/compiler/tests/org/jetbrains/jet/parsing/AbstractJetParsingTest.java @@ -28,7 +28,6 @@ import org.jetbrains.jet.lang.psi.IfNotParsed; import org.jetbrains.jet.lang.psi.JetElement; import org.jetbrains.jet.lang.psi.JetVisitorVoid; -import java.io.IOException; import java.lang.annotation.Annotation; import java.lang.reflect.Method; import java.lang.reflect.Modifier; @@ -73,6 +72,7 @@ public abstract class AbstractJetParsingTest extends ParsingTestCase { } protected void doParsingTest(@NotNull String filePath) throws Exception { + myFileExt = FileUtil.getExtension(PathUtil.getFileName(filePath)); myFile = createPsiFile(FileUtil.getNameWithoutExtension(PathUtil.getFileName(filePath)), loadFile(filePath)); myFile.acceptChildren(new JetVisitorVoid() { @@ -88,6 +88,6 @@ public abstract class AbstractJetParsingTest extends ParsingTestCase { } }); - doCheckResult(myFullDataPath, filePath.replace(".kt", ".txt"), toParseTreeText(myFile, false, false).trim()); + doCheckResult(myFullDataPath, filePath.replaceAll("\\.kts?", ".txt"), toParseTreeText(myFile, false, false).trim()); } } diff --git a/compiler/tests/org/jetbrains/jet/parsing/JetParsingTestGenerated.java b/compiler/tests/org/jetbrains/jet/parsing/JetParsingTestGenerated.java index 9449eac1482..6c19f738115 100644 --- a/compiler/tests/org/jetbrains/jet/parsing/JetParsingTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/parsing/JetParsingTestGenerated.java @@ -31,7 +31,7 @@ import org.jetbrains.jet.parsing.AbstractJetParsingTest; /** This class is generated by {@link org.jetbrains.jet.generators.tests.TestsPackage}. DO NOT MODIFY MANUALLY */ @SuppressWarnings("all") @TestMetadata("compiler/testData/psi") -@InnerTestClasses({JetParsingTestGenerated.Examples.class, JetParsingTestGenerated.FunctionReceivers.class, JetParsingTestGenerated.GreatSyntacticShift.class, JetParsingTestGenerated.Kdoc.class, JetParsingTestGenerated.PropertyDelegate.class, JetParsingTestGenerated.Recovery.class, JetParsingTestGenerated.StringTemplates.class}) +@InnerTestClasses({JetParsingTestGenerated.Examples.class, JetParsingTestGenerated.FunctionReceivers.class, JetParsingTestGenerated.GreatSyntacticShift.class, JetParsingTestGenerated.Kdoc.class, JetParsingTestGenerated.PropertyDelegate.class, JetParsingTestGenerated.Recovery.class, JetParsingTestGenerated.Script.class, JetParsingTestGenerated.StringTemplates.class}) public class JetParsingTestGenerated extends AbstractJetParsingTest { @TestMetadata("AbsentInnerType.kt") public void testAbsentInnerType() throws Exception { @@ -39,7 +39,7 @@ public class JetParsingTestGenerated extends AbstractJetParsingTest { } public void testAllFilesPresentInPsi() throws Exception { - JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("compiler/testData/psi"), Pattern.compile("^(.+)\\.kt$"), true); + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("compiler/testData/psi"), Pattern.compile("^(.*)\\.kts?$"), true); } @TestMetadata("AnnotatedExpressions.kt") @@ -456,7 +456,7 @@ public class JetParsingTestGenerated extends AbstractJetParsingTest { @InnerTestClasses({Examples.Array.class, Examples.Collections.class, Examples.Io.class, Examples.Map.class, Examples.Priorityqueues.class, Examples.Util.class}) public static class Examples extends AbstractJetParsingTest { public void testAllFilesPresentInExamples() throws Exception { - JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("compiler/testData/psi/examples"), Pattern.compile("^(.+)\\.kt$"), true); + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("compiler/testData/psi/examples"), Pattern.compile("^(.*)\\.kts?$"), true); } @TestMetadata("AnonymousObjects.kt") @@ -537,7 +537,7 @@ public class JetParsingTestGenerated extends AbstractJetParsingTest { @TestMetadata("compiler/testData/psi/examples/array") public static class Array extends AbstractJetParsingTest { public void testAllFilesPresentInArray() throws Exception { - JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("compiler/testData/psi/examples/array"), Pattern.compile("^(.+)\\.kt$"), true); + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("compiler/testData/psi/examples/array"), Pattern.compile("^(.*)\\.kts?$"), true); } @TestMetadata("MutableArray.kt") @@ -550,7 +550,7 @@ public class JetParsingTestGenerated extends AbstractJetParsingTest { @TestMetadata("compiler/testData/psi/examples/collections") public static class Collections extends AbstractJetParsingTest { public void testAllFilesPresentInCollections() throws Exception { - JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("compiler/testData/psi/examples/collections"), Pattern.compile("^(.+)\\.kt$"), true); + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("compiler/testData/psi/examples/collections"), Pattern.compile("^(.*)\\.kts?$"), true); } @TestMetadata("ArrayList.kt") @@ -618,7 +618,7 @@ public class JetParsingTestGenerated extends AbstractJetParsingTest { @TestMetadata("compiler/testData/psi/examples/io") public static class Io extends AbstractJetParsingTest { public void testAllFilesPresentInIo() throws Exception { - JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("compiler/testData/psi/examples/io"), Pattern.compile("^(.+)\\.kt$"), true); + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("compiler/testData/psi/examples/io"), Pattern.compile("^(.*)\\.kts?$"), true); } @TestMetadata("IOSamples.kt") @@ -631,7 +631,7 @@ public class JetParsingTestGenerated extends AbstractJetParsingTest { @TestMetadata("compiler/testData/psi/examples/map") public static class Map extends AbstractJetParsingTest { public void testAllFilesPresentInMap() throws Exception { - JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("compiler/testData/psi/examples/map"), Pattern.compile("^(.+)\\.kt$"), true); + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("compiler/testData/psi/examples/map"), Pattern.compile("^(.*)\\.kts?$"), true); } @TestMetadata("IMap.kt") @@ -644,7 +644,7 @@ public class JetParsingTestGenerated extends AbstractJetParsingTest { @TestMetadata("compiler/testData/psi/examples/priorityqueues") public static class Priorityqueues extends AbstractJetParsingTest { public void testAllFilesPresentInPriorityqueues() throws Exception { - JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("compiler/testData/psi/examples/priorityqueues"), Pattern.compile("^(.+)\\.kt$"), true); + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("compiler/testData/psi/examples/priorityqueues"), Pattern.compile("^(.*)\\.kts?$"), true); } @TestMetadata("BinaryHeap.kt") @@ -667,7 +667,7 @@ public class JetParsingTestGenerated extends AbstractJetParsingTest { @TestMetadata("compiler/testData/psi/examples/util") public static class Util extends AbstractJetParsingTest { public void testAllFilesPresentInUtil() throws Exception { - JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("compiler/testData/psi/examples/util"), Pattern.compile("^(.+)\\.kt$"), true); + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("compiler/testData/psi/examples/util"), Pattern.compile("^(.*)\\.kts?$"), true); } @TestMetadata("Comparison.kt") @@ -698,7 +698,7 @@ public class JetParsingTestGenerated extends AbstractJetParsingTest { @TestMetadata("compiler/testData/psi/functionReceivers") public static class FunctionReceivers extends AbstractJetParsingTest { public void testAllFilesPresentInFunctionReceivers() throws Exception { - JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("compiler/testData/psi/functionReceivers"), Pattern.compile("^(.+)\\.kt$"), true); + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("compiler/testData/psi/functionReceivers"), Pattern.compile("^(.*)\\.kts?$"), true); } @TestMetadata("FunctionTypesWithFunctionReceivers.kt") @@ -721,7 +721,7 @@ public class JetParsingTestGenerated extends AbstractJetParsingTest { @TestMetadata("compiler/testData/psi/greatSyntacticShift") public static class GreatSyntacticShift extends AbstractJetParsingTest { public void testAllFilesPresentInGreatSyntacticShift() throws Exception { - JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("compiler/testData/psi/greatSyntacticShift"), Pattern.compile("^(.+)\\.kt$"), true); + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("compiler/testData/psi/greatSyntacticShift"), Pattern.compile("^(.*)\\.kts?$"), true); } @TestMetadata("functionLiterals.kt") @@ -744,7 +744,7 @@ public class JetParsingTestGenerated extends AbstractJetParsingTest { @TestMetadata("compiler/testData/psi/kdoc") public static class Kdoc extends AbstractJetParsingTest { public void testAllFilesPresentInKdoc() throws Exception { - JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("compiler/testData/psi/kdoc"), Pattern.compile("^(.+)\\.kt$"), true); + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("compiler/testData/psi/kdoc"), Pattern.compile("^(.*)\\.kts?$"), true); } @TestMetadata("AtTags.kt") @@ -807,7 +807,7 @@ public class JetParsingTestGenerated extends AbstractJetParsingTest { @TestMetadata("compiler/testData/psi/propertyDelegate") public static class PropertyDelegate extends AbstractJetParsingTest { public void testAllFilesPresentInPropertyDelegate() throws Exception { - JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("compiler/testData/psi/propertyDelegate"), Pattern.compile("^(.+)\\.kt$"), true); + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("compiler/testData/psi/propertyDelegate"), Pattern.compile("^(.*)\\.kts?$"), true); } @TestMetadata("BracketsInDelegate.kt") @@ -875,7 +875,7 @@ public class JetParsingTestGenerated extends AbstractJetParsingTest { } public void testAllFilesPresentInRecovery() throws Exception { - JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("compiler/testData/psi/recovery"), Pattern.compile("^(.+)\\.kt$"), true); + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("compiler/testData/psi/recovery"), Pattern.compile("^(.*)\\.kts?$"), true); } @TestMetadata("ForRecovery.kt") @@ -935,10 +935,43 @@ public class JetParsingTestGenerated extends AbstractJetParsingTest { } + @TestMetadata("compiler/testData/psi/script") + public static class Script extends AbstractJetParsingTest { + public void testAllFilesPresentInScript() throws Exception { + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("compiler/testData/psi/script"), Pattern.compile("^(.*)\\.kts?$"), true); + } + + @TestMetadata("ComplexScript.kts") + public void testComplexScript() throws Exception { + doParsingTest("compiler/testData/psi/script/ComplexScript.kts"); + } + + @TestMetadata("Import.kts") + public void testImport() throws Exception { + doParsingTest("compiler/testData/psi/script/Import.kts"); + } + + @TestMetadata("Shebang.kts") + public void testShebang() throws Exception { + doParsingTest("compiler/testData/psi/script/Shebang.kts"); + } + + @TestMetadata("ShebangIncorrect.kts") + public void testShebangIncorrect() throws Exception { + doParsingTest("compiler/testData/psi/script/ShebangIncorrect.kts"); + } + + @TestMetadata("SimpleScript.kts") + public void testSimpleScript() throws Exception { + doParsingTest("compiler/testData/psi/script/SimpleScript.kts"); + } + + } + @TestMetadata("compiler/testData/psi/stringTemplates") public static class StringTemplates extends AbstractJetParsingTest { public void testAllFilesPresentInStringTemplates() throws Exception { - JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("compiler/testData/psi/stringTemplates"), Pattern.compile("^(.+)\\.kt$"), true); + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("compiler/testData/psi/stringTemplates"), Pattern.compile("^(.*)\\.kts?$"), true); } @TestMetadata("RawStringsWithManyQuotes.kt") @@ -957,6 +990,7 @@ public class JetParsingTestGenerated extends AbstractJetParsingTest { suite.addTestSuite(Kdoc.class); suite.addTestSuite(PropertyDelegate.class); suite.addTestSuite(Recovery.class); + suite.addTestSuite(Script.class); suite.addTestSuite(StringTemplates.class); return suite; } diff --git a/generators/src/org/jetbrains/jet/generators/tests/GenerateTests.kt b/generators/src/org/jetbrains/jet/generators/tests/GenerateTests.kt index 10c56f452c3..2f9bfa1d8fe 100644 --- a/generators/src/org/jetbrains/jet/generators/tests/GenerateTests.kt +++ b/generators/src/org/jetbrains/jet/generators/tests/GenerateTests.kt @@ -132,7 +132,7 @@ fun main(args: Array) { } testClass(javaClass()) { - model("psi", testMethod = "doParsingTest") + model("psi", testMethod = "doParsingTest", pattern = "^(.*)\\.kts?$") } GenerateRangesCodegenTestData.main(array())