diff --git a/idea/src/META-INF/plugin.xml b/idea/src/META-INF/plugin.xml
index 4be55c90633..f8090e618c0 100644
--- a/idea/src/META-INF/plugin.xml
+++ b/idea/src/META-INF/plugin.xml
@@ -391,7 +391,7 @@
-
+
.clone() as KotlinRunConfigurationProducer
}
- @Nullable
- @Override
- public PsiElement getSourceElement() {
- return mySourceElement;
+ private var mySourceElement: PsiElement? = null
+
+ override fun getSourceElement(): PsiElement? {
+ return mySourceElement
}
- @Override
- protected RunnerAndConfigurationSettings createConfigurationByElement(@NotNull Location location, ConfigurationContext configurationContext) {
- JetDeclarationContainer container = getEntryPointContainer(location);
- if (container == null) return null;
+ override fun createConfigurationByElement(location: Location<*>, configurationContext: ConfigurationContext): RunnerAndConfigurationSettings? {
+ val container = getEntryPointContainer(location) ?: return null
- mySourceElement = (PsiElement) container;
+ mySourceElement = container as PsiElement?
- FqName startClassFQName = getStartClassFqName(container);
- if (startClassFQName == null) return null;
+ val startClassFQName = getStartClassFqName(container)
+ if (startClassFQName == null) return null
- Module module = location.getModule();
- assert module != null;
+ val module = location.getModule()
+ assert(module != null)
- return createConfigurationByQName(module, configurationContext, startClassFQName);
+ return createConfigurationByQName(module, configurationContext, startClassFQName)
}
- @Nullable
- private static FqName getStartClassFqName(@Nullable JetDeclarationContainer container) {
- if (container == null) return null;
- if (container instanceof JetFile) return PackageClassUtils.getPackageClassFqName(((JetFile) container).getPackageFqName());
- if (container instanceof JetClassOrObject) {
- JetClassOrObject classOrObject = (JetClassOrObject) container;
- if (classOrObject instanceof JetObjectDeclaration && ((JetObjectDeclaration) classOrObject).isCompanion()) {
- classOrObject = PsiTreeUtil.getParentOfType(classOrObject, JetClass.class);
+ private fun getStartClassFqName(container: JetDeclarationContainer?): FqName? {
+ if (container == null) return null
+ if (container is JetFile) return PackageClassUtils.getPackageClassFqName((container as JetFile?).getPackageFqName())
+ if (container is JetClassOrObject) {
+ if (container is JetObjectDeclaration && container.isCompanion()) {
+ val containerClass = PsiTreeUtil.getParentOfType(container, javaClass())
+ return containerClass?.getFqName()
}
- return classOrObject != null ? classOrObject.getFqName() : null;
+ return container?.getFqName()
}
- throw new IllegalArgumentException("Invalid entry-point container: " + ((PsiElement) container).getText());
+ throw IllegalArgumentException("Invalid entry-point container: " + (container as PsiElement?).getText())
}
- @Nullable
- private static JetDeclarationContainer getEntryPointContainer(@NotNull Location location) {
- if (DumbService.getInstance(location.getProject()).isDumb()) return null;
+ private fun getEntryPointContainer(location: Location<*>): JetDeclarationContainer? {
+ if (DumbService.getInstance(location.getProject()).isDumb()) return null
- Module module = location.getModule();
- if (module == null) return null;
+ val module = location.getModule() ?: return null
- if (ProjectStructureUtil.isJsKotlinModule(module)) return null;
+ if (ProjectStructureUtil.isJsKotlinModule(module)) return null
- PsiElement locationElement = location.getPsiElement();
+ val locationElement = location.getPsiElement()
- PsiFile psiFile = locationElement.getContainingFile();
- if (!(psiFile instanceof JetFile && ProjectRootsUtil.isInProjectOrLibSource(psiFile))) return null;
+ val psiFile = locationElement.getContainingFile()
+ if (!(psiFile is JetFile && ProjectRootsUtil.isInProjectOrLibSource(psiFile))) return null
- JetFile jetFile = (JetFile) psiFile;
- final ResolutionFacade resolutionFacade = ResolvePackage.getResolutionFacade(jetFile);
- MainFunctionDetector mainFunctionDetector = new MainFunctionDetector(
- new NotNullFunction() {
- @NotNull
- @Override
- public FunctionDescriptor fun(JetNamedFunction function) {
- return (FunctionDescriptor) resolutionFacade.resolveToDescriptor(function);
- }
- });
-
- for (JetDeclarationContainer currentElement = PsiTreeUtil.getNonStrictParentOfType(locationElement, JetClassOrObject.class,
- JetFile.class);
- currentElement != null;
- currentElement = PsiTreeUtil.getParentOfType((PsiElement) currentElement, JetClassOrObject.class, JetFile.class)) {
- JetDeclarationContainer entryPointContainer = currentElement;
- if (entryPointContainer instanceof JetClass) {
- entryPointContainer = singleOrNull(((JetClass) currentElement).getCompanionObjects());
+ val resolutionFacade = psiFile.getResolutionFacade()
+ val mainFunctionDetector = MainFunctionDetector(object : NotNullFunction {
+ override fun `fun`(function: JetNamedFunction): FunctionDescriptor {
+ return resolutionFacade.resolveToDescriptor(function) as FunctionDescriptor
}
- if (entryPointContainer != null && mainFunctionDetector.hasMain(entryPointContainer.getDeclarations())) return entryPointContainer;
+ })
+
+ var currentElement = PsiTreeUtil.getNonStrictParentOfType(locationElement, javaClass(), javaClass()) as JetDeclarationContainer
+ while (currentElement != null) {
+ var entryPointContainer = currentElement
+ if (entryPointContainer is JetClass) {
+ entryPointContainer = entryPointContainer.getCompanionObjects().singleOrNull() as JetDeclarationContainer
+ }
+ if (entryPointContainer != null && mainFunctionDetector.hasMain(entryPointContainer.getDeclarations())) return entryPointContainer
+ currentElement = PsiTreeUtil.getParentOfType(currentElement as PsiElement?, javaClass(), javaClass()) as JetDeclarationContainer
}
- return null;
+ return null
}
- @NotNull
- private RunnerAndConfigurationSettings createConfigurationByQName(
- @NotNull Module module,
- ConfigurationContext context,
- @NotNull FqName fqName
- ) {
- RunnerAndConfigurationSettings settings = cloneTemplateConfiguration(module.getProject(), context);
- JetRunConfiguration configuration = (JetRunConfiguration) settings.getConfiguration();
- configuration.setModule(module);
- configuration.setName(StringUtil.trimEnd(fqName.asString(), "." + PackageClassUtils.getPackageClassName(fqName)));
- configuration.setRunClass(fqName.asString());
- return settings;
+ private fun createConfigurationByQName(module: Module, context: ConfigurationContext, fqName: FqName): RunnerAndConfigurationSettings {
+ val settings = cloneTemplateConfiguration(module.getProject(), context)
+ val configuration = settings.getConfiguration() as JetRunConfiguration
+ configuration.setModule(module)
+ configuration.setName(StringUtil.trimEnd(fqName.asString(), "." + PackageClassUtils.getPackageClassName(fqName)))
+ configuration.setRunClass(fqName.asString())
+ return settings
}
- @Override
- protected RunnerAndConfigurationSettings findExistingByElement(
- Location location,
- @NotNull List existingConfigurations,
- ConfigurationContext context
- ) {
- FqName startClassFQName = getStartClassFqName(getEntryPointContainer(location));
- if (startClassFQName == null) return null;
+ override fun findExistingByElement(location: Location<*>?, existingConfigurations: List, context: ConfigurationContext?): RunnerAndConfigurationSettings? {
+ val startClassFQName = getStartClassFqName(getEntryPointContainer(location)) ?: return null
- for (RunnerAndConfigurationSettings existingConfiguration : existingConfigurations) {
- if (existingConfiguration.getType() instanceof JetRunConfigurationType) {
- JetRunConfiguration jetConfiguration = (JetRunConfiguration)existingConfiguration.getConfiguration();
+ for (existingConfiguration in existingConfigurations) {
+ if (existingConfiguration.getType() is JetRunConfigurationType) {
+ val jetConfiguration = existingConfiguration.getConfiguration() as JetRunConfiguration
if (Comparing.equal(jetConfiguration.getRunClass(), startClassFQName.asString())) {
- if (Comparing.equal(location.getModule(), jetConfiguration.getConfigurationModule().getModule())) {
- return existingConfiguration;
+ if (Comparing.equal(location!!.getModule(), jetConfiguration.getConfigurationModule().getModule())) {
+ return existingConfiguration
}
}
}
}
- return null;
+ return null
}
- @Override
- public int compareTo(Object o) {
- return PREFERED;
+ override fun compareTo(o: Any?): Int {
+ return RuntimeConfigurationProducer.PREFERED
}
}