From 9f6575c57fd2090389f09690389bf114639c92c2 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 26 Sep 2018 19:15:43 +0200 Subject: [PATCH] Add file name to exception on invalid module-info.class in dependencies This will help users in working around KT-23025 --- .../resolve/jvm/modules/JavaModuleInfo.kt | 32 ++++++++++++------- 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/modules/JavaModuleInfo.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/modules/JavaModuleInfo.kt index 45d1618d0e5..52dc9594a1c 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/modules/JavaModuleInfo.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/modules/JavaModuleInfo.kt @@ -64,22 +64,30 @@ class JavaModuleInfo( val requires = arrayListOf() val exports = arrayListOf() - ClassReader(contents).accept(object : ClassVisitor(Opcodes.ASM6) { - override fun visitModule(name: String, access: Int, version: String?): ModuleVisitor { - moduleName = name + try { + ClassReader(contents).accept(object : ClassVisitor(Opcodes.ASM6) { + override fun visitModule(name: String, access: Int, version: String?): ModuleVisitor { + moduleName = name - return object : ModuleVisitor(Opcodes.ASM6) { - override fun visitRequire(module: String, access: Int, version: String?) { - requires.add(Requires(module, (access and ACC_TRANSITIVE) != 0)) - } + return object : ModuleVisitor(Opcodes.ASM6) { + override fun visitRequire(module: String, access: Int, version: String?) { + requires.add(Requires(module, (access and ACC_TRANSITIVE) != 0)) + } - override fun visitExport(packageFqName: String, access: Int, modules: Array?) { - // For some reason, '/' is the delimiter in packageFqName here - exports.add(Exports(FqName(packageFqName.replace('/', '.')), modules?.toList().orEmpty())) + override fun visitExport(packageFqName: String, access: Int, modules: Array?) { + // For some reason, '/' is the delimiter in packageFqName here + exports.add(Exports(FqName(packageFqName.replace('/', '.')), modules?.toList().orEmpty())) + } } } - } - }, ClassReader.SKIP_DEBUG or ClassReader.SKIP_CODE or ClassReader.SKIP_FRAMES) + }, ClassReader.SKIP_DEBUG or ClassReader.SKIP_CODE or ClassReader.SKIP_FRAMES) + } catch (e: Exception) { + throw IllegalStateException( + "Could not load module definition from: $file. The file might be broken " + + "by incorrect post-processing via bytecode tools. Please remove this file from the classpath.", + e + ) + } return if (moduleName != null) JavaModuleInfo(moduleName!!, requires.compact(), exports.compact())