ScriptName now returns FqName, fully qualified with package name. Update usages and convert to internal format as needed.
This commit is contained in:
committed by
Andrey Breslav
parent
d08f2bc7ab
commit
9239fa2ece
@@ -38,10 +38,11 @@ public class KotlinCodegenFacade {
|
|||||||
for (JetFile file : state.getFiles()) {
|
for (JetFile file : state.getFiles()) {
|
||||||
if (file.isScript()) {
|
if (file.isScript()) {
|
||||||
// SCRIPT: register class name for scripting from this file, move outside of this function
|
// SCRIPT: register class name for scripting from this file, move outside of this function
|
||||||
String name = ScriptNameUtil.classNameForScript(file);
|
FqName name = ScriptNameUtil.classNameForScript(file);
|
||||||
JetScript script = file.getScript();
|
JetScript script = file.getScript();
|
||||||
assert script != null;
|
assert script != null;
|
||||||
registerClassNameForScript(state.getBindingTrace(), script, Type.getObjectType(name));
|
Type type = AsmUtil.asmTypeByFqNameWithoutInnerClasses(name);
|
||||||
|
registerClassNameForScript(state.getBindingTrace(), script, type);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-1
@@ -235,7 +235,8 @@ public class KotlinToJVMBytecodeCompiler {
|
|||||||
}, AllModules.class.getClassLoader())
|
}, AllModules.class.getClassLoader())
|
||||||
);
|
);
|
||||||
|
|
||||||
return classLoader.loadClass(ScriptNameUtil.classNameForScript(environment.getSourceFiles().get(0)));
|
FqName nameForScript = ScriptNameUtil.classNameForScript(environment.getSourceFiles().get(0));
|
||||||
|
return classLoader.loadClass(nameForScript.asString());
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
throw new RuntimeException("Failed to evaluate script: " + e, e);
|
throw new RuntimeException("Failed to evaluate script: " + e, e);
|
||||||
|
|||||||
@@ -113,7 +113,8 @@ public class ScriptHeaderResolver {
|
|||||||
priority = 0;
|
priority = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
Name className = new FqName(ScriptNameUtil.classNameForScript((JetFile) script.getContainingFile()).replace('/', '.')).shortName();
|
FqName nameForScript = ScriptNameUtil.classNameForScript((JetFile) script.getContainingFile());
|
||||||
|
Name className = nameForScript.shortName();
|
||||||
ScriptDescriptor scriptDescriptor = new ScriptDescriptor(ns, priority, outerScope, className);
|
ScriptDescriptor scriptDescriptor = new ScriptDescriptor(ns, priority, outerScope, className);
|
||||||
|
|
||||||
//WriteThroughScope scriptScope = new WriteThroughScope(
|
//WriteThroughScope scriptScope = new WriteThroughScope(
|
||||||
|
|||||||
@@ -20,12 +20,13 @@ import org.jetbrains.jet.lang.parsing.JetScriptDefinition;
|
|||||||
import org.jetbrains.jet.lang.parsing.JetScriptDefinitionProvider;
|
import org.jetbrains.jet.lang.parsing.JetScriptDefinitionProvider;
|
||||||
import org.jetbrains.jet.lang.psi.JetFile;
|
import org.jetbrains.jet.lang.psi.JetFile;
|
||||||
import org.jetbrains.jet.lang.psi.JetPackageDirective;
|
import org.jetbrains.jet.lang.psi.JetPackageDirective;
|
||||||
|
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||||
|
|
||||||
public class ScriptNameUtil {
|
public class ScriptNameUtil {
|
||||||
private ScriptNameUtil() {
|
private ScriptNameUtil() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String classNameForScript(JetFile file) {
|
public static FqName classNameForScript(JetFile file) {
|
||||||
JetScriptDefinition scriptDefinition = JetScriptDefinitionProvider.getInstance(file.getProject()).findScriptDefinition(file);
|
JetScriptDefinition scriptDefinition = JetScriptDefinitionProvider.getInstance(file.getProject()).findScriptDefinition(file);
|
||||||
|
|
||||||
String name = file.getName();
|
String name = file.getName();
|
||||||
@@ -40,10 +41,11 @@ public class ScriptNameUtil {
|
|||||||
name = name.substring(0,index);
|
name = name.substring(0,index);
|
||||||
}
|
}
|
||||||
name = Character.toUpperCase(name.charAt(0)) + (name.length() == 0 ? "" : name.substring(1));
|
name = Character.toUpperCase(name.charAt(0)) + (name.length() == 0 ? "" : name.substring(1));
|
||||||
|
name = name.replace('.', '_');
|
||||||
JetPackageDirective directive = file.getPackageDirective();
|
JetPackageDirective directive = file.getPackageDirective();
|
||||||
if(directive != null && directive.getName().length() > 0) {
|
if(directive != null && directive.getQualifiedName().length() > 0) {
|
||||||
name = directive.getName().replace('.','/') + "/" + name;
|
name = directive.getQualifiedName() + "." + name;
|
||||||
}
|
}
|
||||||
return name;
|
return new FqName(name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
package kotlin.scripting.fibonacci
|
||||||
|
// this script expected parameter num : Int
|
||||||
|
|
||||||
|
fun fib(n: Int): Int {
|
||||||
|
val v = if(n < 2) 1 else fib(n-1) + fib(n-2)
|
||||||
|
System.out.println("fib($n)=$v")
|
||||||
|
return v
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.println("num: $num")
|
||||||
|
val result = fib(num)
|
||||||
@@ -49,6 +49,13 @@ public class ScriptTest {
|
|||||||
aClass.getConstructor(int.class).newInstance(4);
|
aClass.getConstructor(int.class).newInstance(4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testScriptWithPackage() throws Exception {
|
||||||
|
Class<?> aClass = compileScript("fib.pkg.ktscript", numIntParam(), Collections.<JetScriptDefinition>emptyList());
|
||||||
|
Assert.assertNotNull(aClass);
|
||||||
|
aClass.getConstructor(int.class).newInstance(4);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testScriptStandardExt() throws Exception {
|
public void testScriptStandardExt() throws Exception {
|
||||||
Class<?> aClass = compileScript("fib.kt", numIntParam(), Collections.<JetScriptDefinition>emptyList());
|
Class<?> aClass = compileScript("fib.kt", numIntParam(), Collections.<JetScriptDefinition>emptyList());
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import org.jetbrains.jet.lang.parsing.JetScriptDefinition;
|
|||||||
import org.jetbrains.jet.lang.parsing.JetScriptDefinitionProvider;
|
import org.jetbrains.jet.lang.parsing.JetScriptDefinitionProvider;
|
||||||
import org.jetbrains.jet.lang.resolve.AnalyzerScriptParameter;
|
import org.jetbrains.jet.lang.resolve.AnalyzerScriptParameter;
|
||||||
import org.jetbrains.jet.lang.resolve.ScriptNameUtil;
|
import org.jetbrains.jet.lang.resolve.ScriptNameUtil;
|
||||||
|
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||||
import org.jetbrains.jet.utils.UtilsPackage;
|
import org.jetbrains.jet.utils.UtilsPackage;
|
||||||
|
|
||||||
import java.lang.reflect.Constructor;
|
import java.lang.reflect.Constructor;
|
||||||
@@ -52,7 +53,8 @@ public class ScriptGenTest extends CodegenTestCase {
|
|||||||
loadFile(filename);
|
loadFile(filename);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Class<?> scriptClass = generateClass(ScriptNameUtil.classNameForScript(myFiles.getPsiFile()));
|
FqName fqName = ScriptNameUtil.classNameForScript(myFiles.getPsiFile());
|
||||||
|
Class<?> scriptClass = generateClass(fqName.asString());
|
||||||
|
|
||||||
Constructor constructor = getConstructor(scriptClass);
|
Constructor constructor = getConstructor(scriptClass);
|
||||||
scriptInstance = constructor.newInstance(myFiles.getScriptParameterValues().toArray());
|
scriptInstance = constructor.newInstance(myFiles.getScriptParameterValues().toArray());
|
||||||
|
|||||||
Reference in New Issue
Block a user