diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightClassForScript.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightClassForScript.kt index fa921dd1177..3da2c265e2a 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightClassForScript.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightClassForScript.kt @@ -62,13 +62,19 @@ class KtUltraLightClassForScript( } private fun MutableList.addScriptDefaultMethods() { + + val defaultConstructorDelegate = LightMethodBuilder(manager, language, name) + .setConstructor(true) + .addModifier(PsiModifier.PUBLIC) + val defaultConstructor = KtUltraLightMethodForSourceDeclaration( - delegate = LightMethodBuilder(manager, language, name).setConstructor(true).addModifier(PsiModifier.PUBLIC), + delegate = defaultConstructorDelegate, declaration = script, support = support, containingClass = this@KtUltraLightClassForScript, methodIndex = METHOD_INDEX_FOR_DEFAULT_CTOR, ) + defaultConstructorDelegate.addParameter(KtUltraLightScriptMainParameter(defaultConstructor)) add(defaultConstructor) val methodBuilder = LightMethodBuilder(manager, language, "main").apply { diff --git a/compiler/testData/asJava/ultraLightScripts/FunsPropsAndFields.java b/compiler/testData/asJava/ultraLightScripts/FunsPropsAndFields.java new file mode 100644 index 00000000000..973567c1190 --- /dev/null +++ b/compiler/testData/asJava/ultraLightScripts/FunsPropsAndFields.java @@ -0,0 +1,23 @@ +public class FunsPropsAndFields /* FunsPropsAndFields*/ { + @kotlin.jvm.JvmField() + public final int testField; + + private final int testPropVal; + + private int testPropVar; + + @null() + public FunsPropsAndFields(@null() java.lang.String[]);// .ctor(java.lang.String[]) + + @org.jetbrains.annotations.NotNull() + public final java.lang.String testFun(int);// testFun(int) + + public final int getTestPropVal();// getTestPropVal() + + public final int getTestPropVar();// getTestPropVar() + + public final void setTestPropVar(int);// setTestPropVar(int) + + public static final void main(@null() java.lang.String[]);// main(java.lang.String[]) + +} \ No newline at end of file diff --git a/compiler/testData/asJava/ultraLightScripts/HelloWorld.java b/compiler/testData/asJava/ultraLightScripts/HelloWorld.java new file mode 100644 index 00000000000..93a54b37436 --- /dev/null +++ b/compiler/testData/asJava/ultraLightScripts/HelloWorld.java @@ -0,0 +1,7 @@ +public class HelloWorld /* HelloWorld*/ { + @null() + public HelloWorld(@null() java.lang.String[]);// .ctor(java.lang.String[]) + + public static final void main(@null() java.lang.String[]);// main(java.lang.String[]) + +} \ No newline at end of file diff --git a/compiler/testData/asJava/ultraLightScripts/InnerClasses.java b/compiler/testData/asJava/ultraLightScripts/InnerClasses.java new file mode 100644 index 00000000000..b0d7b7b774c --- /dev/null +++ b/compiler/testData/asJava/ultraLightScripts/InnerClasses.java @@ -0,0 +1,10 @@ +public class InnerClasses /* InnerClasses*/ { + @null() + public InnerClasses(@null() java.lang.String[]);// .ctor(java.lang.String[]) + + public static final void main(@null() java.lang.String[]);// main(java.lang.String[]) + + + class Bar ... + + } \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/asJava/classes/AbstractUltraLightScriptLoadingTest.kt b/idea/tests/org/jetbrains/kotlin/asJava/classes/AbstractUltraLightScriptLoadingTest.kt index be718152d07..85bcf00d4c6 100644 --- a/idea/tests/org/jetbrains/kotlin/asJava/classes/AbstractUltraLightScriptLoadingTest.kt +++ b/idea/tests/org/jetbrains/kotlin/asJava/classes/AbstractUltraLightScriptLoadingTest.kt @@ -7,12 +7,16 @@ package org.jetbrains.kotlin.asJava.classes import com.intellij.testFramework.LightProjectDescriptor import junit.framework.TestCase +import org.jetbrains.kotlin.asJava.LightClassGenerationSupport +import org.jetbrains.kotlin.asJava.PsiClassRenderer.renderClass import org.jetbrains.kotlin.idea.core.script.ScriptConfigurationManager import org.jetbrains.kotlin.idea.perf.UltraLightChecker import org.jetbrains.kotlin.idea.perf.UltraLightChecker.checkDescriptorsLeak import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor import org.jetbrains.kotlin.psi.KtFile +import org.jetbrains.kotlin.test.KotlinTestUtils +import org.junit.Assert import java.io.File abstract class AbstractUltraLightScriptLoadingTest : KotlinLightCodeInsightFixtureTestCase() { @@ -29,6 +33,17 @@ abstract class AbstractUltraLightScriptLoadingTest : KotlinLightCodeInsightFixtu ScriptConfigurationManager.updateScriptDependenciesSynchronously(file) + val expectedTextFile = File(testDataPath.replaceFirst("\\.kts\$".toRegex(), ".java")) + if (expectedTextFile.exists()) { + val ultraLightScript = LightClassGenerationSupport.getInstance(script.project).createUltraLightClassForScript(script) + TestCase.assertTrue(ultraLightScript is KtUltraLightClassForScript) + ultraLightScript!! + val renderedResult = ultraLightScript.renderClass() + KotlinTestUtils.assertEqualsToFile(expectedTextFile, renderedResult) + checkDescriptorsLeak(ultraLightScript) + return + } + val ultraLightClass = UltraLightChecker.checkScriptEquivalence(script) checkDescriptorsLeak(ultraLightClass) }