fix KT-9441 Unable to Access Internal Classes from Test Code within Same Module
#KT-9441 Fixed
This commit is contained in:
@@ -47,7 +47,12 @@ class ModuleVisibilityHelperImpl : ModuleVisibilityHelper {
|
||||
val whatSource = getSourceElement(what)
|
||||
if (whatSource is KotlinSourceElement) return true
|
||||
|
||||
val modules = moduleVisibilityManager.chunk.toList()
|
||||
moduleVisibilityManager.friendPaths.forEach {
|
||||
if (isContainedByCompiledPartOfOurModule(what, File(it))) return true
|
||||
}
|
||||
|
||||
val modules = moduleVisibilityManager.chunk
|
||||
|
||||
val outputDirectories = modules.map { File(it.getOutputDirectory()) }
|
||||
if (outputDirectories.isEmpty()) return isContainedByCompiledPartOfOurModule(what, null)
|
||||
|
||||
@@ -56,7 +61,7 @@ class ModuleVisibilityHelperImpl : ModuleVisibilityHelper {
|
||||
}
|
||||
|
||||
// Hack in order to allow access to internal elements in production code from tests
|
||||
if (modules.size() == 1 && modules[0].getModuleType() == ModuleXmlParser.TYPE_TEST) return true
|
||||
if (modules.singleOrNull()?.getModuleType() == ModuleXmlParser.TYPE_TEST) return true
|
||||
|
||||
return false
|
||||
}
|
||||
@@ -68,11 +73,16 @@ class ModuleVisibilityHelperImpl : ModuleVisibilityHelper {
|
||||
*/
|
||||
class CliModuleVisibilityManagerImpl() : ModuleVisibilityManager, Disposable {
|
||||
override val chunk: MutableList<Module> = arrayListOf()
|
||||
override val friendPaths: MutableList <String> = arrayListOf()
|
||||
|
||||
override fun addModule(module: Module) {
|
||||
chunk.add(module)
|
||||
}
|
||||
|
||||
override fun addFriendPath(path: String) {
|
||||
friendPaths.add(path)
|
||||
}
|
||||
|
||||
override fun dispose() {
|
||||
chunk.clear()
|
||||
}
|
||||
|
||||
@@ -21,9 +21,7 @@ import com.intellij.openapi.Disposable
|
||||
import org.jetbrains.kotlin.cli.common.CLICompiler
|
||||
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
|
||||
import org.jetbrains.kotlin.cli.common.ExitCode
|
||||
import org.jetbrains.kotlin.cli.common.ExitCode.COMPILATION_ERROR
|
||||
import org.jetbrains.kotlin.cli.common.ExitCode.INTERNAL_ERROR
|
||||
import org.jetbrains.kotlin.cli.common.ExitCode.OK
|
||||
import org.jetbrains.kotlin.cli.common.ExitCode.*
|
||||
import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments
|
||||
import org.jetbrains.kotlin.cli.common.messages.*
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.*
|
||||
@@ -154,6 +152,8 @@ public open class K2JVMCompiler : CLICompiler<K2JVMCompilerArguments>() {
|
||||
}
|
||||
val environment: KotlinCoreEnvironment
|
||||
|
||||
val friendPaths = arguments.friendPaths?.toList() ?: emptyList<String>()
|
||||
|
||||
if (arguments.module != null) {
|
||||
val sanitizedCollector = FilteringMessageCollector(messageSeverityCollector, `in`(CompilerMessageSeverity.VERBOSE))
|
||||
val moduleScript = CompileEnvironmentUtil.loadModuleDescriptions(arguments.module, sanitizedCollector)
|
||||
@@ -169,7 +169,7 @@ public open class K2JVMCompiler : CLICompiler<K2JVMCompilerArguments>() {
|
||||
|
||||
if (messageSeverityCollector.anyReported(CompilerMessageSeverity.ERROR)) return COMPILATION_ERROR
|
||||
|
||||
KotlinToJVMBytecodeCompiler.compileModules(environment, configuration, moduleScript.getModules(), directory, jar, arguments.includeRuntime)
|
||||
KotlinToJVMBytecodeCompiler.compileModules(environment, configuration, moduleScript.getModules(), directory, jar, friendPaths, arguments.includeRuntime)
|
||||
}
|
||||
else if (arguments.script) {
|
||||
val scriptArgs = arguments.freeArgs.subList(1, arguments.freeArgs.size())
|
||||
@@ -189,7 +189,7 @@ public open class K2JVMCompiler : CLICompiler<K2JVMCompilerArguments>() {
|
||||
return COMPILATION_ERROR
|
||||
}
|
||||
|
||||
KotlinToJVMBytecodeCompiler.compileBunchOfSources(environment, jar, outputDir, arguments.includeRuntime)
|
||||
KotlinToJVMBytecodeCompiler.compileBunchOfSources(environment, jar, outputDir, friendPaths, arguments.includeRuntime)
|
||||
}
|
||||
|
||||
if (arguments.reportPerf) {
|
||||
|
||||
+15
-1
@@ -114,14 +114,21 @@ public class KotlinToJVMBytecodeCompiler {
|
||||
@NotNull List<Module> chunk,
|
||||
@NotNull File directory,
|
||||
@Nullable File jarPath,
|
||||
@NotNull List<String> friendPaths,
|
||||
boolean jarRuntime
|
||||
) {
|
||||
Map<Module, ClassFileFactory> outputFiles = Maps.newHashMap();
|
||||
|
||||
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled();
|
||||
|
||||
ModuleVisibilityManager moduleVisibilityManager = ModuleVisibilityManager.SERVICE.getInstance(environment.getProject());
|
||||
|
||||
for (Module module: chunk) {
|
||||
ModuleVisibilityManager.SERVICE.getInstance(environment.getProject()).addModule(module);
|
||||
moduleVisibilityManager.addModule(module);
|
||||
}
|
||||
|
||||
for (String path : friendPaths) {
|
||||
moduleVisibilityManager.addFriendPath(path);
|
||||
}
|
||||
|
||||
String targetDescription = "in targets [" + Joiner.on(", ").join(Collections2.transform(chunk, new Function<Module, String>() {
|
||||
@@ -215,9 +222,16 @@ public class KotlinToJVMBytecodeCompiler {
|
||||
@NotNull KotlinCoreEnvironment environment,
|
||||
@Nullable File jar,
|
||||
@Nullable File outputDir,
|
||||
@NotNull List<String> friendPaths,
|
||||
boolean includeRuntime
|
||||
) {
|
||||
|
||||
ModuleVisibilityManager moduleVisibilityManager = ModuleVisibilityManager.SERVICE.getInstance(environment.getProject());
|
||||
|
||||
for (String path : friendPaths) {
|
||||
moduleVisibilityManager.addFriendPath(path);
|
||||
}
|
||||
|
||||
GenerationState generationState = analyzeAndGenerate(environment);
|
||||
if (generationState == null) {
|
||||
return false;
|
||||
|
||||
Reference in New Issue
Block a user