Refactor script registering in frontend and jvm backend
This commit is contained in:
@@ -33,13 +33,10 @@ import org.jetbrains.kotlin.codegen.CompilationException
|
|||||||
import org.jetbrains.kotlin.compiler.plugin.CliOptionProcessingException
|
import org.jetbrains.kotlin.compiler.plugin.CliOptionProcessingException
|
||||||
import org.jetbrains.kotlin.compiler.plugin.PluginCliOptionProcessingException
|
import org.jetbrains.kotlin.compiler.plugin.PluginCliOptionProcessingException
|
||||||
import org.jetbrains.kotlin.compiler.plugin.cliPluginUsageString
|
import org.jetbrains.kotlin.compiler.plugin.cliPluginUsageString
|
||||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
import org.jetbrains.kotlin.config.*
|
||||||
import org.jetbrains.kotlin.config.IncrementalCompilation
|
|
||||||
import org.jetbrains.kotlin.config.Services
|
|
||||||
import org.jetbrains.kotlin.config.addKotlinSourceRoot
|
|
||||||
import org.jetbrains.kotlin.load.java.JvmAbi
|
import org.jetbrains.kotlin.load.java.JvmAbi
|
||||||
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCompilationComponents
|
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCompilationComponents
|
||||||
import org.jetbrains.kotlin.script.ScriptParameter
|
import org.jetbrains.kotlin.script.StandardScriptDefinition
|
||||||
import org.jetbrains.kotlin.util.PerformanceCounter
|
import org.jetbrains.kotlin.util.PerformanceCounter
|
||||||
import org.jetbrains.kotlin.utils.KotlinPaths
|
import org.jetbrains.kotlin.utils.KotlinPaths
|
||||||
import org.jetbrains.kotlin.utils.KotlinPathsFromHomeDir
|
import org.jetbrains.kotlin.utils.KotlinPathsFromHomeDir
|
||||||
@@ -126,10 +123,9 @@ public open class K2JVMCompiler : CLICompiler<K2JVMCompilerArguments>() {
|
|||||||
return ExitCode.OK
|
return ExitCode.OK
|
||||||
}
|
}
|
||||||
|
|
||||||
configuration.put<List<ScriptParameter>>(JVMConfigurationKeys.SCRIPT_PARAMETERS, if (arguments.script)
|
if (arguments.script) {
|
||||||
CommandLineScriptUtils.scriptParameters()
|
configuration.add(CommonConfigurationKeys.SCRIPT_DEFINITIONS_KEY, StandardScriptDefinition)
|
||||||
else
|
}
|
||||||
emptyList<ScriptParameter>())
|
|
||||||
|
|
||||||
putAdvancedOptions(configuration, arguments)
|
putAdvancedOptions(configuration, arguments)
|
||||||
|
|
||||||
|
|||||||
@@ -1,42 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2015 JetBrains s.r.o.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jetbrains.kotlin.cli.jvm.compiler;
|
|
||||||
|
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
|
|
||||||
import org.jetbrains.kotlin.name.Name;
|
|
||||||
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform;
|
|
||||||
import org.jetbrains.kotlin.script.ScriptParameter;
|
|
||||||
import org.jetbrains.kotlin.types.KotlinType;
|
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import static org.jetbrains.kotlin.types.Variance.INVARIANT;
|
|
||||||
|
|
||||||
public class CommandLineScriptUtils {
|
|
||||||
private static final Name ARGS_NAME = Name.identifier("args");
|
|
||||||
|
|
||||||
private CommandLineScriptUtils() {
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<ScriptParameter> scriptParameters() {
|
|
||||||
KotlinBuiltIns builtIns = JvmPlatform.INSTANCE$.getBuiltIns();
|
|
||||||
KotlinType arrayOfStrings = builtIns.getArrayType(INVARIANT, builtIns.getStringType());
|
|
||||||
ScriptParameter argsParameter = new ScriptParameter(ARGS_NAME, arrayOfStrings);
|
|
||||||
return Collections.singletonList(argsParameter);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -133,7 +133,7 @@ public class KotlinCoreEnvironment private constructor(
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
KotlinScriptDefinitionProvider.getInstance(project).addScriptDefinitions(configuration.getList(CommonConfigurationKeys.SCRIPT_DEFINITIONS_KEY))
|
KotlinScriptDefinitionProvider.getInstance(project).setScriptDefinitions(configuration.getList(CommonConfigurationKeys.SCRIPT_DEFINITIONS_KEY))
|
||||||
|
|
||||||
project.registerService(javaClass<JvmVirtualFileFinderFactory>(), JvmCliVirtualFileFinderFactory(index))
|
project.registerService(javaClass<JvmVirtualFileFinderFactory>(), JvmCliVirtualFileFinderFactory(index))
|
||||||
|
|
||||||
|
|||||||
-9
@@ -60,9 +60,6 @@ import org.jetbrains.kotlin.psi.KtScript;
|
|||||||
import org.jetbrains.kotlin.resolve.BindingTrace;
|
import org.jetbrains.kotlin.resolve.BindingTrace;
|
||||||
import org.jetbrains.kotlin.resolve.jvm.JvmClassName;
|
import org.jetbrains.kotlin.resolve.jvm.JvmClassName;
|
||||||
import org.jetbrains.kotlin.resolve.jvm.TopDownAnalyzerFacadeForJVM;
|
import org.jetbrains.kotlin.resolve.jvm.TopDownAnalyzerFacadeForJVM;
|
||||||
import org.jetbrains.kotlin.script.ScriptParameter;
|
|
||||||
import org.jetbrains.kotlin.script.KotlinScriptDefinition;
|
|
||||||
import org.jetbrains.kotlin.script.KotlinScriptDefinitionProvider;
|
|
||||||
import org.jetbrains.kotlin.util.PerformanceCounter;
|
import org.jetbrains.kotlin.util.PerformanceCounter;
|
||||||
import org.jetbrains.kotlin.utils.KotlinPaths;
|
import org.jetbrains.kotlin.utils.KotlinPaths;
|
||||||
|
|
||||||
@@ -274,12 +271,6 @@ public class KotlinToJVMBytecodeCompiler {
|
|||||||
@NotNull KotlinPaths paths,
|
@NotNull KotlinPaths paths,
|
||||||
@NotNull KotlinCoreEnvironment environment
|
@NotNull KotlinCoreEnvironment environment
|
||||||
) {
|
) {
|
||||||
List<ScriptParameter> scriptParameters = environment.getConfiguration().getList(JVMConfigurationKeys.SCRIPT_PARAMETERS);
|
|
||||||
if (!scriptParameters.isEmpty()) {
|
|
||||||
KotlinScriptDefinitionProvider.getInstance(environment.getProject()).addScriptDefinition(
|
|
||||||
new KotlinScriptDefinition(".kts", scriptParameters)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
GenerationState state = analyzeAndGenerate(environment);
|
GenerationState state = analyzeAndGenerate(environment);
|
||||||
if (state == null) {
|
if (state == null) {
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ import org.jetbrains.kotlin.cli.jvm.compiler.CompilerJarLocator;
|
|||||||
import org.jetbrains.kotlin.config.CompilerConfigurationKey;
|
import org.jetbrains.kotlin.config.CompilerConfigurationKey;
|
||||||
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCompilationComponents;
|
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCompilationComponents;
|
||||||
import org.jetbrains.kotlin.modules.Module;
|
import org.jetbrains.kotlin.modules.Module;
|
||||||
import org.jetbrains.kotlin.script.ScriptParameter;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -28,9 +27,6 @@ public class JVMConfigurationKeys {
|
|||||||
private JVMConfigurationKeys() {
|
private JVMConfigurationKeys() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final CompilerConfigurationKey<List<ScriptParameter>> SCRIPT_PARAMETERS =
|
|
||||||
CompilerConfigurationKey.create("script");
|
|
||||||
|
|
||||||
public static final CompilerConfigurationKey<Boolean> DISABLE_CALL_ASSERTIONS =
|
public static final CompilerConfigurationKey<Boolean> DISABLE_CALL_ASSERTIONS =
|
||||||
CompilerConfigurationKey.create("disable not-null call assertions");
|
CompilerConfigurationKey.create("disable not-null call assertions");
|
||||||
public static final CompilerConfigurationKey<Boolean> DISABLE_PARAM_ASSERTIONS =
|
public static final CompilerConfigurationKey<Boolean> DISABLE_PARAM_ASSERTIONS =
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import com.google.common.collect.Lists;
|
|||||||
import com.intellij.openapi.Disposable;
|
import com.intellij.openapi.Disposable;
|
||||||
import com.intellij.openapi.project.Project;
|
import com.intellij.openapi.project.Project;
|
||||||
import com.intellij.openapi.vfs.CharsetToolkit;
|
import com.intellij.openapi.vfs.CharsetToolkit;
|
||||||
|
import com.intellij.psi.PsiFile;
|
||||||
import com.intellij.psi.PsiFileFactory;
|
import com.intellij.psi.PsiFileFactory;
|
||||||
import com.intellij.psi.impl.PsiFileFactoryImpl;
|
import com.intellij.psi.impl.PsiFileFactoryImpl;
|
||||||
import com.intellij.psi.search.ProjectScope;
|
import com.intellij.psi.search.ProjectScope;
|
||||||
@@ -47,6 +48,7 @@ import org.jetbrains.kotlin.codegen.ClassBuilderFactories;
|
|||||||
import org.jetbrains.kotlin.codegen.CompilationErrorHandler;
|
import org.jetbrains.kotlin.codegen.CompilationErrorHandler;
|
||||||
import org.jetbrains.kotlin.codegen.KotlinCodegenFacade;
|
import org.jetbrains.kotlin.codegen.KotlinCodegenFacade;
|
||||||
import org.jetbrains.kotlin.codegen.state.GenerationState;
|
import org.jetbrains.kotlin.codegen.state.GenerationState;
|
||||||
|
import org.jetbrains.kotlin.config.CommonConfigurationKeys;
|
||||||
import org.jetbrains.kotlin.config.CompilerConfiguration;
|
import org.jetbrains.kotlin.config.CompilerConfiguration;
|
||||||
import org.jetbrains.kotlin.context.MutableModuleContext;
|
import org.jetbrains.kotlin.context.MutableModuleContext;
|
||||||
import org.jetbrains.kotlin.descriptors.ScriptDescriptor;
|
import org.jetbrains.kotlin.descriptors.ScriptDescriptor;
|
||||||
@@ -54,6 +56,7 @@ import org.jetbrains.kotlin.descriptors.impl.CompositePackageFragmentProvider;
|
|||||||
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl;
|
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl;
|
||||||
import org.jetbrains.kotlin.idea.KotlinLanguage;
|
import org.jetbrains.kotlin.idea.KotlinLanguage;
|
||||||
import org.jetbrains.kotlin.name.FqName;
|
import org.jetbrains.kotlin.name.FqName;
|
||||||
|
import org.jetbrains.kotlin.name.Name;
|
||||||
import org.jetbrains.kotlin.parsing.KotlinParserDefinition;
|
import org.jetbrains.kotlin.parsing.KotlinParserDefinition;
|
||||||
import org.jetbrains.kotlin.psi.KtFile;
|
import org.jetbrains.kotlin.psi.KtFile;
|
||||||
import org.jetbrains.kotlin.psi.KtScript;
|
import org.jetbrains.kotlin.psi.KtScript;
|
||||||
@@ -66,7 +69,7 @@ import org.jetbrains.kotlin.resolve.lazy.data.JetClassLikeInfo;
|
|||||||
import org.jetbrains.kotlin.resolve.lazy.declarations.*;
|
import org.jetbrains.kotlin.resolve.lazy.declarations.*;
|
||||||
import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyScriptDescriptor;
|
import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyScriptDescriptor;
|
||||||
import org.jetbrains.kotlin.resolve.scopes.LexicalScope;
|
import org.jetbrains.kotlin.resolve.scopes.LexicalScope;
|
||||||
import org.jetbrains.kotlin.script.ScriptPriorities;
|
import org.jetbrains.kotlin.script.*;
|
||||||
import org.jetbrains.kotlin.utils.ExceptionUtilsKt;
|
import org.jetbrains.kotlin.utils.ExceptionUtilsKt;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
@@ -103,6 +106,24 @@ public class ReplInterpreter {
|
|||||||
|
|
||||||
private final boolean ideMode;
|
private final boolean ideMode;
|
||||||
private final ReplSystemInWrapper replReader;
|
private final ReplSystemInWrapper replReader;
|
||||||
|
private final static KotlinScriptDefinition REPL_LINE_AS_SCRIPT_DEFINITION = new KotlinScriptDefinition() {
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public List<ScriptParameter> getScriptParameters(@NotNull ScriptDescriptor scriptDescriptor) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isScript(@NotNull PsiFile file) {
|
||||||
|
return StandardScriptDefinition.INSTANCE.isScript(file);
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public Name getScriptName(@NotNull KtScript script) {
|
||||||
|
return StandardScriptDefinition.INSTANCE.getScriptName(script);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
public ReplInterpreter(
|
public ReplInterpreter(
|
||||||
@NotNull Disposable disposable,
|
@NotNull Disposable disposable,
|
||||||
@@ -110,9 +131,12 @@ public class ReplInterpreter {
|
|||||||
boolean ideMode,
|
boolean ideMode,
|
||||||
@Nullable ReplSystemInWrapper replReader
|
@Nullable ReplSystemInWrapper replReader
|
||||||
) {
|
) {
|
||||||
|
configuration.add(CommonConfigurationKeys.SCRIPT_DEFINITIONS_KEY, REPL_LINE_AS_SCRIPT_DEFINITION);
|
||||||
|
|
||||||
KotlinCoreEnvironment environment =
|
KotlinCoreEnvironment environment =
|
||||||
KotlinCoreEnvironment.createForProduction(disposable, configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES);
|
KotlinCoreEnvironment.createForProduction(disposable, configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES);
|
||||||
Project project = environment.getProject();
|
Project project = environment.getProject();
|
||||||
|
|
||||||
this.psiFileFactory = (PsiFileFactoryImpl) PsiFileFactory.getInstance(project);
|
this.psiFileFactory = (PsiFileFactoryImpl) PsiFileFactory.getInstance(project);
|
||||||
this.trace = new CliLightClassGenerationSupport.NoScopeRecordCliBindingTrace();
|
this.trace = new CliLightClassGenerationSupport.NoScopeRecordCliBindingTrace();
|
||||||
MutableModuleContext moduleContext = TopDownAnalyzerFacadeForJVM.createContextWithSealedModule(project, ModuleNameKt
|
MutableModuleContext moduleContext = TopDownAnalyzerFacadeForJVM.createContextWithSealedModule(project, ModuleNameKt
|
||||||
|
|||||||
@@ -20,9 +20,11 @@ import com.intellij.lang.ASTNode;
|
|||||||
import com.intellij.psi.util.PsiTreeUtil;
|
import com.intellij.psi.util.PsiTreeUtil;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.kotlin.name.FqName;
|
import org.jetbrains.kotlin.name.FqName;
|
||||||
|
import org.jetbrains.kotlin.name.Name;
|
||||||
import org.jetbrains.kotlin.psi.stubs.KotlinScriptStub;
|
import org.jetbrains.kotlin.psi.stubs.KotlinScriptStub;
|
||||||
import org.jetbrains.kotlin.psi.stubs.elements.KtStubElementTypes;
|
import org.jetbrains.kotlin.psi.stubs.elements.KtStubElementTypes;
|
||||||
import org.jetbrains.kotlin.script.ScriptNameUtil;
|
import org.jetbrains.kotlin.script.KotlinScriptDefinition;
|
||||||
|
import org.jetbrains.kotlin.script.KotlinScriptDefinitionProvider;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -43,7 +45,11 @@ public class KtScript extends KtNamedDeclarationStub<KotlinScriptStub> implement
|
|||||||
if (stub != null) {
|
if (stub != null) {
|
||||||
return stub.getFqName();
|
return stub.getFqName();
|
||||||
}
|
}
|
||||||
return ScriptNameUtil.classNameForScript(this);
|
KtFile containingKtFile = getContainingKtFile();
|
||||||
|
KotlinScriptDefinition kotlinScriptDefinition =
|
||||||
|
KotlinScriptDefinitionProvider.getInstance(getProject()).findScriptDefinition(containingKtFile);
|
||||||
|
assert kotlinScriptDefinition != null : "Should not parse a script without definition";
|
||||||
|
return containingKtFile.getPackageFqName().child(kotlinScriptDefinition.getScriptName(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+1
-1
@@ -52,7 +52,7 @@ public abstract class AbstractPsiBasedDeclarationProvider(storageManager: Storag
|
|||||||
}
|
}
|
||||||
else if (declaration is KtScript) {
|
else if (declaration is KtScript) {
|
||||||
val scriptInfo = JetScriptInfo(declaration)
|
val scriptInfo = JetScriptInfo(declaration)
|
||||||
classesAndObjects.put(scriptInfo.script.nameAsSafeName, scriptInfo)
|
classesAndObjects.put(scriptInfo.script.nameAsName, scriptInfo)
|
||||||
}
|
}
|
||||||
else if (declaration is KtParameter || declaration is KtTypedef || declaration is KtMultiDeclaration) {
|
else if (declaration is KtParameter || declaration is KtTypedef || declaration is KtMultiDeclaration) {
|
||||||
// Do nothing, just put it into allDeclarations is enough
|
// Do nothing, just put it into allDeclarations is enough
|
||||||
|
|||||||
+1
-1
@@ -55,7 +55,7 @@ public class LazyScriptClassMemberScope(
|
|||||||
private fun createScriptParameters(constructor: ConstructorDescriptorImpl): List<ValueParameterDescriptor> {
|
private fun createScriptParameters(constructor: ConstructorDescriptorImpl): List<ValueParameterDescriptor> {
|
||||||
val file = scriptDescriptor.scriptInfo.script.getContainingKtFile()
|
val file = scriptDescriptor.scriptInfo.script.getContainingKtFile()
|
||||||
val scriptDefinition = KotlinScriptDefinitionProvider.getInstance(file.project).findScriptDefinition(file)
|
val scriptDefinition = KotlinScriptDefinitionProvider.getInstance(file.project).findScriptDefinition(file)
|
||||||
return scriptDefinition.scriptParameters.mapIndexed { index, scriptParameter ->
|
return scriptDefinition.getScriptParameters(scriptDescriptor).mapIndexed { index, scriptParameter ->
|
||||||
ValueParameterDescriptorImpl(
|
ValueParameterDescriptorImpl(
|
||||||
constructor, null, index, Annotations.EMPTY, scriptParameter.name, scriptParameter.type,
|
constructor, null, index, Annotations.EMPTY, scriptParameter.name, scriptParameter.type,
|
||||||
/* declaresDefaultValue = */ false,
|
/* declaresDefaultValue = */ false,
|
||||||
|
|||||||
@@ -16,9 +16,40 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.script
|
package org.jetbrains.kotlin.script
|
||||||
|
|
||||||
|
import com.intellij.psi.PsiFile
|
||||||
|
import com.intellij.util.PathUtil
|
||||||
|
import org.jetbrains.kotlin.descriptors.ScriptDescriptor
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
import org.jetbrains.kotlin.parsing.KotlinParserDefinition
|
||||||
|
import org.jetbrains.kotlin.psi.KtScript
|
||||||
|
import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns
|
||||||
import org.jetbrains.kotlin.types.KotlinType
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
|
import org.jetbrains.kotlin.types.Variance
|
||||||
|
|
||||||
class KotlinScriptDefinition(val extension: String, val scriptParameters: List<ScriptParameter>)
|
interface KotlinScriptDefinition {
|
||||||
|
fun getScriptParameters(scriptDescriptor: ScriptDescriptor): List<ScriptParameter>
|
||||||
|
fun isScript(file: PsiFile): Boolean
|
||||||
|
fun getScriptName(script: KtScript): Name
|
||||||
|
}
|
||||||
|
|
||||||
class ScriptParameter(val name: Name, val type: KotlinType)
|
class ScriptParameter(val name: Name, val type: KotlinType)
|
||||||
|
|
||||||
|
object StandardScriptDefinition : KotlinScriptDefinition {
|
||||||
|
private val ARGS_NAME = Name.identifier("args")
|
||||||
|
|
||||||
|
override fun getScriptName(script: KtScript): Name {
|
||||||
|
return ScriptNameUtil.fileNameWithExtensionStripped(script, KotlinParserDefinition.STD_SCRIPT_EXT)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun isScript(file: PsiFile): Boolean {
|
||||||
|
return PathUtil.getFileExtension(file.name) == KotlinParserDefinition.STD_SCRIPT_SUFFIX
|
||||||
|
}
|
||||||
|
|
||||||
|
// NOTE: for now we treat .kts files as if they have 'args: Array<String>' parameter
|
||||||
|
// this is not supposed to be final design
|
||||||
|
override fun getScriptParameters(scriptDescriptor: ScriptDescriptor): List<ScriptParameter> {
|
||||||
|
val builtIns = scriptDescriptor.builtIns
|
||||||
|
val arrayOfStrings = builtIns.getArrayType(Variance.INVARIANT, builtIns.stringType)
|
||||||
|
return listOf(ScriptParameter(ARGS_NAME, arrayOfStrings))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
+13
-27
@@ -20,42 +20,28 @@ import com.intellij.openapi.components.ServiceManager;
|
|||||||
import com.intellij.openapi.project.Project;
|
import com.intellij.openapi.project.Project;
|
||||||
import com.intellij.psi.PsiFile;
|
import com.intellij.psi.PsiFile;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.kotlin.parsing.KotlinParserDefinition;
|
import org.jetbrains.annotations.TestOnly;
|
||||||
import org.jetbrains.kotlin.psi.KtFile;
|
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class KotlinScriptDefinitionProvider {
|
public class KotlinScriptDefinitionProvider {
|
||||||
private final Map<String, KotlinScriptDefinition> scripts = new HashMap<String, KotlinScriptDefinition>();
|
private final List<KotlinScriptDefinition> definitions = new ArrayList<KotlinScriptDefinition>();
|
||||||
private final Set<PsiFile> scriptsFiles = new HashSet<PsiFile>();
|
|
||||||
|
|
||||||
private static final KotlinScriptDefinition
|
|
||||||
standardScript = new KotlinScriptDefinition(KotlinParserDefinition.STD_SCRIPT_EXT, Collections.<ScriptParameter>emptyList());
|
|
||||||
|
|
||||||
public static KotlinScriptDefinitionProvider getInstance(Project project) {
|
public static KotlinScriptDefinitionProvider getInstance(Project project) {
|
||||||
return ServiceManager.getService(project, KotlinScriptDefinitionProvider.class);
|
return ServiceManager.getService(project, KotlinScriptDefinitionProvider.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public KotlinScriptDefinitionProvider() {
|
public KotlinScriptDefinitionProvider() {
|
||||||
// .kts will take analyzer parameters explicitly specified on compilation
|
definitions.add(StandardScriptDefinition.INSTANCE);
|
||||||
addScriptDefinition(standardScript);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void markFileAsScript(KtFile file) {
|
|
||||||
scriptsFiles.add(file);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public KotlinScriptDefinition findScriptDefinition(PsiFile psiFile) {
|
public KotlinScriptDefinition findScriptDefinition(PsiFile psiFile) {
|
||||||
boolean force = scriptsFiles.contains(psiFile);
|
for (KotlinScriptDefinition definition : definitions) {
|
||||||
|
if (definition.isScript(psiFile)) {
|
||||||
String name = psiFile.getName();
|
return definition;
|
||||||
for (Map.Entry<String, KotlinScriptDefinition> e : scripts.entrySet()) {
|
|
||||||
if (name.endsWith(e.getKey())) {
|
|
||||||
return e.getValue();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(force)
|
|
||||||
return standardScript;
|
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -64,13 +50,13 @@ public class KotlinScriptDefinitionProvider {
|
|||||||
return findScriptDefinition(psiFile) != null;
|
return findScriptDefinition(psiFile) != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestOnly
|
||||||
public void addScriptDefinition(@NotNull KotlinScriptDefinition scriptDefinition) {
|
public void addScriptDefinition(@NotNull KotlinScriptDefinition scriptDefinition) {
|
||||||
scripts.put(scriptDefinition.getExtension(), scriptDefinition);
|
definitions.add(0, scriptDefinition);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addScriptDefinitions(List<KotlinScriptDefinition> definitions) {
|
public void setScriptDefinitions(@NotNull List<KotlinScriptDefinition> definitions) {
|
||||||
for (KotlinScriptDefinition definition : definitions) {
|
this.definitions.clear();
|
||||||
addScriptDefinition(definition);
|
this.definitions.addAll(definitions);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,9 +17,8 @@
|
|||||||
package org.jetbrains.kotlin.script;
|
package org.jetbrains.kotlin.script;
|
||||||
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.kotlin.name.FqName;
|
import org.jetbrains.kotlin.name.Name;
|
||||||
import org.jetbrains.kotlin.psi.KtFile;
|
import org.jetbrains.kotlin.psi.KtFile;
|
||||||
import org.jetbrains.kotlin.psi.KtPackageDirective;
|
|
||||||
import org.jetbrains.kotlin.psi.KtScript;
|
import org.jetbrains.kotlin.psi.KtScript;
|
||||||
|
|
||||||
public class ScriptNameUtil {
|
public class ScriptNameUtil {
|
||||||
@@ -27,27 +26,24 @@ public class ScriptNameUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public static FqName classNameForScript(KtScript script) {
|
public static Name fileNameWithExtensionStripped(@NotNull KtScript script, @NotNull String extension) {
|
||||||
KtFile file = script.getContainingKtFile();
|
KtFile file = script.getContainingKtFile();
|
||||||
KotlinScriptDefinition scriptDefinition = KotlinScriptDefinitionProvider.getInstance(file.getProject()).findScriptDefinition(file);
|
|
||||||
|
|
||||||
String name = file.getName();
|
String name = file.getName();
|
||||||
int index = name.lastIndexOf('/');
|
int index = name.lastIndexOf('/');
|
||||||
if(index != -1)
|
if (index != -1) {
|
||||||
name = name.substring(index+1);
|
name = name.substring(index + 1);
|
||||||
if(name.endsWith(scriptDefinition.getExtension()))
|
}
|
||||||
name = name.substring(0, name.length()-scriptDefinition.getExtension().length());
|
if (name.endsWith(extension)) {
|
||||||
|
name = name.substring(0, name.length() - extension.length());
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
index = name.indexOf('.');
|
index = name.indexOf('.');
|
||||||
if(index != -1)
|
if (index != -1) {
|
||||||
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('.', '_');
|
name = name.replace('.', '_');
|
||||||
KtPackageDirective directive = file.getPackageDirective();
|
return Name.identifier(name);
|
||||||
if(directive != null && directive.getQualifiedName().length() > 0) {
|
|
||||||
name = directive.getQualifiedName() + "." + name;
|
|
||||||
}
|
|
||||||
return new FqName(name);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
package
|
package
|
||||||
|
|
||||||
public final class Script {
|
public final class Script {
|
||||||
public constructor Script()
|
public constructor Script(/*0*/ args: kotlin.Array<kotlin.String>)
|
||||||
|
public final val args: kotlin.Array<kotlin.String>
|
||||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
|||||||
+8
-7
@@ -4,6 +4,14 @@ package test {
|
|||||||
|
|
||||||
public final class A {
|
public final class A {
|
||||||
public constructor A()
|
public constructor A()
|
||||||
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
}
|
||||||
|
|
||||||
|
public final class A {
|
||||||
|
public constructor A(/*0*/ args: kotlin.Array<kotlin.String>)
|
||||||
|
public final val args: kotlin.Array<kotlin.String>
|
||||||
public final val x: kotlin.Int = 1
|
public final val x: kotlin.Int = 1
|
||||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
@@ -17,13 +25,6 @@ package test {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public final class A {
|
|
||||||
public constructor A()
|
|
||||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
|
||||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
|
||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
|
||||||
}
|
|
||||||
|
|
||||||
public final class F1 {
|
public final class F1 {
|
||||||
public constructor F1()
|
public constructor F1()
|
||||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
|
|||||||
+2
-1
@@ -1,7 +1,8 @@
|
|||||||
package
|
package
|
||||||
|
|
||||||
public final class AccessForwardDeclarationInScript {
|
public final class AccessForwardDeclarationInScript {
|
||||||
public constructor AccessForwardDeclarationInScript()
|
public constructor AccessForwardDeclarationInScript(/*0*/ args: kotlin.Array<kotlin.String>)
|
||||||
|
public final val args: kotlin.Array<kotlin.String>
|
||||||
public final val x: kotlin.Int = 2
|
public final val x: kotlin.Int = 2
|
||||||
public final val y: kotlin.Int = 2
|
public final val y: kotlin.Int = 2
|
||||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
package
|
package
|
||||||
|
|
||||||
public final class ComplexScript {
|
public final class ComplexScript {
|
||||||
public constructor ComplexScript()
|
public constructor ComplexScript(/*0*/ args: kotlin.Array<kotlin.String>)
|
||||||
|
public final val args: kotlin.Array<kotlin.String>
|
||||||
public final val y: kotlin.Int = 2
|
public final val y: kotlin.Int = 2
|
||||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
public final fun foo(/*0*/ x: kotlin.Int): kotlin.Int
|
public final fun foo(/*0*/ x: kotlin.Int): kotlin.Int
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
package
|
package
|
||||||
|
|
||||||
public final class NestedInnerClass {
|
public final class NestedInnerClass {
|
||||||
public constructor NestedInnerClass()
|
public constructor NestedInnerClass(/*0*/ args: kotlin.Array<kotlin.String>)
|
||||||
|
public final val args: kotlin.Array<kotlin.String>
|
||||||
public final val property: kotlin.String = ""
|
public final val property: kotlin.String = ""
|
||||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
public final fun function(): kotlin.Int
|
public final fun function(): kotlin.Int
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
package
|
package
|
||||||
|
|
||||||
public final class SimpleScript {
|
public final class SimpleScript {
|
||||||
public constructor SimpleScript()
|
public constructor SimpleScript(/*0*/ args: kotlin.Array<kotlin.String>)
|
||||||
|
public final val args: kotlin.Array<kotlin.String>
|
||||||
public final val x: kotlin.Int = 1
|
public final val x: kotlin.Int = 1
|
||||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
|
|||||||
+2
-1
@@ -1,8 +1,9 @@
|
|||||||
package
|
package
|
||||||
|
|
||||||
public final class Imports {
|
public final class Imports {
|
||||||
public constructor Imports()
|
public constructor Imports(/*0*/ args: kotlin.Array<kotlin.String>)
|
||||||
public final val al: java.util.ArrayList<kotlin.String>? = null
|
public final val al: java.util.ArrayList<kotlin.String>? = null
|
||||||
|
public final val args: kotlin.Array<kotlin.String>
|
||||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
package
|
package
|
||||||
|
|
||||||
public final class Script {
|
public final class Script {
|
||||||
public constructor Script()
|
public constructor Script(/*0*/ args: kotlin.Array<kotlin.String>)
|
||||||
|
public final val args: kotlin.Array<kotlin.String>
|
||||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
public final fun main(): kotlin.Boolean
|
public final fun main(): kotlin.Boolean
|
||||||
|
|||||||
@@ -23,8 +23,10 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles;
|
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles;
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment;
|
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment;
|
||||||
|
import org.jetbrains.kotlin.config.CommonConfigurationKeys;
|
||||||
import org.jetbrains.kotlin.config.CompilerConfiguration;
|
import org.jetbrains.kotlin.config.CompilerConfiguration;
|
||||||
import org.jetbrains.kotlin.config.ContentRootsKt;
|
import org.jetbrains.kotlin.config.ContentRootsKt;
|
||||||
|
import org.jetbrains.kotlin.script.StandardScriptDefinition;
|
||||||
import org.jetbrains.kotlin.test.ConfigurationKind;
|
import org.jetbrains.kotlin.test.ConfigurationKind;
|
||||||
import org.jetbrains.kotlin.test.KotlinLiteFixture;
|
import org.jetbrains.kotlin.test.KotlinLiteFixture;
|
||||||
import org.jetbrains.kotlin.test.KotlinTestUtils;
|
import org.jetbrains.kotlin.test.KotlinTestUtils;
|
||||||
@@ -66,6 +68,7 @@ public abstract class KotlinMultiFileTestWithWithJava<M, F> extends KotlinLiteFi
|
|||||||
protected KotlinCoreEnvironment createEnvironment() {
|
protected KotlinCoreEnvironment createEnvironment() {
|
||||||
File javaFilesDir = createJavaFilesDir();
|
File javaFilesDir = createJavaFilesDir();
|
||||||
CompilerConfiguration configuration = createCompilerConfiguration(javaFilesDir);
|
CompilerConfiguration configuration = createCompilerConfiguration(javaFilesDir);
|
||||||
|
configuration.add(CommonConfigurationKeys.SCRIPT_DEFINITIONS_KEY, StandardScriptDefinition.INSTANCE);
|
||||||
File kotlinSourceRoot = getKotlinSourceRoot();
|
File kotlinSourceRoot = getKotlinSourceRoot();
|
||||||
if (kotlinSourceRoot != null) {
|
if (kotlinSourceRoot != null) {
|
||||||
ContentRootsKt.addKotlinSourceRoot(configuration, kotlinSourceRoot.getPath());
|
ContentRootsKt.addKotlinSourceRoot(configuration, kotlinSourceRoot.getPath());
|
||||||
|
|||||||
@@ -27,9 +27,9 @@ import org.jetbrains.kotlin.name.Name;
|
|||||||
import org.jetbrains.kotlin.psi.KtFile;
|
import org.jetbrains.kotlin.psi.KtFile;
|
||||||
import org.jetbrains.kotlin.resolve.AnalyzingUtils;
|
import org.jetbrains.kotlin.resolve.AnalyzingUtils;
|
||||||
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform;
|
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform;
|
||||||
import org.jetbrains.kotlin.script.ScriptParameter;
|
|
||||||
import org.jetbrains.kotlin.script.KotlinScriptDefinition;
|
|
||||||
import org.jetbrains.kotlin.script.KotlinScriptDefinitionProvider;
|
import org.jetbrains.kotlin.script.KotlinScriptDefinitionProvider;
|
||||||
|
import org.jetbrains.kotlin.script.ScriptParameter;
|
||||||
|
import org.jetbrains.kotlin.scripts.TestScriptDefinition;
|
||||||
import org.jetbrains.kotlin.test.KotlinTestUtils;
|
import org.jetbrains.kotlin.test.KotlinTestUtils;
|
||||||
import org.jetbrains.kotlin.types.KotlinType;
|
import org.jetbrains.kotlin.types.KotlinType;
|
||||||
import org.jetbrains.kotlin.types.Variance;
|
import org.jetbrains.kotlin.types.Variance;
|
||||||
@@ -156,8 +156,9 @@ public class CodegenTestFiles {
|
|||||||
scriptParameterValues.add(value);
|
scriptParameterValues.add(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
KotlinScriptDefinitionProvider.getInstance(project).addScriptDefinition(
|
KotlinScriptDefinitionProvider definitionProvider = KotlinScriptDefinitionProvider.getInstance(project);
|
||||||
new KotlinScriptDefinition(
|
definitionProvider.addScriptDefinition(
|
||||||
|
new TestScriptDefinition(
|
||||||
".kts",
|
".kts",
|
||||||
scriptParameterTypes
|
scriptParameterTypes
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -18,30 +18,40 @@ package org.jetbrains.kotlin.codegen;
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.name.Name;
|
import org.jetbrains.kotlin.name.Name;
|
||||||
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform;
|
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform;
|
||||||
import org.jetbrains.kotlin.script.ScriptParameter;
|
|
||||||
import org.jetbrains.kotlin.script.KotlinScriptDefinition;
|
import org.jetbrains.kotlin.script.KotlinScriptDefinition;
|
||||||
import org.jetbrains.kotlin.script.KotlinScriptDefinitionProvider;
|
import org.jetbrains.kotlin.script.KotlinScriptDefinitionProvider;
|
||||||
|
import org.jetbrains.kotlin.script.ScriptParameter;
|
||||||
|
import org.jetbrains.kotlin.scripts.TestScriptDefinition;
|
||||||
import org.jetbrains.kotlin.test.ConfigurationKind;
|
import org.jetbrains.kotlin.test.ConfigurationKind;
|
||||||
import org.jetbrains.org.objectweb.asm.Opcodes;
|
import org.jetbrains.org.objectweb.asm.Opcodes;
|
||||||
|
|
||||||
import java.lang.reflect.Constructor;
|
import java.lang.reflect.Constructor;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
|
|
||||||
import static java.util.Collections.singletonList;
|
import static java.util.Collections.singletonList;
|
||||||
|
|
||||||
public class ScriptGenTest extends CodegenTestCase {
|
public class ScriptGenTest extends CodegenTestCase {
|
||||||
private static final KotlinScriptDefinition FIB_SCRIPT_DEFINITION =
|
private static final KotlinScriptDefinition FIB_SCRIPT_DEFINITION =
|
||||||
new KotlinScriptDefinition(
|
new TestScriptDefinition(
|
||||||
".lang.kt",
|
".lang.kt",
|
||||||
singletonList(new ScriptParameter(Name.identifier("num"), JvmPlatform.INSTANCE$.getBuiltIns().getIntType()))
|
singletonList(new ScriptParameter(Name.identifier("num"), JvmPlatform.INSTANCE$.getBuiltIns().getIntType()))
|
||||||
);
|
);
|
||||||
|
private static final KotlinScriptDefinition NO_PARAM_SCRIPT_DEFINITION =
|
||||||
|
new TestScriptDefinition(
|
||||||
|
".kts",
|
||||||
|
Collections.<ScriptParameter>emptyList()
|
||||||
|
);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void setUp() throws Exception {
|
protected void setUp() throws Exception {
|
||||||
super.setUp();
|
super.setUp();
|
||||||
createEnvironmentWithMockJdkAndIdeaAnnotations(ConfigurationKind.JDK_ONLY);
|
createEnvironmentWithMockJdkAndIdeaAnnotations(ConfigurationKind.JDK_ONLY);
|
||||||
KotlinScriptDefinitionProvider.getInstance(myEnvironment.getProject()).addScriptDefinition(FIB_SCRIPT_DEFINITION);
|
KotlinScriptDefinitionProvider.getInstance(myEnvironment.getProject()).setScriptDefinitions(
|
||||||
|
Arrays.asList(FIB_SCRIPT_DEFINITION, NO_PARAM_SCRIPT_DEFINITION)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testLanguage() throws Exception {
|
public void testLanguage() throws Exception {
|
||||||
|
|||||||
@@ -25,16 +25,15 @@ import org.jetbrains.kotlin.cli.common.messages.*;
|
|||||||
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles;
|
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles;
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment;
|
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment;
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler;
|
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler;
|
||||||
import org.jetbrains.kotlin.cli.jvm.config.JVMConfigurationKeys;
|
|
||||||
import org.jetbrains.kotlin.codegen.CompilationException;
|
import org.jetbrains.kotlin.codegen.CompilationException;
|
||||||
import org.jetbrains.kotlin.config.CommonConfigurationKeys;
|
import org.jetbrains.kotlin.config.CommonConfigurationKeys;
|
||||||
import org.jetbrains.kotlin.config.CompilerConfiguration;
|
import org.jetbrains.kotlin.config.CompilerConfiguration;
|
||||||
import org.jetbrains.kotlin.config.ContentRootsKt;
|
import org.jetbrains.kotlin.config.ContentRootsKt;
|
||||||
import org.jetbrains.kotlin.name.Name;
|
import org.jetbrains.kotlin.name.Name;
|
||||||
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform;
|
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform;
|
||||||
import org.jetbrains.kotlin.script.ScriptParameter;
|
|
||||||
import org.jetbrains.kotlin.script.KotlinScriptDefinition;
|
import org.jetbrains.kotlin.script.KotlinScriptDefinition;
|
||||||
import org.jetbrains.kotlin.script.KotlinScriptDefinitionProvider;
|
import org.jetbrains.kotlin.script.KotlinScriptDefinitionProvider;
|
||||||
|
import org.jetbrains.kotlin.script.ScriptParameter;
|
||||||
import org.jetbrains.kotlin.test.ConfigurationKind;
|
import org.jetbrains.kotlin.test.ConfigurationKind;
|
||||||
import org.jetbrains.kotlin.test.KotlinTestUtils;
|
import org.jetbrains.kotlin.test.KotlinTestUtils;
|
||||||
import org.jetbrains.kotlin.test.TestJdkKind;
|
import org.jetbrains.kotlin.test.TestJdkKind;
|
||||||
@@ -49,22 +48,21 @@ import java.util.List;
|
|||||||
public class ScriptTest {
|
public class ScriptTest {
|
||||||
@Test
|
@Test
|
||||||
public void testScript() throws Exception {
|
public void testScript() throws Exception {
|
||||||
Class<?> aClass = compileScript("fib.kts", numIntParam(), Collections.<KotlinScriptDefinition>emptyList());
|
Class<?> aClass = compileScript("fib.kts", new TestScriptDefinition(".kts", numIntParam()));
|
||||||
Assert.assertNotNull(aClass);
|
Assert.assertNotNull(aClass);
|
||||||
aClass.getConstructor(int.class).newInstance(4);
|
aClass.getConstructor(int.class).newInstance(4);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testScriptWithPackage() throws Exception {
|
public void testScriptWithPackage() throws Exception {
|
||||||
Class<?> aClass = compileScript("fib.pkg.kts", numIntParam(), Collections.<KotlinScriptDefinition>emptyList());
|
Class<?> aClass = compileScript("fib.pkg.kts", new TestScriptDefinition(".kts", numIntParam()));
|
||||||
Assert.assertNotNull(aClass);
|
Assert.assertNotNull(aClass);
|
||||||
aClass.getConstructor(int.class).newInstance(4);
|
aClass.getConstructor(int.class).newInstance(4);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testScriptWithScriptDefinition() throws Exception {
|
public void testScriptWithScriptDefinition() throws Exception {
|
||||||
Class<?> aClass = compileScript("fib.fib.kt", null,
|
Class<?> aClass = compileScript("fib.fib.kt", new TestScriptDefinition(".fib.kt", numIntParam()));
|
||||||
Collections.singletonList(new KotlinScriptDefinition(".fib.kt", numIntParam())));
|
|
||||||
Assert.assertNotNull(aClass);
|
Assert.assertNotNull(aClass);
|
||||||
aClass.getConstructor(int.class).newInstance(4);
|
aClass.getConstructor(int.class).newInstance(4);
|
||||||
}
|
}
|
||||||
@@ -72,8 +70,7 @@ public class ScriptTest {
|
|||||||
@Nullable
|
@Nullable
|
||||||
private static Class<?> compileScript(
|
private static Class<?> compileScript(
|
||||||
@NotNull String scriptPath,
|
@NotNull String scriptPath,
|
||||||
@Nullable List<ScriptParameter> scriptParameters,
|
@NotNull KotlinScriptDefinition scriptDefinition
|
||||||
@NotNull List<KotlinScriptDefinition> scriptDefinitions
|
|
||||||
) {
|
) {
|
||||||
KotlinPaths paths = PathUtil.getKotlinPathsForDistDirectory();
|
KotlinPaths paths = PathUtil.getKotlinPathsForDistDirectory();
|
||||||
MessageCollector messageCollector = PrintingMessageCollector.PLAIN_TEXT_TO_SYSTEM_ERR;
|
MessageCollector messageCollector = PrintingMessageCollector.PLAIN_TEXT_TO_SYSTEM_ERR;
|
||||||
@@ -84,14 +81,12 @@ public class ScriptTest {
|
|||||||
KotlinTestUtils.compilerConfigurationForTests(ConfigurationKind.JDK_ONLY, TestJdkKind.FULL_JDK);
|
KotlinTestUtils.compilerConfigurationForTests(ConfigurationKind.JDK_ONLY, TestJdkKind.FULL_JDK);
|
||||||
configuration.put(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, messageCollector);
|
configuration.put(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, messageCollector);
|
||||||
ContentRootsKt.addKotlinSourceRoot(configuration, "compiler/testData/script/" + scriptPath);
|
ContentRootsKt.addKotlinSourceRoot(configuration, "compiler/testData/script/" + scriptPath);
|
||||||
configuration.addAll(CommonConfigurationKeys.SCRIPT_DEFINITIONS_KEY, scriptDefinitions);
|
configuration.add(CommonConfigurationKeys.SCRIPT_DEFINITIONS_KEY, scriptDefinition);
|
||||||
configuration.put(JVMConfigurationKeys.SCRIPT_PARAMETERS, scriptParameters);
|
|
||||||
|
|
||||||
KotlinCoreEnvironment environment =
|
KotlinCoreEnvironment environment =
|
||||||
KotlinCoreEnvironment.createForProduction(rootDisposable, configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES);
|
KotlinCoreEnvironment.createForProduction(rootDisposable, configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
KotlinScriptDefinitionProvider.getInstance(environment.getProject()).markFileAsScript(environment.getSourceFiles().get(0));
|
|
||||||
return KotlinToJVMBytecodeCompiler.compileScript(configuration, paths, environment);
|
return KotlinToJVMBytecodeCompiler.compileScript(configuration, paths, environment);
|
||||||
}
|
}
|
||||||
catch (CompilationException e) {
|
catch (CompilationException e) {
|
||||||
@@ -111,6 +106,6 @@ public class ScriptTest {
|
|||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private static List<ScriptParameter> numIntParam() {
|
private static List<ScriptParameter> numIntParam() {
|
||||||
return Collections.singletonList(new ScriptParameter(Name.identifier("num"), JvmPlatform.INSTANCE$.getBuiltIns().getIntType()));
|
return Collections.singletonList(new ScriptParameter(Name.identifier("num"), JvmPlatform.INSTANCE.getBuiltIns().getIntType()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2015 JetBrains s.r.o.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.scripts
|
||||||
|
|
||||||
|
import com.intellij.psi.PsiFile
|
||||||
|
import org.jetbrains.kotlin.descriptors.ScriptDescriptor
|
||||||
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
import org.jetbrains.kotlin.psi.KtScript
|
||||||
|
import org.jetbrains.kotlin.script.KotlinScriptDefinition
|
||||||
|
import org.jetbrains.kotlin.script.ScriptNameUtil
|
||||||
|
import org.jetbrains.kotlin.script.ScriptParameter
|
||||||
|
|
||||||
|
class TestScriptDefinition(
|
||||||
|
val extension: String,
|
||||||
|
val parameters: List<ScriptParameter>
|
||||||
|
) : KotlinScriptDefinition {
|
||||||
|
override fun getScriptParameters(scriptDescriptor: ScriptDescriptor) = parameters
|
||||||
|
override fun isScript(file: PsiFile): Boolean = file.getName().endsWith(extension)
|
||||||
|
override fun getScriptName(script: KtScript): Name = ScriptNameUtil.fileNameWithExtensionStripped(script, extension)
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user