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.annotations.Nullable;
import org.jetbrains.kotlin.TestsRuntimeError; import org.jetbrains.kotlin.TestsRuntimeError;
import org.jetbrains.kotlin.backend.common.CodegenUtil; import org.jetbrains.kotlin.backend.common.CodegenUtil;
import org.jetbrains.kotlin.builtins.StandardNames;
import org.jetbrains.kotlin.codegen.ir.AbstractFirBlackBoxCodegenTest; import org.jetbrains.kotlin.codegen.ir.AbstractFirBlackBoxCodegenTest;
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil; import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil;
import org.jetbrains.kotlin.psi.KtFile; import org.jetbrains.kotlin.psi.KtFile;
@@ -74,27 +73,7 @@ public abstract class AbstractBlackBoxCodegenTest extends CodegenTestCase {
String text = String text =
BytecodeListingTextCollectingVisitor.Companion.getText( BytecodeListingTextCollectingVisitor.Companion.getText(
classFileFactory, classFileFactory,
new BytecodeListingTextCollectingVisitor.Filter() { BytecodeListingTextCollectingVisitor.Filter.ForCodegenTests.INSTANCE
@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;
}
}
); );
assertEqualsToFile(expectedFile, text); assertEqualsToFile(expectedFile, text);
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.codegen package org.jetbrains.kotlin.codegen
import org.jetbrains.kotlin.builtins.StandardNames
import org.jetbrains.kotlin.test.KotlinTestUtils import org.jetbrains.kotlin.test.KotlinTestUtils
import org.jetbrains.kotlin.utils.addToStdlib.firstNotNullResult import org.jetbrains.kotlin.utils.addToStdlib.firstNotNullResult
import org.jetbrains.kotlin.utils.sure import org.jetbrains.kotlin.utils.sure
@@ -22,12 +21,7 @@ abstract class AbstractBytecodeListingTest : CodegenTestCase() {
classFileFactory, classFileFactory,
withSignatures = isWithSignatures(wholeFile), withSignatures = isWithSignatures(wholeFile),
withAnnotations = isWithAnnotations(wholeFile), withAnnotations = isWithAnnotations(wholeFile),
filter = object : BytecodeListingTextCollectingVisitor.Filter { filter = BytecodeListingTextCollectingVisitor.Filter.ForCodegenTests
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
}
) )
val prefixes = when { val prefixes = when {
@@ -119,13 +113,20 @@ class BytecodeListingTextCollectingVisitor(
fun shouldWriteClass(access: Int, name: String): Boolean fun shouldWriteClass(access: Int, name: String): Boolean
fun shouldWriteMethod(access: Int, name: String, desc: String): Boolean fun shouldWriteMethod(access: Int, name: String, desc: String): Boolean
fun shouldWriteField(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 { object EMPTY : Filter {
override fun shouldWriteClass(access: Int, name: String) = true override fun shouldWriteClass(access: Int, name: String) = true
override fun shouldWriteMethod(access: Int, name: String, desc: String) = true override fun shouldWriteMethod(access: Int, name: String, desc: String) = true
override fun shouldWriteField(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) { override fun visitInnerClass(name: String, outerName: String?, innerName: String?, access: Int) {
if (!filter.shouldWriteInnerClass(name)) { if (!filter.shouldWriteInnerClass(name, outerName, innerName)) {
return return
} }
@@ -80,12 +80,12 @@ abstract class AbstractLightAnalysisModeTest : CodegenTestCase() {
return super.shouldWriteClass(access, name) 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] val classDescriptor = classInternalNames[name]
if (classDescriptor != null && shouldFilterClass(classDescriptor)) { if (classDescriptor != null && shouldFilterClass(classDescriptor)) {
return false return false
} }
return super.shouldWriteInnerClass(name) return super.shouldWriteInnerClass(name, outerName, innerName)
} }
private fun shouldFilterClass(descriptor: ClassDescriptor): Boolean { private fun shouldFilterClass(descriptor: ClassDescriptor): Boolean {
@@ -117,6 +117,7 @@ abstract class AbstractLightAnalysisModeTest : CodegenTestCase() {
else -> true else -> true
} }
override fun shouldWriteInnerClass(name: String) = true override fun shouldWriteInnerClass(name: String, outerName: String?, innerName: String?) =
outerName != null && innerName != null
} }
} }