Deprecate and don't write KotlinSyntheticClass$Kind, to be removed later
This commit is contained in:
@@ -22,7 +22,6 @@ import com.intellij.psi.ClassFileViewProvider
|
||||
import org.jetbrains.kotlin.idea.caches.JarUserDataManager
|
||||
import org.jetbrains.kotlin.idea.decompiler.textBuilder.DirectoryBasedClassFinder
|
||||
import org.jetbrains.kotlin.load.java.JvmAnnotationNames.KotlinClass
|
||||
import org.jetbrains.kotlin.load.java.JvmAnnotationNames.KotlinSyntheticClass
|
||||
import org.jetbrains.kotlin.load.kotlin.KotlinBinaryClassCache
|
||||
import org.jetbrains.kotlin.load.kotlin.KotlinJvmBinaryClass
|
||||
import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader
|
||||
@@ -71,15 +70,10 @@ public fun isKotlinInternalCompiledFile(file: VirtualFile): Boolean {
|
||||
}
|
||||
val header = KotlinBinaryClassCache.getKotlinBinaryClass(file)?.classHeader ?: return false
|
||||
|
||||
if (header.syntheticClassKind == KotlinSyntheticClass.Kind.PACKAGE_PART) {
|
||||
// Old package parts should not be decompiled and shown anywhere
|
||||
val version = header.version
|
||||
return version.major < 0 || (version.major == 0 && version.minor < 24)
|
||||
}
|
||||
|
||||
return header.kind == KotlinClassHeader.Kind.SYNTHETIC_CLASS ||
|
||||
(header.kind == KotlinClassHeader.Kind.CLASS && header.classKind != null && header.classKind != KotlinClass.Kind.CLASS) ||
|
||||
(header.kind == KotlinClassHeader.Kind.MULTIFILE_CLASS_PART)
|
||||
header.kind == KotlinClassHeader.Kind.MULTIFILE_CLASS_PART ||
|
||||
header.syntheticClassKind == "PACKAGE_PART"
|
||||
}
|
||||
|
||||
public fun isKotlinJavaScriptInternalCompiledFile(file: VirtualFile): Boolean =
|
||||
|
||||
+7
-28
@@ -17,16 +17,10 @@
|
||||
package org.jetbrains.kotlin.idea.decompiler
|
||||
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.psi.PsiCompiledFile
|
||||
import com.intellij.psi.PsiJavaFile
|
||||
import com.intellij.psi.PsiManager
|
||||
import com.intellij.psi.impl.compiled.ClsFileImpl
|
||||
import org.jetbrains.kotlin.idea.test.JetLightCodeInsightFixtureTestCase
|
||||
import org.jetbrains.kotlin.idea.decompiler.navigation.NavigateToDecompiledLibraryTest
|
||||
import org.jetbrains.kotlin.load.java.JvmAbi
|
||||
import org.jetbrains.kotlin.idea.test.JetLightCodeInsightFixtureTestCase
|
||||
import org.jetbrains.kotlin.load.java.JvmAnnotationNames.KotlinClass
|
||||
import org.jetbrains.kotlin.load.java.JvmAnnotationNames.KotlinSyntheticClass
|
||||
import org.jetbrains.kotlin.load.java.JvmAnnotationNames.KotlinSyntheticClass.Kind.TRAIT_IMPL
|
||||
import org.jetbrains.kotlin.load.kotlin.KotlinBinaryClassCache
|
||||
import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader
|
||||
import org.junit.Assert
|
||||
@@ -37,31 +31,17 @@ public abstract class AbstractInternalCompiledClassesTest : JetLightCodeInsightF
|
||||
header != null && predicate(header)
|
||||
}
|
||||
|
||||
private fun isSyntheticClassOfKind(kind: KotlinSyntheticClass.Kind) : VirtualFile.() -> Boolean =
|
||||
isFileWithHeader { it.syntheticClassKind == kind }
|
||||
protected fun isSyntheticClass(): VirtualFile.() -> Boolean =
|
||||
isFileWithHeader { it.kind == KotlinClassHeader.Kind.SYNTHETIC_CLASS }
|
||||
|
||||
private fun isClassOfKind(kind: KotlinClass.Kind) : VirtualFile.() -> Boolean =
|
||||
private fun isClassOfKind(kind: KotlinClass.Kind): VirtualFile.() -> Boolean =
|
||||
isFileWithHeader { it.classKind == kind }
|
||||
|
||||
protected fun doTestNoFilesAreBuiltForSyntheticClass(kind: KotlinSyntheticClass.Kind): Unit =
|
||||
doTestNoClassFilesAreBuiltFor(kind.toString(), isSyntheticClassOfKind(kind))
|
||||
|
||||
protected fun doTestNoClassFilesAreBuiltFor(fileKind: String, acceptFile: VirtualFile.() -> Boolean) {
|
||||
val root = NavigateToDecompiledLibraryTest.findTestLibraryRoot(myModule!!)!!
|
||||
val files = arrayListOf<VirtualFile>()
|
||||
root.checkRecursively {
|
||||
if (acceptFile()) {
|
||||
files.add(this)
|
||||
}
|
||||
}
|
||||
assert(files.isEmpty()) { "No class files should be built for $fileKind; found ${files.size()} files: $files" }
|
||||
}
|
||||
|
||||
protected fun doTestNoPsiFilesAreBuiltForLocalClass(kind: KotlinClass.Kind): Unit =
|
||||
doTestNoPsiFilesAreBuiltFor(kind.toString(), isClassOfKind(kind))
|
||||
doTestNoPsiFilesAreBuiltFor(kind.name(), isClassOfKind(kind))
|
||||
|
||||
protected fun doTestNoPsiFilesAreBuiltForSyntheticClass(kind: KotlinSyntheticClass.Kind): Unit =
|
||||
doTestNoPsiFilesAreBuiltFor(kind.toString(), isSyntheticClassOfKind(kind))
|
||||
protected fun doTestNoPsiFilesAreBuiltForSyntheticClasses(): Unit =
|
||||
doTestNoPsiFilesAreBuiltFor("synthetic", isSyntheticClass())
|
||||
|
||||
protected fun doTestNoPsiFilesAreBuiltFor(fileKind: String, acceptFile: VirtualFile.() -> Boolean) {
|
||||
val project = getProject()
|
||||
@@ -69,7 +49,6 @@ public abstract class AbstractInternalCompiledClassesTest : JetLightCodeInsightF
|
||||
val psiFile = PsiManager.getInstance(project).findFile(this)
|
||||
Assert.assertNull("PSI files for $fileKind classes should not be build, is was build for: ${this.getPresentableName()}",
|
||||
psiFile)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -22,22 +22,11 @@ import org.jetbrains.kotlin.idea.test.JdkAndMockLibraryProjectDescriptor
|
||||
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
|
||||
import org.jetbrains.kotlin.load.java.JvmAnnotationNames.KotlinClass.Kind.ANONYMOUS_OBJECT
|
||||
import org.jetbrains.kotlin.load.java.JvmAnnotationNames.KotlinClass.Kind.LOCAL_CLASS
|
||||
import org.jetbrains.kotlin.load.java.JvmAnnotationNames.KotlinSyntheticClass.Kind.*
|
||||
|
||||
public class InternalCompiledClassesTest : AbstractInternalCompiledClassesTest() {
|
||||
private val TEST_DATA_PATH = PluginTestCaseBase.getTestDataPathBase() + "/decompiler/internalClasses"
|
||||
|
||||
fun testNoPackagePartClassesAreBuilt() = doTestNoFilesAreBuiltForSyntheticClass(PACKAGE_PART)
|
||||
|
||||
fun testSamWrapperIsInvisible() = doTestNoPsiFilesAreBuiltForSyntheticClass(SAM_WRAPPER)
|
||||
|
||||
fun testSamLambdaIsInvisible() = doTestNoPsiFilesAreBuiltForSyntheticClass(SAM_LAMBDA)
|
||||
|
||||
fun testCallableReferenceWrapperIsInvisible() = doTestNoPsiFilesAreBuiltForSyntheticClass(CALLABLE_REFERENCE_WRAPPER)
|
||||
|
||||
fun testLocalFunctionIsInvisible() = doTestNoPsiFilesAreBuiltForSyntheticClass(LOCAL_FUNCTION)
|
||||
|
||||
fun testAnonymousFunctionIsInvisible() = doTestNoPsiFilesAreBuiltForSyntheticClass(ANONYMOUS_FUNCTION)
|
||||
fun testSyntheticClassesAreInvisible() = doTestNoPsiFilesAreBuiltForSyntheticClasses()
|
||||
|
||||
fun testLocalClassIsInvisible() = doTestNoPsiFilesAreBuiltForLocalClass(LOCAL_CLASS)
|
||||
|
||||
|
||||
+8
-12
@@ -16,19 +16,17 @@
|
||||
|
||||
package org.jetbrains.kotlin.idea.decompiler.textBuilder
|
||||
|
||||
import com.intellij.testFramework.LightProjectDescriptor
|
||||
import com.intellij.psi.PsiManager
|
||||
import org.junit.Assert
|
||||
import org.jetbrains.kotlin.idea.test.JetJdkAndLibraryProjectDescriptor
|
||||
import java.io.File
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import org.jetbrains.kotlin.idea.decompiler.navigation.NavigateToDecompiledLibraryTest
|
||||
import org.jetbrains.kotlin.load.java.JvmAnnotationNames.KotlinSyntheticClass.Kind.PACKAGE_PART
|
||||
import org.jetbrains.kotlin.load.java.JvmAnnotationNames.KotlinSyntheticClass.Kind.ANONYMOUS_FUNCTION
|
||||
import com.intellij.psi.PsiManager
|
||||
import com.intellij.testFramework.LightProjectDescriptor
|
||||
import org.jetbrains.kotlin.idea.decompiler.AbstractInternalCompiledClassesTest
|
||||
import org.jetbrains.kotlin.idea.decompiler.stubBuilder.findClassFileByName
|
||||
import org.jetbrains.kotlin.idea.decompiler.JetClsFile
|
||||
import org.jetbrains.kotlin.idea.decompiler.navigation.NavigateToDecompiledLibraryTest
|
||||
import org.jetbrains.kotlin.idea.decompiler.stubBuilder.findClassFileByName
|
||||
import org.jetbrains.kotlin.idea.test.JetJdkAndLibraryProjectDescriptor
|
||||
import org.jetbrains.kotlin.test.JetTestUtils
|
||||
import org.junit.Assert
|
||||
import java.io.File
|
||||
|
||||
public class DecompiledTextForWrongAbiVersionTest : AbstractInternalCompiledClassesTest() {
|
||||
|
||||
@@ -36,9 +34,7 @@ public class DecompiledTextForWrongAbiVersionTest : AbstractInternalCompiledClas
|
||||
return JetJdkAndLibraryProjectDescriptor(File(JetTestUtils.getTestDataPathBase() + "/cli/jvm/wrongAbiVersionLib/bin"))
|
||||
}
|
||||
|
||||
fun testPackagePartIsInvisibleWrongAbiVersion() = doTestNoPsiFilesAreBuiltForSyntheticClass(PACKAGE_PART)
|
||||
|
||||
fun testAnonymousFunctionIsInvisibleWrongAbiVersion() = doTestNoPsiFilesAreBuiltForSyntheticClass(ANONYMOUS_FUNCTION)
|
||||
fun testSyntheticClassIsInvisibleWrongAbiVersion() = doTestNoPsiFilesAreBuiltForSyntheticClasses()
|
||||
|
||||
fun testClassWithWrongAbiVersion() = doTest("ClassWithWrongAbiVersion")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user