Test stub trees compatibility on loadJava/compiledKotlin test data
This commit is contained in:
@@ -31,6 +31,10 @@ import org.jetbrains.kotlin.android.lint.AbstractKotlinLintTest
|
|||||||
import org.jetbrains.kotlin.android.parcel.AbstractParcelBytecodeListingTest
|
import org.jetbrains.kotlin.android.parcel.AbstractParcelBytecodeListingTest
|
||||||
import org.jetbrains.kotlin.android.quickfix.AbstractAndroidLintQuickfixTest
|
import org.jetbrains.kotlin.android.quickfix.AbstractAndroidLintQuickfixTest
|
||||||
import org.jetbrains.kotlin.android.quickfix.AbstractAndroidQuickFixMultiFileTest
|
import org.jetbrains.kotlin.android.quickfix.AbstractAndroidQuickFixMultiFileTest
|
||||||
|
import org.jetbrains.kotlin.android.synthetic.test.AbstractAndroidBoxTest
|
||||||
|
import org.jetbrains.kotlin.android.synthetic.test.AbstractAndroidBytecodeShapeTest
|
||||||
|
import org.jetbrains.kotlin.android.synthetic.test.AbstractAndroidSyntheticPropertyDescriptorTest
|
||||||
|
import org.jetbrains.kotlin.annotation.AbstractAnnotationProcessorBoxTest
|
||||||
import org.jetbrains.kotlin.asJava.AbstractCompilerLightClassTest
|
import org.jetbrains.kotlin.asJava.AbstractCompilerLightClassTest
|
||||||
import org.jetbrains.kotlin.cfg.AbstractControlFlowTest
|
import org.jetbrains.kotlin.cfg.AbstractControlFlowTest
|
||||||
import org.jetbrains.kotlin.cfg.AbstractDataFlowTest
|
import org.jetbrains.kotlin.cfg.AbstractDataFlowTest
|
||||||
@@ -86,6 +90,7 @@ import org.jetbrains.kotlin.idea.debugger.evaluate.*
|
|||||||
import org.jetbrains.kotlin.idea.decompiler.navigation.AbstractNavigateToDecompiledLibraryTest
|
import org.jetbrains.kotlin.idea.decompiler.navigation.AbstractNavigateToDecompiledLibraryTest
|
||||||
import org.jetbrains.kotlin.idea.decompiler.navigation.AbstractNavigateToLibrarySourceTest
|
import org.jetbrains.kotlin.idea.decompiler.navigation.AbstractNavigateToLibrarySourceTest
|
||||||
import org.jetbrains.kotlin.idea.decompiler.stubBuilder.AbstractClsStubBuilderTest
|
import org.jetbrains.kotlin.idea.decompiler.stubBuilder.AbstractClsStubBuilderTest
|
||||||
|
import org.jetbrains.kotlin.idea.decompiler.stubBuilder.AbstractLoadJavaClsStubTest
|
||||||
import org.jetbrains.kotlin.idea.decompiler.textBuilder.AbstractCommonDecompiledTextFromJsMetadataTest
|
import org.jetbrains.kotlin.idea.decompiler.textBuilder.AbstractCommonDecompiledTextFromJsMetadataTest
|
||||||
import org.jetbrains.kotlin.idea.decompiler.textBuilder.AbstractCommonDecompiledTextTest
|
import org.jetbrains.kotlin.idea.decompiler.textBuilder.AbstractCommonDecompiledTextTest
|
||||||
import org.jetbrains.kotlin.idea.decompiler.textBuilder.AbstractJsDecompiledTextFromJsMetadataTest
|
import org.jetbrains.kotlin.idea.decompiler.textBuilder.AbstractJsDecompiledTextFromJsMetadataTest
|
||||||
@@ -155,10 +160,6 @@ import org.jetbrains.kotlin.jvm.runtime.AbstractJvmRuntimeDescriptorLoaderTest
|
|||||||
import org.jetbrains.kotlin.kapt3.test.AbstractClassFileToSourceStubConverterTest
|
import org.jetbrains.kotlin.kapt3.test.AbstractClassFileToSourceStubConverterTest
|
||||||
import org.jetbrains.kotlin.kapt3.test.AbstractKotlinKaptContextTest
|
import org.jetbrains.kotlin.kapt3.test.AbstractKotlinKaptContextTest
|
||||||
import org.jetbrains.kotlin.kdoc.AbstractKDocLexerTest
|
import org.jetbrains.kotlin.kdoc.AbstractKDocLexerTest
|
||||||
import org.jetbrains.kotlin.android.synthetic.test.AbstractAndroidBoxTest
|
|
||||||
import org.jetbrains.kotlin.android.synthetic.test.AbstractAndroidBytecodeShapeTest
|
|
||||||
import org.jetbrains.kotlin.android.synthetic.test.AbstractAndroidSyntheticPropertyDescriptorTest
|
|
||||||
import org.jetbrains.kotlin.annotation.AbstractAnnotationProcessorBoxTest
|
|
||||||
import org.jetbrains.kotlin.modules.xml.AbstractModuleXmlParserTest
|
import org.jetbrains.kotlin.modules.xml.AbstractModuleXmlParserTest
|
||||||
import org.jetbrains.kotlin.multiplatform.AbstractMultiPlatformIntegrationTest
|
import org.jetbrains.kotlin.multiplatform.AbstractMultiPlatformIntegrationTest
|
||||||
import org.jetbrains.kotlin.noarg.AbstractBlackBoxCodegenTestForNoArg
|
import org.jetbrains.kotlin.noarg.AbstractBlackBoxCodegenTestForNoArg
|
||||||
@@ -1062,9 +1063,11 @@ fun main(args: Array<String>) {
|
|||||||
testClass<AbstractResolveByStubTest> {
|
testClass<AbstractResolveByStubTest> {
|
||||||
model("loadJava/compiledKotlin")
|
model("loadJava/compiledKotlin")
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
testGroup("idea/tests", "compiler/testData") {
|
testClass<AbstractLoadJavaClsStubTest> {
|
||||||
|
model("loadJava/compiledKotlin", testMethod = "doTestCompiledKotlin")
|
||||||
|
}
|
||||||
|
|
||||||
testClass<AbstractIdeLightClassTest> {
|
testClass<AbstractIdeLightClassTest> {
|
||||||
model("asJava/lightClasses", excludeDirs = listOf("delegation"), pattern = KT_WITHOUT_DOTS_IN_NAME)
|
model("asJava/lightClasses", excludeDirs = listOf("delegation"), pattern = KT_WITHOUT_DOTS_IN_NAME)
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -91,7 +91,7 @@ object IDEKotlinBinaryClassCache {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private val KOTLIN_IS_COMPILED_FILE_ATTRIBUTE: String = "kotlin-is-binary-compiled".apply {
|
private val KOTLIN_IS_COMPILED_FILE_ATTRIBUTE: String = "kotlin-is-binary-compiled".apply {
|
||||||
ServiceManager.getService(FileAttributeService::class.java).register(this, 1)
|
ServiceManager.getService(FileAttributeService::class.java)?.register(this, 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
private val KOTLIN_BINARY_DATA_KEY = Key.create<KotlinBinaryData>(KOTLIN_IS_COMPILED_FILE_ATTRIBUTE)
|
private val KOTLIN_BINARY_DATA_KEY = Key.create<KotlinBinaryData>(KOTLIN_IS_COMPILED_FILE_ATTRIBUTE)
|
||||||
|
|||||||
+1
-1
@@ -30,7 +30,7 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
data class IsKotlinBinary(val isKotlinBinary: Boolean, val timestamp: Long)
|
data class IsKotlinBinary(val isKotlinBinary: Boolean, val timestamp: Long)
|
||||||
|
|
||||||
val KOTLIN_COMPILED_FILE_ATTRIBUTE: String = "kotlin-compiled-file".apply {
|
val KOTLIN_COMPILED_FILE_ATTRIBUTE: String = "kotlin-compiled-file".apply {
|
||||||
ServiceManager.getService(FileAttributeService::class.java).register(this, 1)
|
ServiceManager.getService(FileAttributeService::class.java)?.register(this, 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
val KEY = Key.create<IsKotlinBinary>(KOTLIN_COMPILED_FILE_ATTRIBUTE)
|
val KEY = Key.create<IsKotlinBinary>(KOTLIN_COMPILED_FILE_ATTRIBUTE)
|
||||||
|
|||||||
+91
@@ -0,0 +1,91 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2017 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.idea.decompiler.stubBuilder
|
||||||
|
|
||||||
|
import com.intellij.openapi.vfs.VirtualFile
|
||||||
|
import com.intellij.psi.PsiManager
|
||||||
|
import com.intellij.testFramework.BinaryLightVirtualFile
|
||||||
|
import com.intellij.testFramework.LightVirtualFile
|
||||||
|
import com.intellij.util.indexing.FileContentImpl
|
||||||
|
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
|
||||||
|
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
||||||
|
import org.jetbrains.kotlin.config.JVMConfigurationKeys
|
||||||
|
import org.jetbrains.kotlin.idea.decompiler.KotlinDecompiledFileViewProvider
|
||||||
|
import org.jetbrains.kotlin.idea.decompiler.classFile.KotlinClsStubBuilder
|
||||||
|
import org.jetbrains.kotlin.idea.decompiler.classFile.KtClsFile
|
||||||
|
import org.jetbrains.kotlin.jvm.compiler.LoadDescriptorUtil
|
||||||
|
import org.jetbrains.kotlin.psi.stubs.elements.KtFileStubBuilder
|
||||||
|
import org.jetbrains.kotlin.test.ConfigurationKind
|
||||||
|
import org.jetbrains.kotlin.test.KotlinTestUtils.getAnnotationsJar
|
||||||
|
import org.jetbrains.kotlin.test.KotlinTestUtils.newConfiguration
|
||||||
|
import org.jetbrains.kotlin.test.TestCaseWithTmpdir
|
||||||
|
import org.jetbrains.kotlin.test.TestJdkKind
|
||||||
|
import org.junit.Assert
|
||||||
|
import java.io.File
|
||||||
|
|
||||||
|
abstract class AbstractLoadJavaClsStubTest : TestCaseWithTmpdir() {
|
||||||
|
@Throws(Exception::class)
|
||||||
|
protected fun doTestCompiledKotlin(ktFileName: String) {
|
||||||
|
doTestCompiledKotlin(ktFileName, ConfigurationKind.JDK_ONLY, false)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Throws(Exception::class)
|
||||||
|
private fun doTestCompiledKotlin(ktFileName: String, configurationKind: ConfigurationKind, useTypeTableInSerializer: Boolean) {
|
||||||
|
val ktFile = File(ktFileName)
|
||||||
|
|
||||||
|
val configuration = newConfiguration(configurationKind, TestJdkKind.MOCK_JDK, getAnnotationsJar())
|
||||||
|
if (useTypeTableInSerializer) {
|
||||||
|
configuration.put(JVMConfigurationKeys.USE_TYPE_TABLE, true)
|
||||||
|
}
|
||||||
|
val environment = KotlinCoreEnvironment.createForTests(testRootDisposable, configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES)
|
||||||
|
LoadDescriptorUtil.compileKotlinToDirAndGetModule(listOf(ktFile), tmpdir, environment)
|
||||||
|
|
||||||
|
val classFiles = tmpdir.walk().filter { it.extension == "class" }.toList()
|
||||||
|
|
||||||
|
val testDir = File(tmpdir, "test")
|
||||||
|
|
||||||
|
val fileChildren = HashMap<String, VirtualFile>()
|
||||||
|
val parentDir = object : LightVirtualFile(testDir.absolutePath) {
|
||||||
|
override fun findChild(name: String) = fileChildren[name]
|
||||||
|
}
|
||||||
|
|
||||||
|
classFiles.forEach { classFile ->
|
||||||
|
Assert.assertTrue(classFile.parent == testDir.absolutePath)
|
||||||
|
fileChildren[classFile.name] = object : BinaryLightVirtualFile(classFile.name, classFile.readBytes()) {
|
||||||
|
override fun getParent(): VirtualFile = parentDir
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (file in fileChildren.values) {
|
||||||
|
val fileContent = FileContentImpl.createByFile(file)
|
||||||
|
|
||||||
|
val stubTreeFromCls = KotlinClsStubBuilder().buildFileStub(fileContent)
|
||||||
|
|
||||||
|
if (stubTreeFromCls != null) {
|
||||||
|
val stubsFromDeserializedDescriptors = run {
|
||||||
|
val decompiledProvider = KotlinDecompiledFileViewProvider(PsiManager.getInstance(environment.project), file, true) { provider ->
|
||||||
|
KtClsFile(provider)
|
||||||
|
}
|
||||||
|
|
||||||
|
KtFileStubBuilder().buildStubTree(KtClsFile(decompiledProvider))
|
||||||
|
}
|
||||||
|
|
||||||
|
Assert.assertEquals("File: ${file.name}", stubsFromDeserializedDescriptors.serializeToString(), stubTreeFromCls.serializeToString())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+3161
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user