[ULC] Fixed invalid constructor parameter list for UL script

This commit is contained in:
Igor Yakovlev
2020-05-20 22:38:15 +03:00
parent bf91ada06c
commit 6accc8fcf9
5 changed files with 62 additions and 1 deletions
@@ -62,13 +62,19 @@ class KtUltraLightClassForScript(
}
private fun MutableList<KtLightMethod>.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 {
@@ -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[])
}
@@ -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[])
}
@@ -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 ...
}
@@ -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)
}