From 5581d4e2074f23c54bc852fc3865992b4d00db5c Mon Sep 17 00:00:00 2001 From: Michael Bogdanov Date: Wed, 19 Aug 2015 16:25:45 +0300 Subject: [PATCH] Don't verify mapping files and proper packagemapper propagation --- .../codegen/AbstractBytecodeListingTest.kt | 2 +- .../codegen/AbstractLineNumberTest.java | 2 +- .../kotlin/codegen/CodegenTestCase.java | 2 +- .../kotlin/codegen/CodegenTestUtil.java | 4 ++- .../jetbrains/kotlin/codegen/DxChecker.java | 2 +- .../kotlin/codegen/InlineTestUtil.kt | 16 +++-------- .../AbstractBlackBoxInlineCodegenTest.kt | 6 +++-- .../org/jetbrains/kotlin/codegen/testUtil.kt | 27 +++++++++++++++++++ ...actCompileKotlinAgainstInlineKotlinTest.kt | 5 ++-- .../jvm/compiler/AbstractLoadJavaTest.java | 4 +-- .../jvm/compiler/AbstractSMAPBaseTest.kt | 4 +-- .../kotlin/resolve/lazy/JvmResolveUtil.java | 22 +++++++++++++-- 12 files changed, 69 insertions(+), 27 deletions(-) create mode 100644 compiler/tests/org/jetbrains/kotlin/codegen/testUtil.kt diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/AbstractBytecodeListingTest.kt b/compiler/tests/org/jetbrains/kotlin/codegen/AbstractBytecodeListingTest.kt index 88ad9898854..8aa53e95d3e 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/AbstractBytecodeListingTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/codegen/AbstractBytecodeListingTest.kt @@ -29,7 +29,7 @@ public abstract class AbstractBytecodeListingTest : CodegenTestCase() { val ktFile = File(filename) val txtFile = File(ktFile.parent, ktFile.nameWithoutExtension + ".txt") val generatedFiles = CodegenTestUtil.generateFiles(myEnvironment, myFiles) - .asList() + .getClassFiles() .sortedBy { it.relativePath } .map { val cr = ClassReader(it.asByteArray()) diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/AbstractLineNumberTest.java b/compiler/tests/org/jetbrains/kotlin/codegen/AbstractLineNumberTest.java index 56604576603..5b07cd101d5 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/AbstractLineNumberTest.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/AbstractLineNumberTest.java @@ -117,7 +117,7 @@ public class AbstractLineNumberTest extends TestCaseWithTmpdir { private static List extractActualLineNumbersFromBytecode(@NotNull GenerationState state, boolean testFunInvoke) { ClassFileFactory factory = state.getFactory(); List actualLineNumbers = Lists.newArrayList(); - for (OutputFile outputFile : factory.asList()) { + for (OutputFile outputFile : CodegenPackage.getClassFiles(factory)) { if (PackageClassUtils.isPackageClassFqName(new FqName(FileUtil.getNameWithoutExtension(outputFile.getRelativePath())))) { // Don't test line numbers in *Package facade classes continue; diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/CodegenTestCase.java b/compiler/tests/org/jetbrains/kotlin/codegen/CodegenTestCase.java index 7d2b4c0150d..52dd4c7530e 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/CodegenTestCase.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/CodegenTestCase.java @@ -236,7 +236,7 @@ public abstract class CodegenTestCase extends UsefulTestCase { private static boolean verifyAllFilesWithAsm(ClassFileFactory factory, ClassLoader loader) { boolean noErrors = true; - for (OutputFile file : factory.asList()) { + for (OutputFile file : CodegenPackage.getClassFiles(factory)) { noErrors &= verifyWithAsm(file, loader); } return noErrors; diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/CodegenTestUtil.java b/compiler/tests/org/jetbrains/kotlin/codegen/CodegenTestUtil.java index 2726f5aec81..a00ea33400a 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/CodegenTestUtil.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/CodegenTestUtil.java @@ -29,6 +29,7 @@ import org.jetbrains.kotlin.codegen.state.GenerationState; import org.jetbrains.kotlin.config.CompilerConfiguration; import org.jetbrains.kotlin.resolve.AnalyzingUtils; import org.jetbrains.kotlin.resolve.BindingTraceContext; +import org.jetbrains.kotlin.resolve.lazy.JvmPackageMappingProvider; import org.jetbrains.kotlin.resolve.lazy.JvmResolveUtil; import org.jetbrains.kotlin.test.JetTestUtils; import org.jetbrains.kotlin.utils.UtilsPackage; @@ -51,7 +52,8 @@ public class CodegenTestUtil { public static ClassFileFactory generateFiles(@NotNull KotlinCoreEnvironment environment, @NotNull CodegenTestFiles files) { AnalysisResult analysisResult = JvmResolveUtil.analyzeFilesWithJavaIntegrationAndCheckForErrors( environment.getProject(), - files.getPsiFiles() + files.getPsiFiles(), + new JvmPackageMappingProvider(environment) ); analysisResult.throwIfError(); AnalyzingUtils.throwExceptionOnErrors(analysisResult.getBindingContext()); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/DxChecker.java b/compiler/tests/org/jetbrains/kotlin/codegen/DxChecker.java index 46b59286846..e835fff8b53 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/DxChecker.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/DxChecker.java @@ -44,7 +44,7 @@ public class DxChecker { array[0] = "testArgs"; arguments.parse(array); - for (OutputFile file : outputFiles.asList()) { + for (OutputFile file : CodegenPackage.getClassFiles(outputFiles)) { try { byte[] bytes = file.asByteArray(); checkFileWithDx(bytes, file.getRelativePath(), arguments); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/InlineTestUtil.kt b/compiler/tests/org/jetbrains/kotlin/codegen/InlineTestUtil.kt index 7935d59e598..3e907bb36bd 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/InlineTestUtil.kt +++ b/compiler/tests/org/jetbrains/kotlin/codegen/InlineTestUtil.kt @@ -16,23 +16,15 @@ package org.jetbrains.kotlin.codegen; -import com.intellij.openapi.util.Ref -import com.intellij.openapi.util.text.StringUtil -import org.jetbrains.kotlin import org.jetbrains.kotlin.backend.common.output.OutputFile import org.jetbrains.kotlin.load.java.JvmAbi import org.jetbrains.kotlin.load.java.JvmAnnotationNames import org.jetbrains.kotlin.load.kotlin.FileBasedKotlinClass -import org.jetbrains.kotlin.load.kotlin.KotlinBinaryClassCache import org.jetbrains.kotlin.load.kotlin.PackageClassUtils import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader -import org.jetbrains.kotlin.load.kotlin.header.ReadKotlinClassHeaderAnnotationVisitor -import org.jetbrains.kotlin.name.ClassId -import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.psi.JetFile import org.jetbrains.kotlin.resolve.jvm.JvmClassName import org.jetbrains.kotlin.test.InTextDirectivesUtils -import org.jetbrains.kotlin.utils.join import org.jetbrains.org.objectweb.asm.* import org.jetbrains.org.objectweb.asm.tree.MethodNode import java.util.ArrayList @@ -43,7 +35,7 @@ public object InlineTestUtil { public val INLINE_ANNOTATION_CLASS: String = "kotlin/inline" - public fun checkNoCallsToInline(files: List, sourceFiles: List) { + public fun checkNoCallsToInline(files: Iterable, sourceFiles: List) { val inlineInfo = obtainInlineInfo(files) val inlineMethods = inlineInfo.inlineMethods assert(!inlineMethods.isEmpty(), "There are no inline methods") @@ -64,7 +56,7 @@ public object InlineTestUtil { } } - private fun obtainInlineInfo(files: List): InlineInfo { + private fun obtainInlineInfo(files: Iterable): InlineInfo { val inlineMethods = HashSet() val classHeaders = hashMapOf() @@ -93,7 +85,7 @@ public object InlineTestUtil { return InlineInfo(inlineMethods, classHeaders) } - private fun checkInlineMethodNotInvoked(files: List, inlinedMethods: Set): List { + private fun checkInlineMethodNotInvoked(files: Iterable, inlinedMethods: Set): List { val notInlined = ArrayList() files.forEach { file -> @@ -128,7 +120,7 @@ public object InlineTestUtil { return notInlined } - private fun checkParametersInlined(files: List, inlineInfo: InlineInfo): ArrayList { + private fun checkParametersInlined(files: Iterable, inlineInfo: InlineInfo): ArrayList { val inlinedMethods = inlineInfo.inlineMethods val notInlinedParameters = ArrayList() for (file in files) { diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/generated/AbstractBlackBoxInlineCodegenTest.kt b/compiler/tests/org/jetbrains/kotlin/codegen/generated/AbstractBlackBoxInlineCodegenTest.kt index 14e33f604a4..f532b93fa23 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/generated/AbstractBlackBoxInlineCodegenTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/codegen/generated/AbstractBlackBoxInlineCodegenTest.kt @@ -17,6 +17,8 @@ package org.jetbrains.kotlin.codegen.generated import org.jetbrains.kotlin.codegen.InlineTestUtil +import org.jetbrains.kotlin.codegen.filterClassFiles +import org.jetbrains.kotlin.codegen.getClassFiles import org.jetbrains.kotlin.jvm.compiler.AbstractSMAPBaseTest import java.io.File @@ -28,8 +30,8 @@ public abstract class AbstractBlackBoxInlineCodegenTest : AbstractBlackBoxCodege doTestMultiFile(inputFiles) try { - InlineTestUtil.checkNoCallsToInline(initializedClassLoader.getAllGeneratedFiles(), myFiles.getPsiFiles()) - checkSMAP(myFiles.getPsiFiles(), generateClassesInFile().asList()) + InlineTestUtil.checkNoCallsToInline(initializedClassLoader.allGeneratedFiles.filterClassFiles(), myFiles.getPsiFiles()) + checkSMAP(myFiles.getPsiFiles(), generateClassesInFile().getClassFiles()) } catch (e: Throwable) { System.out.println(generateToText()) diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/testUtil.kt b/compiler/tests/org/jetbrains/kotlin/codegen/testUtil.kt new file mode 100644 index 00000000000..6be14eb4987 --- /dev/null +++ b/compiler/tests/org/jetbrains/kotlin/codegen/testUtil.kt @@ -0,0 +1,27 @@ +/* + * Copyright 2010-2015 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.codegen + +import org.jetbrains.kotlin.backend.common.output.OutputFile + +fun ClassFileFactory.getClassFiles(): Iterable { + return asList().filterClassFiles() +} + +fun List.filterClassFiles(): Iterable { + return filter { it.relativePath.endsWith(".class") } +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/AbstractCompileKotlinAgainstInlineKotlinTest.kt b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/AbstractCompileKotlinAgainstInlineKotlinTest.kt index eb9819055f6..f3c412f8545 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/AbstractCompileKotlinAgainstInlineKotlinTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/AbstractCompileKotlinAgainstInlineKotlinTest.kt @@ -18,6 +18,7 @@ package org.jetbrains.kotlin.jvm.compiler import org.jetbrains.kotlin.codegen.ClassFileFactory import org.jetbrains.kotlin.codegen.InlineTestUtil +import org.jetbrains.kotlin.codegen.filterClassFiles import java.io.File import java.util.Collections @@ -31,8 +32,8 @@ public abstract class AbstractCompileKotlinAgainstInlineKotlinTest : AbstractCom try { val sourceFiles = factory1.getInputFiles() + factory2.getInputFiles() - InlineTestUtil.checkNoCallsToInline(allGeneratedFiles, sourceFiles) - checkSMAP(sourceFiles, allGeneratedFiles) + InlineTestUtil.checkNoCallsToInline(allGeneratedFiles.filterClassFiles(), sourceFiles) + checkSMAP(sourceFiles, allGeneratedFiles.filterClassFiles()) } catch (e: Throwable) { System.out.println(factory1.createText() + "\n" + factory2.createText()) diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/AbstractLoadJavaTest.java b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/AbstractLoadJavaTest.java index 330b8869357..b6f53bfabad 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/AbstractLoadJavaTest.java +++ b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/AbstractLoadJavaTest.java @@ -35,8 +35,8 @@ import org.jetbrains.kotlin.resolve.BindingTrace; import org.jetbrains.kotlin.resolve.DescriptorUtils; import org.jetbrains.kotlin.resolve.TopDownAnalysisMode; import org.jetbrains.kotlin.resolve.jvm.TopDownAnalyzerFacadeForJVM; +import org.jetbrains.kotlin.resolve.lazy.JvmPackageMappingProvider; import org.jetbrains.kotlin.resolve.lazy.JvmResolveUtil; -import org.jetbrains.kotlin.load.java.lazy.PackageMappingProvider; import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedClassDescriptor; import org.jetbrains.kotlin.test.ConfigurationKind; import org.jetbrains.kotlin.test.JetTestUtils; @@ -156,7 +156,7 @@ public abstract class AbstractLoadJavaTest extends TestCaseWithTmpdir { environment.getSourceFiles(), trace, TopDownAnalysisMode.TopLevelDeclarations, - PackageMappingProvider.EMPTY + new JvmPackageMappingProvider(environment) ); PackageViewDescriptor packageView = moduleContext.getModule().getPackage(TEST_PACKAGE_FQNAME); diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/AbstractSMAPBaseTest.kt b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/AbstractSMAPBaseTest.kt index 4e6409feb6c..2777f5914ad 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/AbstractSMAPBaseTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/AbstractSMAPBaseTest.kt @@ -32,7 +32,7 @@ import java.io.File public trait AbstractSMAPBaseTest { - private fun extractSMAPFromClasses(outputFiles: List): List { + private fun extractSMAPFromClasses(outputFiles: Iterable): List { return outputFiles.map { outputFile -> if (PackageClassUtils.isPackageClassFqName(FqName(FileUtil.getNameWithoutExtension(outputFile.relativePath).replace('/', '.')))) { // Don't test line numbers in *Package facade classes @@ -65,7 +65,7 @@ public trait AbstractSMAPBaseTest { return null; } - fun checkSMAP(inputFiles: List, outputFiles: List) { + fun checkSMAP(inputFiles: List, outputFiles: Iterable) { if (!InlineCodegenUtil.GENERATE_SMAP) { return } diff --git a/compiler/tests/org/jetbrains/kotlin/resolve/lazy/JvmResolveUtil.java b/compiler/tests/org/jetbrains/kotlin/resolve/lazy/JvmResolveUtil.java index fe6d7c48995..177b6614a9e 100644 --- a/compiler/tests/org/jetbrains/kotlin/resolve/lazy/JvmResolveUtil.java +++ b/compiler/tests/org/jetbrains/kotlin/resolve/lazy/JvmResolveUtil.java @@ -51,12 +51,21 @@ public class JvmResolveUtil { public static AnalysisResult analyzeFilesWithJavaIntegrationAndCheckForErrors( @NotNull Project project, @NotNull Collection files + ) { + return analyzeFilesWithJavaIntegrationAndCheckForErrors(project, files, PackageMappingProvider.EMPTY); + } + + @NotNull + public static AnalysisResult analyzeFilesWithJavaIntegrationAndCheckForErrors( + @NotNull Project project, + @NotNull Collection files, + @NotNull PackageMappingProvider packageMappingProvider ) { for (JetFile file : files) { AnalyzingUtils.checkForSyntacticErrors(file); } - AnalysisResult analysisResult = analyzeFilesWithJavaIntegration(project, files); + AnalysisResult analysisResult = analyzeFilesWithJavaIntegration(project, files, packageMappingProvider); AnalyzingUtils.throwExceptionOnErrors(analysisResult.getBindingContext()); @@ -67,11 +76,20 @@ public class JvmResolveUtil { public static AnalysisResult analyzeFilesWithJavaIntegration( @NotNull Project project, @NotNull Collection files + ) { + return analyzeFilesWithJavaIntegration(project, files, PackageMappingProvider.EMPTY); + } + + @NotNull + public static AnalysisResult analyzeFilesWithJavaIntegration( + @NotNull Project project, + @NotNull Collection files, + @NotNull PackageMappingProvider packageMappingProvider ) { ModuleContext moduleContext = TopDownAnalyzerFacadeForJVM.createContextWithSealedModule(project, "java-integration-test"); BindingTrace trace = new CliLightClassGenerationSupport.CliBindingTrace(); - return TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegrationWithCustomContext(moduleContext, files, trace, null, null, PackageMappingProvider.EMPTY); + return TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegrationWithCustomContext(moduleContext, files, trace, null, null, packageMappingProvider); } }