Add support for UltraLightScripts
This commit is contained in:
@@ -6,6 +6,7 @@
|
||||
package org.jetbrains.kotlin.asJava.classes
|
||||
|
||||
import com.intellij.testFramework.LightProjectDescriptor
|
||||
import org.jetbrains.kotlin.idea.core.script.ScriptConfigurationManager
|
||||
import org.jetbrains.kotlin.idea.perf.UltraLightChecker
|
||||
import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase
|
||||
import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor
|
||||
@@ -26,6 +27,10 @@ abstract class AbstractUltraLightClassSanityTest : KotlinLightCodeInsightFixture
|
||||
|
||||
UltraLightChecker.checkForReleaseCoroutine(sourceText, module)
|
||||
|
||||
if (file.safeIsScript()) {
|
||||
ScriptConfigurationManager.updateScriptDependenciesSynchronously(file)
|
||||
}
|
||||
|
||||
UltraLightChecker.checkClassEquivalence(file)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.asJava.classes
|
||||
|
||||
import com.intellij.testFramework.LightProjectDescriptor
|
||||
import junit.framework.TestCase
|
||||
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 java.io.File
|
||||
|
||||
abstract class AbstractUltraLightScriptLoadingTest : KotlinLightCodeInsightFixtureTestCase() {
|
||||
override fun getProjectDescriptor(): LightProjectDescriptor = KotlinWithJdkAndRuntimeLightProjectDescriptor.INSTANCE
|
||||
|
||||
fun doTest(testDataPath: String) {
|
||||
val sourceText = File(testDataPath).readText()
|
||||
val file = myFixture.addFileToProject(testDataPath, sourceText) as KtFile
|
||||
|
||||
UltraLightChecker.checkForReleaseCoroutine(sourceText, module)
|
||||
|
||||
TestCase.assertNotNull(file.script)
|
||||
val script = file.script!!
|
||||
|
||||
ScriptConfigurationManager.updateScriptDependenciesSynchronously(file)
|
||||
|
||||
val ultraLightClass = UltraLightChecker.checkScriptEquivalence(script)
|
||||
checkDescriptorsLeak(ultraLightClass)
|
||||
}
|
||||
}
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
/*
|
||||
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.asJava.classes;
|
||||
|
||||
import com.intellij.testFramework.TestDataPath;
|
||||
import org.jetbrains.kotlin.test.JUnit3RunnerWithInners;
|
||||
import org.jetbrains.kotlin.test.KotlinTestUtils;
|
||||
import org.jetbrains.kotlin.test.TestMetadata;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/** This class is generated by {@link org.jetbrains.kotlin.generators.tests.TestsPackage}. DO NOT MODIFY MANUALLY */
|
||||
@SuppressWarnings("all")
|
||||
@TestMetadata("compiler/testData/asJava/ultraLightScripts")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
@RunWith(JUnit3RunnerWithInners.class)
|
||||
public class UltraLightScriptLoadingTestGenerated extends AbstractUltraLightScriptLoadingTest {
|
||||
private void runTest(String testDataFilePath) throws Exception {
|
||||
KotlinTestUtils.runTest(this::doTest, this, testDataFilePath);
|
||||
}
|
||||
|
||||
public void testAllFilesPresentInUltraLightScripts() throws Exception {
|
||||
KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/asJava/ultraLightScripts"), Pattern.compile("^(.+)\\.(kt|kts)$"), null, true);
|
||||
}
|
||||
|
||||
@TestMetadata("FunsPropsAndFields.kts")
|
||||
public void testFunsPropsAndFields() throws Exception {
|
||||
runTest("compiler/testData/asJava/ultraLightScripts/FunsPropsAndFields.kts");
|
||||
}
|
||||
|
||||
@TestMetadata("HelloWorld.kts")
|
||||
public void testHelloWorld() throws Exception {
|
||||
runTest("compiler/testData/asJava/ultraLightScripts/HelloWorld.kts");
|
||||
}
|
||||
|
||||
@TestMetadata("InnerClasses.kts")
|
||||
public void testInnerClasses() throws Exception {
|
||||
runTest("compiler/testData/asJava/ultraLightScripts/InnerClasses.kts");
|
||||
}
|
||||
}
|
||||
@@ -17,17 +17,22 @@ import com.intellij.testFramework.UsefulTestCase
|
||||
import com.intellij.util.PairProcessor
|
||||
import com.intellij.util.ref.DebugReflectionUtil
|
||||
import junit.framework.TestCase
|
||||
import org.jetbrains.kotlin.asJava.KotlinAsJavaSupport
|
||||
import org.jetbrains.kotlin.asJava.LightClassGenerationSupport
|
||||
import org.jetbrains.kotlin.asJava.classes.*
|
||||
import org.jetbrains.kotlin.asJava.elements.KtLightNullabilityAnnotation
|
||||
import org.jetbrains.kotlin.asJava.elements.KtLightPsiArrayInitializerMemberValue
|
||||
import org.jetbrains.kotlin.config.LanguageFeature
|
||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
||||
import org.jetbrains.kotlin.idea.core.script.ScriptConfigurationManager
|
||||
import org.jetbrains.kotlin.idea.project.languageVersionSettings
|
||||
import org.jetbrains.kotlin.j2k.getContainingClass
|
||||
import org.jetbrains.kotlin.load.kotlin.NON_EXISTENT_CLASS_NAME
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.psi.KtScript
|
||||
import org.junit.Assert
|
||||
import kotlin.test.assertFails
|
||||
|
||||
@@ -57,7 +62,6 @@ object UltraLightChecker {
|
||||
fun allClasses(file: KtFile): List<KtClassOrObject> =
|
||||
SyntaxTraverser.psiTraverser(file).filter(KtClassOrObject::class.java).toList()
|
||||
|
||||
|
||||
fun checkFacadeEquivalence(
|
||||
fqName: FqName,
|
||||
searchScope: GlobalSearchScope,
|
||||
@@ -92,6 +96,25 @@ object UltraLightChecker {
|
||||
return ultraLightClass
|
||||
}
|
||||
|
||||
fun checkScriptEquivalence(script: KtScript): KtLightClass {
|
||||
|
||||
val ultraLightScript: KtLightClass?
|
||||
|
||||
val oldForceFlag = KtUltraLightSupport.forceUsingOldLightClasses
|
||||
try {
|
||||
KtUltraLightSupport.forceUsingOldLightClasses = false
|
||||
ultraLightScript = KotlinAsJavaSupport.getInstance(script.project).getLightClassForScript(script)
|
||||
TestCase.assertTrue(ultraLightScript is KtUltraLightClassForScript)
|
||||
ultraLightScript!!
|
||||
val gold = KtLightClassForScript.createNoCache(script, forceUsingOldLightClasses = true)
|
||||
checkClassEquivalenceByRendering(gold, ultraLightScript)
|
||||
} finally {
|
||||
KtUltraLightSupport.forceUsingOldLightClasses = oldForceFlag
|
||||
}
|
||||
|
||||
return ultraLightScript!!
|
||||
}
|
||||
|
||||
private fun checkClassEquivalenceByRendering(gold: PsiClass?, ultraLightClass: PsiClass) {
|
||||
if (gold != null) {
|
||||
Assert.assertFalse(gold.javaClass.name.contains("Ultra"))
|
||||
|
||||
Reference in New Issue
Block a user