default imports added to script definitions
This commit is contained in:
@@ -16,18 +16,36 @@
|
||||
|
||||
package org.jetbrains.jet.lang.parsing;
|
||||
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.lang.resolve.AnalyzerScriptParameter;
|
||||
import org.jetbrains.jet.lang.resolve.ImportPath;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
public class JetScriptDefinition {
|
||||
private final String extension;
|
||||
private final List<AnalyzerScriptParameter> parameters;
|
||||
private final List<ImportPath> imports;
|
||||
|
||||
public JetScriptDefinition(String extension, List<AnalyzerScriptParameter> scriptParameters, @Nullable List<String> imports) {
|
||||
this.extension = extension;
|
||||
parameters = scriptParameters == null ? Collections.<AnalyzerScriptParameter>emptyList() : scriptParameters;
|
||||
this.imports = imports == null || imports.isEmpty() ? Collections.<ImportPath>emptyList() : importPaths(imports);
|
||||
}
|
||||
|
||||
private static List<ImportPath> importPaths(List<String> imports) {
|
||||
ArrayList<ImportPath> paths = new ArrayList<ImportPath>(imports.size());
|
||||
for (String anImport : imports) {
|
||||
paths.add(new ImportPath(anImport));
|
||||
}
|
||||
return paths;
|
||||
}
|
||||
|
||||
public JetScriptDefinition(String extension, List<AnalyzerScriptParameter> scriptParameters) {
|
||||
this.extension = extension;
|
||||
parameters = scriptParameters;
|
||||
this(extension, scriptParameters, null);
|
||||
}
|
||||
|
||||
public JetScriptDefinition(String extension, AnalyzerScriptParameter... scriptParameters) {
|
||||
@@ -41,4 +59,8 @@ public class JetScriptDefinition {
|
||||
public String getExtension() {
|
||||
return extension;
|
||||
}
|
||||
|
||||
public List<ImportPath> getImports() {
|
||||
return imports;
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -29,7 +29,7 @@ public class JetScriptDefinitionProvider {
|
||||
private final HashMap<String,JetScriptDefinition> scripts = new HashMap<String, JetScriptDefinition>();
|
||||
private final HashSet<PsiFile> scriptsFiles = new HashSet<PsiFile>();
|
||||
|
||||
private static JetScriptDefinition standardScript = new JetScriptDefinition(".ktscript", Collections.<AnalyzerScriptParameter>emptyList());
|
||||
private static final JetScriptDefinition standardScript = new JetScriptDefinition(".ktscript", Collections.<AnalyzerScriptParameter>emptyList());
|
||||
|
||||
public JetScriptDefinitionProvider() {
|
||||
// .ktscript will take analyzer parameters explicitly specified on compilation
|
||||
|
||||
@@ -22,6 +22,7 @@ import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.jet.lang.ModuleConfiguration;
|
||||
import org.jetbrains.jet.lang.descriptors.*;
|
||||
import org.jetbrains.jet.lang.psi.*;
|
||||
import org.jetbrains.jet.lang.resolve.lazy.ScopeProvider;
|
||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.WritableScope;
|
||||
@@ -79,7 +80,7 @@ public class ImportsResolver {
|
||||
private void processImports(boolean onlyClasses, @NotNull JetScope rootScope) {
|
||||
for (JetFile file : context.getNamespaceDescriptors().keySet()) {
|
||||
WritableScope namespaceScope = context.getNamespaceScopes().get(file);
|
||||
processImportsInFile(onlyClasses, namespaceScope, file.getImportDirectives(), rootScope);
|
||||
processImportsInFile(onlyClasses, namespaceScope, ScopeProvider.getFileImports(file), rootScope);
|
||||
}
|
||||
for (JetScript script : context.getScripts().keySet()) {
|
||||
WritableScope scriptScope = context.getScriptScopes().get(script);
|
||||
|
||||
@@ -21,7 +21,11 @@ import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
|
||||
import org.jetbrains.jet.lang.parsing.JetParserDefinition;
|
||||
import org.jetbrains.jet.lang.parsing.JetScriptDefinition;
|
||||
import org.jetbrains.jet.lang.parsing.JetScriptDefinitionProvider;
|
||||
import org.jetbrains.jet.lang.psi.*;
|
||||
import org.jetbrains.jet.lang.resolve.ImportPath;
|
||||
import org.jetbrains.jet.lang.resolve.ImportsResolver;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
||||
@@ -72,7 +76,7 @@ public class ScopeProvider {
|
||||
writableScope.importScope(rootPackageDescriptor.getMemberScope());
|
||||
}
|
||||
|
||||
List<JetImportDirective> importDirectives = Lists.newArrayList(file.getImportDirectives());
|
||||
List<JetImportDirective> importDirectives = getFileImports(file);
|
||||
|
||||
ImportsResolver.processImportsInFile(true, writableScope, importDirectives,
|
||||
rootPackageDescriptor.getMemberScope(),
|
||||
@@ -86,6 +90,22 @@ public class ScopeProvider {
|
||||
return writableScope;
|
||||
}
|
||||
|
||||
public static List<JetImportDirective> getFileImports(JetFile file) {
|
||||
List<JetImportDirective> fileImports = file.getImportDirectives();
|
||||
List<JetImportDirective> importDirectives = Lists.newArrayList();
|
||||
if(file.isScript()) {
|
||||
JetScriptDefinition definition = JetScriptDefinitionProvider.getInstance(file.getProject()).findScriptDefinition(file);
|
||||
List<ImportPath> imports = definition.getImports();
|
||||
if(!imports.isEmpty()) {
|
||||
for (ImportPath importPath : imports) {
|
||||
importDirectives.add(JetPsiFactory.createImportDirective(file.getProject(), importPath));
|
||||
}
|
||||
}
|
||||
}
|
||||
importDirectives.addAll(fileImports);
|
||||
return importDirectives;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public JetScope getResolutionScopeForDeclaration(@NotNull JetDeclaration jetDeclaration) {
|
||||
PsiElement immediateParent = jetDeclaration.getParent();
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
Collections.emptyList<String>()
|
||||
@@ -27,6 +27,8 @@ import java.lang.reflect.Constructor;
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -37,6 +39,9 @@ public class ScriptGenTest extends CodegenTestCase {
|
||||
public static final JetScriptDefinition FIB_SCRIPT_DEFINITION =
|
||||
new JetScriptDefinition(".lang.kt", new AnalyzerScriptParameter("num", "jet.Int"));
|
||||
|
||||
public static final JetScriptDefinition DEFIMPORT_SCRIPT_DEFINITION =
|
||||
new JetScriptDefinition(".def.kt", null, Arrays.asList("java.util.Collections"));
|
||||
|
||||
@Override
|
||||
protected void setUp() throws Exception {
|
||||
super.setUp();
|
||||
@@ -131,7 +136,6 @@ public class ScriptGenTest extends CodegenTestCase {
|
||||
public void testDependentScripts() {
|
||||
JetScriptDefinitionProvider.getInstance(myEnvironment.getProject()).addScriptDefinition(FIB_SCRIPT_DEFINITION);
|
||||
loadFiles("script/fibwp.lang.kt", "script/fibwprunner.ktscript");
|
||||
System.out.println(generateToText());
|
||||
final Class aClass = loadClass("Fibwprunner", generateClassesInFile());
|
||||
try {
|
||||
Constructor constructor = aClass.getConstructor();
|
||||
@@ -145,4 +149,19 @@ public class ScriptGenTest extends CodegenTestCase {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
public void testDefImports() {
|
||||
JetScriptDefinitionProvider.getInstance(myEnvironment.getProject()).addScriptDefinition(DEFIMPORT_SCRIPT_DEFINITION);
|
||||
loadFile("script/withdefimports.def.kt");
|
||||
final Class aClass = loadClass("Withdefimports", generateClassesInFile());
|
||||
try {
|
||||
Constructor constructor = aClass.getConstructor();
|
||||
Field rv = aClass.getField("rv");
|
||||
Object script = constructor.newInstance();
|
||||
assertEquals(Collections.emptyList(),rv.get(script));
|
||||
}
|
||||
catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user