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="UtilityClassWithPublicConstructor" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||||
<inspection_tool class="UtilityClassWithoutPrivateConstructor" 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="ignoreClassesWithOnlyMain" value="false" />
|
||||||
<option name="ignorableAnnotations">
|
|
||||||
<value />
|
|
||||||
</option>
|
|
||||||
</inspection_tool>
|
</inspection_tool>
|
||||||
<inspection_tool class="VolatileLongOrDoubleField" enabled="true" level="WARNING" enabled_by_default="true" />
|
<inspection_tool class="VolatileLongOrDoubleField" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||||
<inspection_tool class="WaitNotInLoop" 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) {
|
public void compileCorrectFiles(@NotNull CompilationErrorHandler errorHandler) {
|
||||||
for (JetFile file : this.files) {
|
for (JetFile file : this.files) {
|
||||||
if (file.isScript()) {
|
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.ClassDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.ScriptDescriptor;
|
import org.jetbrains.jet.lang.descriptors.ScriptDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor;
|
import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor;
|
||||||
import org.jetbrains.jet.lang.psi.JetDeclaration;
|
import org.jetbrains.jet.lang.parsing.JetParserDefinition;
|
||||||
import org.jetbrains.jet.lang.psi.JetScript;
|
import org.jetbrains.jet.lang.parsing.JetScriptDefinition;
|
||||||
import org.jetbrains.jet.lang.psi.JetTypeParameterListOwner;
|
import org.jetbrains.jet.lang.psi.*;
|
||||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
import org.jetbrains.jet.lang.resolve.BindingContext;
|
||||||
import org.jetbrains.jet.lang.resolve.java.JdkNames;
|
import org.jetbrains.jet.lang.resolve.java.JdkNames;
|
||||||
import org.jetbrains.jet.lang.resolve.java.JvmClassName;
|
import org.jetbrains.jet.lang.resolve.java.JvmClassName;
|
||||||
@@ -35,6 +35,7 @@ import org.jetbrains.asm4.Type;
|
|||||||
import org.jetbrains.asm4.commons.InstructionAdapter;
|
import org.jetbrains.asm4.commons.InstructionAdapter;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
import java.io.File;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -249,4 +250,20 @@ public class ScriptCodegen {
|
|||||||
public String getScriptFieldName(@NotNull ScriptDescriptor scriptDescriptor) {
|
public String getScriptFieldName(@NotNull ScriptDescriptor scriptDescriptor) {
|
||||||
return "script$" + getScriptIndex(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()
|
CompilerPathUtil.getRuntimePath().toURI().toURL()
|
||||||
},
|
},
|
||||||
parentLoader == null ? AllModules.class.getClassLoader() : parentLoader));
|
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) {
|
catch (Exception e) {
|
||||||
throw new RuntimeException("Failed to evaluate script: " + e, e);
|
throw new RuntimeException("Failed to evaluate script: " + e, e);
|
||||||
|
|||||||
@@ -106,8 +106,23 @@ public class JetParsing extends AbstractJetParsing {
|
|||||||
|
|
||||||
void parseScript() {
|
void parseScript() {
|
||||||
PsiBuilder.Marker fileMarker = mark();
|
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();
|
parseImportDirectives();
|
||||||
|
|
||||||
PsiBuilder.Marker blockMarker = mark();
|
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 {
|
fun fib(n: Int): Int {
|
||||||
val v = if(n < 2) 1 else fib(n-1) + fib(n-2)
|
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 {
|
try {
|
||||||
if (myFiles.isScript()) {
|
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());
|
Constructor constructor = getConstructor(scriptClass, state.getScriptConstructorMethod());
|
||||||
scriptInstance = constructor.newInstance(myFiles.getScriptParameterValues().toArray());
|
scriptInstance = constructor.newInstance(myFiles.getScriptParameterValues().toArray());
|
||||||
|
|||||||
@@ -96,7 +96,22 @@ public class ScriptGenTest extends CodegenTestCase {
|
|||||||
public void testLanguage() {
|
public void testLanguage() {
|
||||||
JetParserDefinition.getInstance().addScriptDefinition(new JetScriptDefinition(".lang.kt", new AnalyzerScriptParameter("num","jet.Int")));
|
JetParserDefinition.getInstance().addScriptDefinition(new JetScriptDefinition(".lang.kt", new AnalyzerScriptParameter("num","jet.Int")));
|
||||||
loadFile("script/fib.lang.kt");
|
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 {
|
try {
|
||||||
Constructor constructor = aClass.getConstructor(int.class);
|
Constructor constructor = aClass.getConstructor(int.class);
|
||||||
Field result = aClass.getField("result");
|
Field result = aClass.getField("result");
|
||||||
|
|||||||
Reference in New Issue
Block a user