properr names for scripts
This commit is contained in:
-3
@@ -410,9 +410,6 @@
|
||||
<inspection_tool class="UtilityClassWithPublicConstructor" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||
<inspection_tool class="UtilityClassWithoutPrivateConstructor" enabled="true" level="WARNING" enabled_by_default="true">
|
||||
<option name="ignoreClassesWithOnlyMain" value="false" />
|
||||
<option name="ignorableAnnotations">
|
||||
<value />
|
||||
</option>
|
||||
</inspection_tool>
|
||||
<inspection_tool class="VolatileLongOrDoubleField" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||
<inspection_tool class="WaitNotInLoop" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||
|
||||
@@ -143,7 +143,8 @@ public class GenerationState {
|
||||
public void compileCorrectFiles(@NotNull CompilationErrorHandler errorHandler) {
|
||||
for (JetFile file : this.files) {
|
||||
if (file.isScript()) {
|
||||
injector.getClosureAnnotator().registerClassNameForScript(file.getScript(), ScriptCodegen.SCRIPT_DEFAULT_CLASS_NAME);
|
||||
String name = ScriptCodegen.classNameForScript(file);
|
||||
injector.getClosureAnnotator().registerClassNameForScript(file.getScript(), JvmClassName.byInternalName(name));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -23,9 +23,9 @@ import org.jetbrains.jet.codegen.signature.JvmMethodSignature;
|
||||
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.ScriptDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor;
|
||||
import org.jetbrains.jet.lang.psi.JetDeclaration;
|
||||
import org.jetbrains.jet.lang.psi.JetScript;
|
||||
import org.jetbrains.jet.lang.psi.JetTypeParameterListOwner;
|
||||
import org.jetbrains.jet.lang.parsing.JetParserDefinition;
|
||||
import org.jetbrains.jet.lang.parsing.JetScriptDefinition;
|
||||
import org.jetbrains.jet.lang.psi.*;
|
||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
||||
import org.jetbrains.jet.lang.resolve.java.JdkNames;
|
||||
import org.jetbrains.jet.lang.resolve.java.JvmClassName;
|
||||
@@ -35,6 +35,7 @@ import org.jetbrains.asm4.Type;
|
||||
import org.jetbrains.asm4.commons.InstructionAdapter;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.io.File;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -249,4 +250,20 @@ public class ScriptCodegen {
|
||||
public String getScriptFieldName(@NotNull ScriptDescriptor scriptDescriptor) {
|
||||
return "script$" + getScriptIndex(scriptDescriptor);
|
||||
}
|
||||
|
||||
public static String classNameForScript(JetFile file) {
|
||||
JetScriptDefinition scriptDefinition = JetParserDefinition.getInstance().findScriptDefinition(file);
|
||||
|
||||
String name = file.getName();
|
||||
name = name.substring(0, name.length()-scriptDefinition.getExtension().length());
|
||||
int index = name.lastIndexOf(File.separatorChar);
|
||||
if(index != -1)
|
||||
name = name.substring(index+1);
|
||||
name = Character.toUpperCase(name.charAt(0)) + name.substring(1);
|
||||
JetNamespaceHeader header = file.getNamespaceHeader();
|
||||
if(header != null && header.getName().length() > 0) {
|
||||
name = header.getName().replace('.','/') + "/" + name;
|
||||
}
|
||||
return name;
|
||||
}
|
||||
}
|
||||
|
||||
+2
-1
@@ -261,7 +261,8 @@ public class KotlinToJVMBytecodeCompiler {
|
||||
CompilerPathUtil.getRuntimePath().toURI().toURL()
|
||||
},
|
||||
parentLoader == null ? AllModules.class.getClassLoader() : parentLoader));
|
||||
return classLoader.loadClass(ScriptCodegen.SCRIPT_DEFAULT_CLASS_NAME.getFqName().getFqName());
|
||||
JetFile scriptFile = configuration.getEnvironment().getSourceFiles().get(0);
|
||||
return classLoader.loadClass(ScriptCodegen.classNameForScript(scriptFile));
|
||||
}
|
||||
catch (Exception e) {
|
||||
throw new RuntimeException("Failed to evaluate script: " + e, e);
|
||||
|
||||
@@ -106,8 +106,23 @@ public class JetParsing extends AbstractJetParsing {
|
||||
|
||||
void parseScript() {
|
||||
PsiBuilder.Marker fileMarker = mark();
|
||||
PsiBuilder.Marker scriptMarker = mark();
|
||||
|
||||
PsiBuilder.Marker namespaceHeader = mark();
|
||||
parseModifierList(MODIFIER_LIST, true);
|
||||
|
||||
if (at(PACKAGE_KEYWORD)) {
|
||||
advance(); // PACKAGE_KEYWORD
|
||||
|
||||
parseNamespaceName();
|
||||
|
||||
consumeIf(SEMICOLON);
|
||||
namespaceHeader.done(NAMESPACE_HEADER);
|
||||
}
|
||||
else {
|
||||
namespaceHeader.rollbackTo();
|
||||
}
|
||||
|
||||
PsiBuilder.Marker scriptMarker = mark();
|
||||
parseImportDirectives();
|
||||
|
||||
PsiBuilder.Marker blockMarker = mark();
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// this script expected parameter num : Int
|
||||
// this script expects parameter num : Int
|
||||
|
||||
fun fib(n: Int): Int {
|
||||
val v = if(n < 2) 1 else fib(n-1) + fib(n-2)
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
package test
|
||||
|
||||
// this script expected parameter num : Int
|
||||
|
||||
fun fib(n: Int): Int {
|
||||
val v = if(n < 2) 1 else fib(n-1) + fib(n-2)
|
||||
return v
|
||||
}
|
||||
|
||||
val result = fib(num)
|
||||
@@ -188,7 +188,8 @@ public abstract class CodegenTestCase extends UsefulTestCase {
|
||||
|
||||
try {
|
||||
if (myFiles.isScript()) {
|
||||
Class<?> scriptClass = loader.loadClass(ScriptCodegen.SCRIPT_DEFAULT_CLASS_NAME.getFqName().getFqName());
|
||||
String scriptClassName = ScriptCodegen.classNameForScript(myFiles.getPsiFile());
|
||||
Class<?> scriptClass = loader.loadClass(scriptClassName);
|
||||
|
||||
Constructor constructor = getConstructor(scriptClass, state.getScriptConstructorMethod());
|
||||
scriptInstance = constructor.newInstance(myFiles.getScriptParameterValues().toArray());
|
||||
|
||||
@@ -96,7 +96,22 @@ public class ScriptGenTest extends CodegenTestCase {
|
||||
public void testLanguage() {
|
||||
JetParserDefinition.getInstance().addScriptDefinition(new JetScriptDefinition(".lang.kt", new AnalyzerScriptParameter("num","jet.Int")));
|
||||
loadFile("script/fib.lang.kt");
|
||||
final Class aClass = loadClass("Script", generateClassesInFile());
|
||||
final Class aClass = loadClass("Fib", generateClassesInFile());
|
||||
try {
|
||||
Constructor constructor = aClass.getConstructor(int.class);
|
||||
Field result = aClass.getField("result");
|
||||
Object script = constructor.newInstance(5);
|
||||
assertEquals(8,result.get(script));
|
||||
}
|
||||
catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
public void testLanguageWithPackage() {
|
||||
JetParserDefinition.getInstance().addScriptDefinition(new JetScriptDefinition(".lang.kt", new AnalyzerScriptParameter("num","jet.Int")));
|
||||
loadFile("script/fibWithPackage.lang.kt");
|
||||
final Class aClass = loadClass("test.FibWithPackage", generateClassesInFile());
|
||||
try {
|
||||
Constructor constructor = aClass.getConstructor(int.class);
|
||||
Field result = aClass.getField("result");
|
||||
|
||||
Reference in New Issue
Block a user