From 9d778711d2aa432a971f11817a94f5c505caa30b Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 28 Sep 2016 14:46:24 +0300 Subject: [PATCH] Support rendering contents of different modules in load* tests This is needed because otherwise with separate modules turned on in the compiler, these tests do not display the contents of classes from the dependency module in the rendered output --- .../jvm/compiler/AbstractLoadJavaTest.java | 24 ++++++----- .../AbstractJvmRuntimeDescriptorLoaderTest.kt | 1 + .../util/RecursiveDescriptorComparator.java | 40 +++++++++++-------- .../AbstractCompileJavaAgainstKotlinTest.java | 32 +++++++-------- ...ompileKotlinAgainstCustomBinariesTest.java | 5 +-- 5 files changed, 56 insertions(+), 46 deletions(-) diff --git a/compiler/tests-common/org/jetbrains/kotlin/jvm/compiler/AbstractLoadJavaTest.java b/compiler/tests-common/org/jetbrains/kotlin/jvm/compiler/AbstractLoadJavaTest.java index f037649fd44..c22c66e6ed5 100644 --- a/compiler/tests-common/org/jetbrains/kotlin/jvm/compiler/AbstractLoadJavaTest.java +++ b/compiler/tests-common/org/jetbrains/kotlin/jvm/compiler/AbstractLoadJavaTest.java @@ -43,7 +43,6 @@ import org.jetbrains.kotlin.test.KotlinTestUtils; import org.jetbrains.kotlin.test.TestCaseWithTmpdir; import org.jetbrains.kotlin.test.TestJdkKind; import org.jetbrains.kotlin.test.util.DescriptorValidator; -import org.jetbrains.kotlin.test.util.RecursiveDescriptorComparator; import org.junit.Assert; import java.io.File; @@ -65,8 +64,11 @@ import static org.jetbrains.kotlin.test.util.RecursiveDescriptorComparator.*; The generated test compares package descriptors loaded from kotlin sources and read from compiled java. */ public abstract class AbstractLoadJavaTest extends TestCaseWithTmpdir { + // There are two modules in each test case (sources and dependencies), so we should render declarations from both of them + public static final Configuration COMPARATOR_CONFIGURATION = DONT_INCLUDE_METHODS_OF_OBJECT.renderDeclarationsFromOtherModules(true); + protected void doTestCompiledJava(@NotNull String javaFileName) throws Exception { - doTestCompiledJava(javaFileName, DONT_INCLUDE_METHODS_OF_OBJECT); + doTestCompiledJava(javaFileName, COMPARATOR_CONFIGURATION); } // Java-Kotlin dependencies are not supported in this method for simplicity @@ -84,11 +86,11 @@ public abstract class AbstractLoadJavaTest extends TestCaseWithTmpdir { javaSources, tmpdir, ConfigurationKind.JDK_ONLY ); - checkJavaPackage(expectedFile, binaryPackageAndContext.first, binaryPackageAndContext.second, DONT_INCLUDE_METHODS_OF_OBJECT); + checkJavaPackage(expectedFile, binaryPackageAndContext.first, binaryPackageAndContext.second, COMPARATOR_CONFIGURATION); } protected void doTestCompiledJavaIncludeObjectMethods(@NotNull String javaFileName) throws Exception { - doTestCompiledJava(javaFileName, RECURSIVE); + doTestCompiledJava(javaFileName, RECURSIVE.renderDeclarationsFromOtherModules(true)); } protected void doTestCompiledKotlin(@NotNull String ktFileName) throws Exception { @@ -132,9 +134,7 @@ public abstract class AbstractLoadJavaTest extends TestCaseWithTmpdir { DescriptorValidator.validate(errorTypesForbidden(), packageFromSource); DescriptorValidator.validate(new DeserializedScopeValidationVisitor(), packageFromBinary); - Configuration comparatorConfiguration = RecursiveDescriptorComparator.DONT_INCLUDE_METHODS_OF_OBJECT - .checkPrimaryConstructors(true) - .checkPropertyAccessors(true); + Configuration comparatorConfiguration = COMPARATOR_CONFIGURATION.checkPrimaryConstructors(true).checkPropertyAccessors(true); compareDescriptors(packageFromSource, packageFromBinary, comparatorConfiguration, txtFile); } @@ -168,7 +168,7 @@ public abstract class AbstractLoadJavaTest extends TestCaseWithTmpdir { ); PackageViewDescriptor packageView = result.getModuleDescriptor().getPackage(TEST_PACKAGE_FQNAME); - checkJavaPackage(expectedFile, packageView, result.getBindingContext(), DONT_INCLUDE_METHODS_OF_OBJECT); + checkJavaPackage(expectedFile, packageView, result.getBindingContext(), COMPARATOR_CONFIGURATION); } // TODO: add more tests on inherited parameter names, but currently impossible because of KT-4509 @@ -198,7 +198,7 @@ public abstract class AbstractLoadJavaTest extends TestCaseWithTmpdir { PackageViewDescriptor packageView = module.getPackage(TEST_PACKAGE_FQNAME); assertFalse(packageView.isEmpty()); - validateAndCompareDescriptorWithFile(packageView, DONT_INCLUDE_METHODS_OF_OBJECT.withValidationStrategy( + validateAndCompareDescriptorWithFile(packageView, COMPARATOR_CONFIGURATION.withValidationStrategy( new DeserializedScopeValidationVisitor() ), expectedFile); } @@ -220,8 +220,10 @@ public abstract class AbstractLoadJavaTest extends TestCaseWithTmpdir { tmpdir, getTestRootDisposable(), getJdkKind(), ConfigurationKind.JDK_ONLY, false ); - checkJavaPackage(expectedFile, javaPackageAndContext.first, javaPackageAndContext.second, - DONT_INCLUDE_METHODS_OF_OBJECT.withValidationStrategy(errorTypesAllowed())); + checkJavaPackage( + expectedFile, javaPackageAndContext.first, javaPackageAndContext.second, + COMPARATOR_CONFIGURATION.withValidationStrategy(errorTypesAllowed()) + ); } private void doTestCompiledJava(@NotNull String javaFileName, Configuration configuration) throws Exception { diff --git a/compiler/tests-common/org/jetbrains/kotlin/jvm/runtime/AbstractJvmRuntimeDescriptorLoaderTest.kt b/compiler/tests-common/org/jetbrains/kotlin/jvm/runtime/AbstractJvmRuntimeDescriptorLoaderTest.kt index 95ca0bea9df..f47b0650133 100644 --- a/compiler/tests-common/org/jetbrains/kotlin/jvm/runtime/AbstractJvmRuntimeDescriptorLoaderTest.kt +++ b/compiler/tests-common/org/jetbrains/kotlin/jvm/runtime/AbstractJvmRuntimeDescriptorLoaderTest.kt @@ -96,6 +96,7 @@ abstract class AbstractJvmRuntimeDescriptorLoaderTest : TestCaseWithTmpdir() { /* checkPrimaryConstructors = */ fileName.endsWith(".kt"), /* checkPropertyAccessors = */ true, /* includeMethodsOfKotlinAny = */ false, + /* renderDeclarationsFromOtherModules = */ true, // Skip Java annotation constructors because order of their parameters is not retained at runtime { descriptor -> !descriptor!!.isJavaAnnotationConstructor() }, errorTypesForbidden(), renderer diff --git a/compiler/tests-common/org/jetbrains/kotlin/test/util/RecursiveDescriptorComparator.java b/compiler/tests-common/org/jetbrains/kotlin/test/util/RecursiveDescriptorComparator.java index b3c915656af..8e5e0ed0deb 100644 --- a/compiler/tests-common/org/jetbrains/kotlin/test/util/RecursiveDescriptorComparator.java +++ b/compiler/tests-common/org/jetbrains/kotlin/test/util/RecursiveDescriptorComparator.java @@ -62,14 +62,14 @@ public class RecursiveDescriptorComparator { } ); - public static final Configuration DONT_INCLUDE_METHODS_OF_OBJECT = new Configuration(false, false, false, + public static final Configuration DONT_INCLUDE_METHODS_OF_OBJECT = new Configuration(false, false, false, false, Predicates.alwaysTrue(), errorTypesForbidden(), DEFAULT_RENDERER); - public static final Configuration RECURSIVE = new Configuration(false, false, true, + public static final Configuration RECURSIVE = new Configuration(false, false, true, false, Predicates.alwaysTrue(), errorTypesForbidden(), DEFAULT_RENDERER); - public static final Configuration RECURSIVE_ALL = new Configuration(true, true, true, + public static final Configuration RECURSIVE_ALL = new Configuration(true, true, true, false, Predicates.alwaysTrue(), errorTypesForbidden(), DEFAULT_RENDERER); @@ -189,7 +189,7 @@ public class RecursiveDescriptorComparator { @NotNull Collection extraSubDescriptors, @NotNull Printer printer ) { - if (!module.equals(DescriptorUtils.getContainingModule(descriptor))) { + if (!conf.renderDeclarationsFromOtherModules && !module.equals(DescriptorUtils.getContainingModule(descriptor))) { printer.println(String.format("// -- Module: %s --", DescriptorUtils.getContainingModule(descriptor).getName())); return; } @@ -274,15 +274,16 @@ public class RecursiveDescriptorComparator { private final boolean checkPrimaryConstructors; private final boolean checkPropertyAccessors; private final boolean includeMethodsOfKotlinAny; + private final boolean renderDeclarationsFromOtherModules; private final Predicate recursiveFilter; private final DescriptorRenderer renderer; - private final DescriptorValidator.ValidationVisitor validationStrategy; public Configuration( boolean checkPrimaryConstructors, boolean checkPropertyAccessors, boolean includeMethodsOfKotlinAny, + boolean renderDeclarationsFromOtherModules, Predicate recursiveFilter, DescriptorValidator.ValidationVisitor validationStrategy, DescriptorRenderer renderer @@ -290,39 +291,46 @@ public class RecursiveDescriptorComparator { this.checkPrimaryConstructors = checkPrimaryConstructors; this.checkPropertyAccessors = checkPropertyAccessors; this.includeMethodsOfKotlinAny = includeMethodsOfKotlinAny; + this.renderDeclarationsFromOtherModules = renderDeclarationsFromOtherModules; this.recursiveFilter = recursiveFilter; this.validationStrategy = validationStrategy; this.renderer = renderer; } public Configuration filterRecursion(@NotNull Predicate stepIntoFilter) { - return new Configuration(checkPrimaryConstructors, checkPropertyAccessors, includeMethodsOfKotlinAny, stepIntoFilter, + return new Configuration(checkPrimaryConstructors, checkPropertyAccessors, includeMethodsOfKotlinAny, + renderDeclarationsFromOtherModules, stepIntoFilter, validationStrategy.withStepIntoFilter(stepIntoFilter), renderer); } public Configuration checkPrimaryConstructors(boolean checkPrimaryConstructors) { - return new Configuration(checkPrimaryConstructors, checkPropertyAccessors, includeMethodsOfKotlinAny, recursiveFilter, - validationStrategy, renderer); + return new Configuration(checkPrimaryConstructors, checkPropertyAccessors, includeMethodsOfKotlinAny, + renderDeclarationsFromOtherModules, recursiveFilter, validationStrategy, renderer); } public Configuration checkPropertyAccessors(boolean checkPropertyAccessors) { - return new Configuration(checkPrimaryConstructors, checkPropertyAccessors, includeMethodsOfKotlinAny, recursiveFilter, - validationStrategy, renderer); + return new Configuration(checkPrimaryConstructors, checkPropertyAccessors, includeMethodsOfKotlinAny, + renderDeclarationsFromOtherModules, recursiveFilter, validationStrategy, renderer); } public Configuration includeMethodsOfKotlinAny(boolean includeMethodsOfKotlinAny) { - return new Configuration(checkPrimaryConstructors, checkPropertyAccessors, includeMethodsOfKotlinAny, recursiveFilter, - validationStrategy, renderer); + return new Configuration(checkPrimaryConstructors, checkPropertyAccessors, includeMethodsOfKotlinAny, + renderDeclarationsFromOtherModules, recursiveFilter, validationStrategy, renderer); + } + + public Configuration renderDeclarationsFromOtherModules(boolean renderDeclarationsFromOtherModules) { + return new Configuration(checkPrimaryConstructors, checkPropertyAccessors, includeMethodsOfKotlinAny, + renderDeclarationsFromOtherModules, recursiveFilter, validationStrategy, renderer); } public Configuration withValidationStrategy(@NotNull DescriptorValidator.ValidationVisitor validationStrategy) { - return new Configuration(checkPrimaryConstructors, checkPropertyAccessors, includeMethodsOfKotlinAny, recursiveFilter, - validationStrategy, renderer); + return new Configuration(checkPrimaryConstructors, checkPropertyAccessors, includeMethodsOfKotlinAny, + renderDeclarationsFromOtherModules, recursiveFilter, validationStrategy, renderer); } public Configuration withRenderer(@NotNull DescriptorRenderer renderer) { - return new Configuration(checkPrimaryConstructors, checkPropertyAccessors, includeMethodsOfKotlinAny, recursiveFilter, - validationStrategy, renderer); + return new Configuration(checkPrimaryConstructors, checkPropertyAccessors, includeMethodsOfKotlinAny, + renderDeclarationsFromOtherModules, recursiveFilter, validationStrategy, renderer); } } } diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/AbstractCompileJavaAgainstKotlinTest.java b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/AbstractCompileJavaAgainstKotlinTest.java index 3cc9e6f0e08..50f32beea78 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/AbstractCompileJavaAgainstKotlinTest.java +++ b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/AbstractCompileJavaAgainstKotlinTest.java @@ -40,28 +40,28 @@ import java.lang.annotation.Retention; import java.util.Collections; import static org.jetbrains.kotlin.test.KotlinTestUtils.*; -import static org.jetbrains.kotlin.test.util.RecursiveDescriptorComparator.DONT_INCLUDE_METHODS_OF_OBJECT; import static org.jetbrains.kotlin.test.util.RecursiveDescriptorComparator.validateAndCompareDescriptorWithFile; @SuppressWarnings({"JUnitTestCaseWithNonTrivialConstructors", "JUnitTestCaseWithNoTests"}) public abstract class AbstractCompileJavaAgainstKotlinTest extends TestCaseWithTmpdir { // Do not render parameter names because there are test cases where classes inherit from JDK collections, // and some versions of JDK have debug information in the class files (including parameter names), and some don't - private static final RecursiveDescriptorComparator.Configuration CONFIGURATION = DONT_INCLUDE_METHODS_OF_OBJECT.withRenderer( - DescriptorRenderer.Companion.withOptions( - new Function1() { - @Override - public Unit invoke(DescriptorRendererOptions options) { - options.setWithDefinedIn(false); - options.setParameterNameRenderingPolicy(ParameterNameRenderingPolicy.NONE); - options.setVerbose(true); - options.setExcludedAnnotationClasses(Collections.singleton(new FqName(Retention.class.getName()))); - options.setModifiers(DescriptorRendererModifier.ALL); - return Unit.INSTANCE; - } - } - ) - ); + private static final RecursiveDescriptorComparator.Configuration CONFIGURATION = + AbstractLoadJavaTest.COMPARATOR_CONFIGURATION.withRenderer( + DescriptorRenderer.Companion.withOptions( + new Function1() { + @Override + public Unit invoke(DescriptorRendererOptions options) { + options.setWithDefinedIn(false); + options.setParameterNameRenderingPolicy(ParameterNameRenderingPolicy.NONE); + options.setVerbose(true); + options.setExcludedAnnotationClasses(Collections.singleton(new FqName(Retention.class.getName()))); + options.setModifiers(DescriptorRendererModifier.ALL); + return Unit.INSTANCE; + } + } + ) + ); protected void doTest(String ktFilePath) throws IOException { Assert.assertTrue(ktFilePath.endsWith(".kt")); diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/CompileKotlinAgainstCustomBinariesTest.java b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/CompileKotlinAgainstCustomBinariesTest.java index f7f06f9269c..4e5a1774330 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/CompileKotlinAgainstCustomBinariesTest.java +++ b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/CompileKotlinAgainstCustomBinariesTest.java @@ -99,9 +99,8 @@ public class CompileKotlinAgainstCustomBinariesTest extends TestCaseWithTmpdir { private void doTestWithTxt(@NotNull File... extraClassPath) throws Exception { PackageViewDescriptor packageView = analyzeFileToPackageView(extraClassPath); - RecursiveDescriptorComparator.Configuration comparator = - RecursiveDescriptorComparator.DONT_INCLUDE_METHODS_OF_OBJECT.withValidationStrategy( - DescriptorValidator.ValidationVisitor.errorTypesAllowed()); + RecursiveDescriptorComparator.Configuration comparator = AbstractLoadJavaTest.COMPARATOR_CONFIGURATION + .withValidationStrategy(DescriptorValidator.ValidationVisitor.errorTypesAllowed()); validateAndCompareDescriptorWithFile(packageView, comparator, getTestDataFileWithExtension("txt")); }