Ignore anonymous inner classes in LightAnalysisMode tests

This commit is contained in:
Dmitry Petrov
2020-12-18 16:11:20 +03:00
parent 0dff583070
commit 4780c73e40
3 changed files with 16 additions and 35 deletions
@@ -11,7 +11,6 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.TestsRuntimeError;
import org.jetbrains.kotlin.backend.common.CodegenUtil;
import org.jetbrains.kotlin.builtins.StandardNames;
import org.jetbrains.kotlin.codegen.ir.AbstractFirBlackBoxCodegenTest;
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil;
import org.jetbrains.kotlin.psi.KtFile;
@@ -74,27 +73,7 @@ public abstract class AbstractBlackBoxCodegenTest extends CodegenTestCase {
String text =
BytecodeListingTextCollectingVisitor.Companion.getText(
classFileFactory,
new BytecodeListingTextCollectingVisitor.Filter() {
@Override
public boolean shouldWriteClass(int access, @NotNull String name) {
return !name.startsWith("helpers/");
}
@Override
public boolean shouldWriteMethod(int access, @NotNull String name, @NotNull String desc) {
return true;
}
@Override
public boolean shouldWriteField(int access, @NotNull String name, @NotNull String desc) {
return true;
}
@Override
public boolean shouldWriteInnerClass(@NotNull String name) {
return true;
}
}
BytecodeListingTextCollectingVisitor.Filter.ForCodegenTests.INSTANCE
);
assertEqualsToFile(expectedFile, text);
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.codegen
import org.jetbrains.kotlin.builtins.StandardNames
import org.jetbrains.kotlin.test.KotlinTestUtils
import org.jetbrains.kotlin.utils.addToStdlib.firstNotNullResult
import org.jetbrains.kotlin.utils.sure
@@ -22,12 +21,7 @@ abstract class AbstractBytecodeListingTest : CodegenTestCase() {
classFileFactory,
withSignatures = isWithSignatures(wholeFile),
withAnnotations = isWithAnnotations(wholeFile),
filter = object : BytecodeListingTextCollectingVisitor.Filter {
override fun shouldWriteClass(access: Int, name: String): Boolean = !name.startsWith("helpers/")
override fun shouldWriteMethod(access: Int, name: String, desc: String): Boolean = true
override fun shouldWriteField(access: Int, name: String, desc: String): Boolean = true
override fun shouldWriteInnerClass(name: String): Boolean = true
}
filter = BytecodeListingTextCollectingVisitor.Filter.ForCodegenTests
)
val prefixes = when {
@@ -119,13 +113,20 @@ class BytecodeListingTextCollectingVisitor(
fun shouldWriteClass(access: Int, name: String): Boolean
fun shouldWriteMethod(access: Int, name: String, desc: String): Boolean
fun shouldWriteField(access: Int, name: String, desc: String): Boolean
fun shouldWriteInnerClass(name: String): Boolean
fun shouldWriteInnerClass(name: String, outerName: String?, innerName: String?): Boolean
object EMPTY : Filter {
override fun shouldWriteClass(access: Int, name: String) = true
override fun shouldWriteMethod(access: Int, name: String, desc: String) = true
override fun shouldWriteField(access: Int, name: String, desc: String) = true
override fun shouldWriteInnerClass(name: String) = true
override fun shouldWriteInnerClass(name: String, outerName: String?, innerName: String?) = true
}
object ForCodegenTests : Filter {
override fun shouldWriteClass(access: Int, name: String): Boolean = !name.startsWith("helpers/")
override fun shouldWriteMethod(access: Int, name: String, desc: String): Boolean = true
override fun shouldWriteField(access: Int, name: String, desc: String): Boolean = true
override fun shouldWriteInnerClass(name: String, outerName: String?, innerName: String?): Boolean = true
}
}
@@ -320,7 +321,7 @@ class BytecodeListingTextCollectingVisitor(
}
override fun visitInnerClass(name: String, outerName: String?, innerName: String?, access: Int) {
if (!filter.shouldWriteInnerClass(name)) {
if (!filter.shouldWriteInnerClass(name, outerName, innerName)) {
return
}
@@ -80,12 +80,12 @@ abstract class AbstractLightAnalysisModeTest : CodegenTestCase() {
return super.shouldWriteClass(access, name)
}
override fun shouldWriteInnerClass(name: String): Boolean {
override fun shouldWriteInnerClass(name: String, outerName: String?, innerName: String?): Boolean {
val classDescriptor = classInternalNames[name]
if (classDescriptor != null && shouldFilterClass(classDescriptor)) {
return false
}
return super.shouldWriteInnerClass(name)
return super.shouldWriteInnerClass(name, outerName, innerName)
}
private fun shouldFilterClass(descriptor: ClassDescriptor): Boolean {
@@ -117,6 +117,7 @@ abstract class AbstractLightAnalysisModeTest : CodegenTestCase() {
else -> true
}
override fun shouldWriteInnerClass(name: String) = true
override fun shouldWriteInnerClass(name: String, outerName: String?, innerName: String?) =
outerName != null && innerName != null
}
}