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")); }