From 5b59fc74bc34c1afe14abd797ae07be6cc05b498 Mon Sep 17 00:00:00 2001 From: Michael Nedzelsky Date: Mon, 9 Nov 2015 15:42:16 +0300 Subject: [PATCH] fix access from tests to internal elements in production code in case of circular dependency --- .../cli/common/modules/ModuleBuilder.kt | 6 +++ .../cli/common/modules/ModuleXmlParser.java | 5 +++ .../kotlin/cli/common/moduleVisibilityImpl.kt | 44 +++++++++---------- .../org/jetbrains/kotlin/modules/Module.kt | 2 + .../KotlinBuilderModuleScriptGenerator.java | 20 ++++++++- .../modules/KotlinModuleXmlBuilder.java | 8 +++- .../kotlin/jps/build/KotlinJpsBuildTest.kt | 22 ++++++++++ .../kotlin/jvm/compiler/ClasspathOrderTest.kt | 3 +- .../modules/KotlinModuleXmlGeneratorTest.java | 12 +++-- .../kotlinProject.ipr | 32 ++++++++++++++ .../module1/module1.iml | 15 +++++++ .../module1/src/a.kt | 9 ++++ .../module1/test/test_a_1.kt | 3 ++ .../module1/test/test_a_2.kt | 6 +++ .../module2/module2.iml | 15 +++++++ .../module2/src/b.kt | 9 ++++ .../module2/test/test_b_1.kt | 3 ++ .../module2/test/test_b_2.kt | 6 +++ .../errors.txt | 4 ++ .../kotlinProject.ipr | 32 ++++++++++++++ .../module1/module1.iml | 15 +++++++ .../module1/src/a.kt | 9 ++++ .../module1/test/test_a_1.kt | 3 ++ .../module1/test/test_a_2.kt | 6 +++ .../module2/module2.iml | 15 +++++++ .../module2/src/b.kt | 9 ++++ .../module2/test/test_b_1.kt | 3 ++ .../module2/test/test_b_2.kt | 6 +++ 28 files changed, 292 insertions(+), 30 deletions(-) create mode 100644 jps-plugin/testData/general/CircularDependenciesSamePackageWithTests/kotlinProject.ipr create mode 100644 jps-plugin/testData/general/CircularDependenciesSamePackageWithTests/module1/module1.iml create mode 100644 jps-plugin/testData/general/CircularDependenciesSamePackageWithTests/module1/src/a.kt create mode 100644 jps-plugin/testData/general/CircularDependenciesSamePackageWithTests/module1/test/test_a_1.kt create mode 100644 jps-plugin/testData/general/CircularDependenciesSamePackageWithTests/module1/test/test_a_2.kt create mode 100644 jps-plugin/testData/general/CircularDependenciesSamePackageWithTests/module2/module2.iml create mode 100644 jps-plugin/testData/general/CircularDependenciesSamePackageWithTests/module2/src/b.kt create mode 100644 jps-plugin/testData/general/CircularDependenciesSamePackageWithTests/module2/test/test_b_1.kt create mode 100644 jps-plugin/testData/general/CircularDependenciesSamePackageWithTests/module2/test/test_b_2.kt create mode 100644 jps-plugin/testData/general/CircularDependenciesWrongInternalFromTests/errors.txt create mode 100644 jps-plugin/testData/general/CircularDependenciesWrongInternalFromTests/kotlinProject.ipr create mode 100644 jps-plugin/testData/general/CircularDependenciesWrongInternalFromTests/module1/module1.iml create mode 100644 jps-plugin/testData/general/CircularDependenciesWrongInternalFromTests/module1/src/a.kt create mode 100644 jps-plugin/testData/general/CircularDependenciesWrongInternalFromTests/module1/test/test_a_1.kt create mode 100644 jps-plugin/testData/general/CircularDependenciesWrongInternalFromTests/module1/test/test_a_2.kt create mode 100644 jps-plugin/testData/general/CircularDependenciesWrongInternalFromTests/module2/module2.iml create mode 100644 jps-plugin/testData/general/CircularDependenciesWrongInternalFromTests/module2/src/b.kt create mode 100644 jps-plugin/testData/general/CircularDependenciesWrongInternalFromTests/module2/test/test_b_1.kt create mode 100644 jps-plugin/testData/general/CircularDependenciesWrongInternalFromTests/module2/test/test_b_2.kt diff --git a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/modules/ModuleBuilder.kt b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/modules/ModuleBuilder.kt index e27fe329cca..d208b7c7f7a 100644 --- a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/modules/ModuleBuilder.kt +++ b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/modules/ModuleBuilder.kt @@ -28,6 +28,7 @@ public class ModuleBuilder( private val sourceFiles = ArrayList() private val classpathRoots = ArrayList() private val javaSourceRoots = ArrayList() + private val friendDirs = ArrayList() public fun addSourceFiles(pattern: String) { sourceFiles.add(pattern) @@ -41,7 +42,12 @@ public class ModuleBuilder( javaSourceRoots.add(rootPath) } + public fun addFriendDir(friendDir: String) { + friendDirs.add(friendDir) + } + override fun getOutputDirectory(): String = outputDir + override fun getFriendPaths(): List = friendDirs override fun getJavaSourceRoots(): List = javaSourceRoots override fun getSourceFiles(): List = sourceFiles override fun getClasspathRoots(): List = classpathRoots diff --git a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/modules/ModuleXmlParser.java b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/modules/ModuleXmlParser.java index 8a3b845dd95..bd5e764d151 100644 --- a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/modules/ModuleXmlParser.java +++ b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/modules/ModuleXmlParser.java @@ -47,6 +47,7 @@ public class ModuleXmlParser { public static final String TYPE_PRODUCTION = "java-production"; public static final String TYPE_TEST = "java-test"; public static final String OUTPUT_DIR = "outputDir"; + public static final String FRIEND_DIR = "friendDir"; public static final String SOURCES = "sources"; public static final String JAVA_SOURCE_ROOTS = "javaSourceRoots"; public static final String JAVA_SOURCE_PACKAGE_PREFIX = "packagePrefix"; @@ -162,6 +163,10 @@ public class ModuleXmlParser { String path = getAttribute(attributes, PATH, qName); moduleBuilder.addSourceFiles(path); } + else if (FRIEND_DIR.equalsIgnoreCase(qName)) { + String path = getAttribute(attributes, PATH, qName); + moduleBuilder.addFriendDir(path); + } else if (CLASSPATH.equalsIgnoreCase(qName)) { String path = getAttribute(attributes, PATH, qName); moduleBuilder.addClasspathEntry(path); diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/common/moduleVisibilityImpl.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/common/moduleVisibilityImpl.kt index bf1b6a0d9b6..199feb41972 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/common/moduleVisibilityImpl.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/common/moduleVisibilityImpl.kt @@ -18,13 +18,11 @@ package org.jetbrains.kotlin.cli.common import com.intellij.openapi.Disposable import com.intellij.openapi.project.Project -import org.jetbrains.kotlin.cli.common.modules.ModuleXmlParser import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.load.kotlin.ModuleVisibilityManager import org.jetbrains.kotlin.load.kotlin.getSourceElement import org.jetbrains.kotlin.load.kotlin.isContainedByCompiledPartOfOurModule import org.jetbrains.kotlin.modules.Module -import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyPackageDescriptor import org.jetbrains.kotlin.resolve.source.KotlinSourceElement import org.jetbrains.kotlin.util.ModuleVisibilityHelper @@ -44,37 +42,37 @@ class ModuleVisibilityHelperImpl : ModuleVisibilityHelper { } val moduleVisibilityManager = ModuleVisibilityManager.SERVICE.getInstance(project) - - fun findModule(kotlinFile: KtFile): Module? = moduleVisibilityManager.chunk.firstOrNull { it.getSourceFiles().containsRaw(kotlinFile.virtualFile.path) } - - val whatSource = getSourceElement(what) - if (whatSource is KotlinSourceElement) { - if (moduleVisibilityManager.chunk.size > 1 && fromSource is KotlinSourceElement) { - val fromSourceKotlinFile = fromSource.psi.getContainingKtFile() - val whatSourceKotlinFile = whatSource.psi.getContainingKtFile() - return findModule(whatSourceKotlinFile) === findModule(fromSourceKotlinFile) - } - - return true - } - 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) + val whatSource = getSourceElement(what) + if (whatSource is KotlinSourceElement) { + if (modules.size > 1 && fromSource is KotlinSourceElement) { + return findModule(what, modules) === findModule(from, modules) + } - outputDirectories.forEach { - if (isContainedByCompiledPartOfOurModule(what, it)) return true + return true } - // Hack in order to allow access to internal elements in production code from tests - if (modules.singleOrNull()?.getModuleType() == ModuleXmlParser.TYPE_TEST) return true + if (modules.isEmpty()) return false - return false + return findModule(from, modules) === findModule(what, modules) + } + + private fun findModule(descriptor: DeclarationDescriptor, modules: Collection): Module? { + val sourceElement = getSourceElement(descriptor) + if (sourceElement is KotlinSourceElement) { + return modules.singleOrNull() ?: modules.firstOrNull { sourceElement.psi.getContainingKtFile().virtualFile.path in it.getSourceFiles() } + } + else { + return modules.firstOrNull { module -> + isContainedByCompiledPartOfOurModule(descriptor, File(module.getOutputDirectory())) || + module.getFriendPaths().any { isContainedByCompiledPartOfOurModule(descriptor, File(it))} + } + } } } diff --git a/compiler/util/src/org/jetbrains/kotlin/modules/Module.kt b/compiler/util/src/org/jetbrains/kotlin/modules/Module.kt index 724a97100e6..a2228702125 100644 --- a/compiler/util/src/org/jetbrains/kotlin/modules/Module.kt +++ b/compiler/util/src/org/jetbrains/kotlin/modules/Module.kt @@ -23,6 +23,8 @@ public interface Module { public fun getOutputDirectory(): String + public fun getFriendPaths(): List + public fun getSourceFiles(): List public fun getClasspathRoots(): List diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilderModuleScriptGenerator.java b/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilderModuleScriptGenerator.java index 6d146f3274f..13c4b4f7cfe 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilderModuleScriptGenerator.java +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilderModuleScriptGenerator.java @@ -32,6 +32,7 @@ import org.jetbrains.jps.builders.logging.ProjectBuilderLogger; import org.jetbrains.jps.incremental.CompileContext; import org.jetbrains.jps.incremental.ModuleBuildTarget; import org.jetbrains.jps.incremental.ProjectBuildException; +import org.jetbrains.jps.model.java.JpsJavaExtensionService; import org.jetbrains.kotlin.config.IncrementalCompilation; import org.jetbrains.kotlin.modules.KotlinModuleXmlBuilder; @@ -61,6 +62,11 @@ public class KotlinBuilderModuleScriptGenerator { ProjectBuilderLogger logger = context.getLoggingManager().getProjectBuilderLogger(); for (ModuleBuildTarget target : chunk.getTargets()) { File outputDir = getOutputDirSafe(target); + List friendDirs = new ArrayList(); + File friendDir = getFriendDirSafe(target); + if (friendDir != null) { + friendDirs.add(friendDir); + } List moduleSources = new ArrayList( IncrementalCompilation.isEnabled() @@ -85,7 +91,8 @@ public class KotlinBuilderModuleScriptGenerator { findClassPathRoots(target), (JavaModuleBuildTargetType) targetType, // this excludes the output directories from the class path, to be removed for true incremental compilation - outputDirs + outputDirs, + friendDirs ); } @@ -107,6 +114,17 @@ public class KotlinBuilderModuleScriptGenerator { return outputDir; } + @Nullable + public static File getFriendDirSafe(@NotNull ModuleBuildTarget target) throws ProjectBuildException { + if (!target.isTests()) return null; + + File outputDirForProduction = JpsJavaExtensionService.getInstance().getOutputDirectory(target.getModule(), false); + if (outputDirForProduction == null) { + throw new ProjectBuildException("No output production directory found for " + target); + } + return outputDirForProduction; + } + @NotNull private static Collection findClassPathRoots(@NotNull ModuleBuildTarget target) { return ContainerUtil.filter(getAllDependencies(target).classes().getRoots(), new Condition() { diff --git a/jps-plugin/src/org/jetbrains/kotlin/modules/KotlinModuleXmlBuilder.java b/jps-plugin/src/org/jetbrains/kotlin/modules/KotlinModuleXmlBuilder.java index 73cdd88fd4b..4b48e2340e5 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/modules/KotlinModuleXmlBuilder.java +++ b/jps-plugin/src/org/jetbrains/kotlin/modules/KotlinModuleXmlBuilder.java @@ -24,6 +24,7 @@ import org.jetbrains.kotlin.utils.Printer; import java.io.File; import java.util.Collection; +import java.util.Collections; import java.util.List; import java.util.Set; @@ -47,7 +48,8 @@ public class KotlinModuleXmlBuilder { List javaSourceRoots, Collection classpathRoots, JavaModuleBuildTargetType targetType, - Set directoriesToFilterOut + Set directoriesToFilterOut, + @NotNull List friendDirs ) { assert !done : "Already done"; @@ -65,6 +67,10 @@ public class KotlinModuleXmlBuilder { ); p.pushIndent(); + for (File friendDir : friendDirs) { + p.println("<", FRIEND_DIR, " ", PATH, "=\"", getEscapedPath(friendDir), "\"/>"); + } + for (File sourceFile : sourceFiles) { p.println("<", SOURCES, " ", PATH, "=\"", getEscapedPath(sourceFile), "\"/>"); } diff --git a/jps-plugin/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt b/jps-plugin/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt index 3b31cf01de5..f6a96f4e6e4 100644 --- a/jps-plugin/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt +++ b/jps-plugin/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt @@ -503,6 +503,21 @@ public class KotlinJpsBuildTest : AbstractKotlinJpsBuildTestCase() { checkWhen(touch("module2/src/b.kt"), null, packageClasses("module2", "module2/src/b.kt", "test.TestPackage")) } + public fun testCircularDependenciesSamePackageWithTests() { + initProject() + val result = makeAll() + result.assertSuccessful() + + // Check that outputs are located properly + val facadeWithA = findFileInOutputDir(findModule("module1"), "test/AKt.class") + val facadeWithB = findFileInOutputDir(findModule("module2"), "test/BKt.class") + UsefulTestCase.assertSameElements(getMethodsOfClass(facadeWithA), "", "a", "funA", "getA") + UsefulTestCase.assertSameElements(getMethodsOfClass(facadeWithB), "", "b", "funB", "getB", "setB") + + checkWhen(touch("module1/src/a.kt"), null, packageClasses("module1", "module1/src/a.kt", "test.TestPackage")) + checkWhen(touch("module2/src/b.kt"), null, packageClasses("module2", "module2/src/b.kt", "test.TestPackage")) + } + public fun testInternalFromAnotherModule() { initProject() val result = makeAll() @@ -517,6 +532,13 @@ public class KotlinJpsBuildTest : AbstractKotlinJpsBuildTestCase() { result.checkErrors() } + public fun testCircularDependenciesWrongInternalFromTests() { + initProject() + val result = makeAll() + result.assertFailed() + result.checkErrors() + } + public fun testCircularDependencyWithReferenceToOldVersionLib() { initProject() diff --git a/jps-plugin/test/org/jetbrains/kotlin/jvm/compiler/ClasspathOrderTest.kt b/jps-plugin/test/org/jetbrains/kotlin/jvm/compiler/ClasspathOrderTest.kt index 67d05520359..3408e3537e8 100644 --- a/jps-plugin/test/org/jetbrains/kotlin/jvm/compiler/ClasspathOrderTest.kt +++ b/jps-plugin/test/org/jetbrains/kotlin/jvm/compiler/ClasspathOrderTest.kt @@ -47,7 +47,8 @@ public class ClasspathOrderTest : TestCaseWithTmpdir() { listOf(JvmSourceRoot(sourceDir)), listOf(PathUtil.getKotlinPathsForDistDirectory().getRuntimePath()), JavaModuleBuildTargetType.PRODUCTION, - setOf() + setOf(), + emptyList() ).asText().toString() val xml = File(tmpdir, "module.xml") diff --git a/jps-plugin/test/org/jetbrains/kotlin/modules/KotlinModuleXmlGeneratorTest.java b/jps-plugin/test/org/jetbrains/kotlin/modules/KotlinModuleXmlGeneratorTest.java index a16f2d3ce01..a30b6c775ad 100644 --- a/jps-plugin/test/org/jetbrains/kotlin/modules/KotlinModuleXmlGeneratorTest.java +++ b/jps-plugin/test/org/jetbrains/kotlin/modules/KotlinModuleXmlGeneratorTest.java @@ -34,7 +34,8 @@ public class KotlinModuleXmlGeneratorTest extends TestCase { Collections.singletonList(new JvmSourceRoot(new File("java"), null)), Arrays.asList(new File("cp1"), new File("cp2")), JavaModuleBuildTargetType.PRODUCTION, - Collections.emptySet() + Collections.emptySet(), + Collections.emptyList() ).asText().toString(); KotlinTestUtils.assertEqualsToFile(new File("idea/testData/modules.xml/basic.xml"), actual); } @@ -47,7 +48,8 @@ public class KotlinModuleXmlGeneratorTest extends TestCase { Collections.emptyList(), Arrays.asList(new File("cp1"), new File("cp2")), JavaModuleBuildTargetType.PRODUCTION, - Collections.singleton(new File("cp1")) + Collections.singleton(new File("cp1")), + Collections.emptyList() ).asText().toString(); KotlinTestUtils.assertEqualsToFile(new File("idea/testData/modules.xml/filtered.xml"), actual); } @@ -61,7 +63,8 @@ public class KotlinModuleXmlGeneratorTest extends TestCase { Collections.emptyList(), Arrays.asList(new File("cp1"), new File("cp2")), JavaModuleBuildTargetType.PRODUCTION, - Collections.singleton(new File("cp1")) + Collections.singleton(new File("cp1")), + Collections.emptyList() ); builder.addModule( "name2", @@ -70,7 +73,8 @@ public class KotlinModuleXmlGeneratorTest extends TestCase { Collections.emptyList(), Arrays.asList(new File("cp12"), new File("cp22")), JavaModuleBuildTargetType.TEST, - Collections.singleton(new File("cp12")) + Collections.singleton(new File("cp12")), + Collections.emptyList() ); String actual = builder.asText().toString(); KotlinTestUtils.assertEqualsToFile(new File("idea/testData/modules.xml/multiple.xml"), actual); diff --git a/jps-plugin/testData/general/CircularDependenciesSamePackageWithTests/kotlinProject.ipr b/jps-plugin/testData/general/CircularDependenciesSamePackageWithTests/kotlinProject.ipr new file mode 100644 index 00000000000..c1a403dd047 --- /dev/null +++ b/jps-plugin/testData/general/CircularDependenciesSamePackageWithTests/kotlinProject.ipr @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/jps-plugin/testData/general/CircularDependenciesSamePackageWithTests/module1/module1.iml b/jps-plugin/testData/general/CircularDependenciesSamePackageWithTests/module1/module1.iml new file mode 100644 index 00000000000..a28a2f8285e --- /dev/null +++ b/jps-plugin/testData/general/CircularDependenciesSamePackageWithTests/module1/module1.iml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/jps-plugin/testData/general/CircularDependenciesSamePackageWithTests/module1/src/a.kt b/jps-plugin/testData/general/CircularDependenciesSamePackageWithTests/module1/src/a.kt new file mode 100644 index 00000000000..4da8772ebba --- /dev/null +++ b/jps-plugin/testData/general/CircularDependenciesSamePackageWithTests/module1/src/a.kt @@ -0,0 +1,9 @@ +package test + +fun a() { + +} + +internal fun funA() {} + +val a = "" diff --git a/jps-plugin/testData/general/CircularDependenciesSamePackageWithTests/module1/test/test_a_1.kt b/jps-plugin/testData/general/CircularDependenciesSamePackageWithTests/module1/test/test_a_1.kt new file mode 100644 index 00000000000..e3526b4ac21 --- /dev/null +++ b/jps-plugin/testData/general/CircularDependenciesSamePackageWithTests/module1/test/test_a_1.kt @@ -0,0 +1,3 @@ +package test + +internal fun testFunA() {} \ No newline at end of file diff --git a/jps-plugin/testData/general/CircularDependenciesSamePackageWithTests/module1/test/test_a_2.kt b/jps-plugin/testData/general/CircularDependenciesSamePackageWithTests/module1/test/test_a_2.kt new file mode 100644 index 00000000000..028f7dbaa66 --- /dev/null +++ b/jps-plugin/testData/general/CircularDependenciesSamePackageWithTests/module1/test/test_a_2.kt @@ -0,0 +1,6 @@ +package test + +fun foo() { + funA() + testFunA() +} \ No newline at end of file diff --git a/jps-plugin/testData/general/CircularDependenciesSamePackageWithTests/module2/module2.iml b/jps-plugin/testData/general/CircularDependenciesSamePackageWithTests/module2/module2.iml new file mode 100644 index 00000000000..a2e977d345b --- /dev/null +++ b/jps-plugin/testData/general/CircularDependenciesSamePackageWithTests/module2/module2.iml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/jps-plugin/testData/general/CircularDependenciesSamePackageWithTests/module2/src/b.kt b/jps-plugin/testData/general/CircularDependenciesSamePackageWithTests/module2/src/b.kt new file mode 100644 index 00000000000..395d5075411 --- /dev/null +++ b/jps-plugin/testData/general/CircularDependenciesSamePackageWithTests/module2/src/b.kt @@ -0,0 +1,9 @@ +package test + +fun b() { + +} + +internal fun funB() {} + +var b = b() diff --git a/jps-plugin/testData/general/CircularDependenciesSamePackageWithTests/module2/test/test_b_1.kt b/jps-plugin/testData/general/CircularDependenciesSamePackageWithTests/module2/test/test_b_1.kt new file mode 100644 index 00000000000..d6360452cef --- /dev/null +++ b/jps-plugin/testData/general/CircularDependenciesSamePackageWithTests/module2/test/test_b_1.kt @@ -0,0 +1,3 @@ +package test + +internal fun testFunB() {} \ No newline at end of file diff --git a/jps-plugin/testData/general/CircularDependenciesSamePackageWithTests/module2/test/test_b_2.kt b/jps-plugin/testData/general/CircularDependenciesSamePackageWithTests/module2/test/test_b_2.kt new file mode 100644 index 00000000000..b2dc2d25119 --- /dev/null +++ b/jps-plugin/testData/general/CircularDependenciesSamePackageWithTests/module2/test/test_b_2.kt @@ -0,0 +1,6 @@ +package test + +fun bar() { + funB() + testFunB() +} \ No newline at end of file diff --git a/jps-plugin/testData/general/CircularDependenciesWrongInternalFromTests/errors.txt b/jps-plugin/testData/general/CircularDependenciesWrongInternalFromTests/errors.txt new file mode 100644 index 00000000000..f6a8fb3be27 --- /dev/null +++ b/jps-plugin/testData/general/CircularDependenciesWrongInternalFromTests/errors.txt @@ -0,0 +1,4 @@ +Cannot access 'funA': it is 'internal' in 'test' at line 4, column 5 +Cannot access 'funB': it is 'internal' in 'test' at line 4, column 5 +Cannot access 'testFunA': it is 'internal' in 'test' at line 5, column 5 +Cannot access 'testFunB': it is 'internal' in 'test' at line 5, column 5 \ No newline at end of file diff --git a/jps-plugin/testData/general/CircularDependenciesWrongInternalFromTests/kotlinProject.ipr b/jps-plugin/testData/general/CircularDependenciesWrongInternalFromTests/kotlinProject.ipr new file mode 100644 index 00000000000..c1a403dd047 --- /dev/null +++ b/jps-plugin/testData/general/CircularDependenciesWrongInternalFromTests/kotlinProject.ipr @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/jps-plugin/testData/general/CircularDependenciesWrongInternalFromTests/module1/module1.iml b/jps-plugin/testData/general/CircularDependenciesWrongInternalFromTests/module1/module1.iml new file mode 100644 index 00000000000..a28a2f8285e --- /dev/null +++ b/jps-plugin/testData/general/CircularDependenciesWrongInternalFromTests/module1/module1.iml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/jps-plugin/testData/general/CircularDependenciesWrongInternalFromTests/module1/src/a.kt b/jps-plugin/testData/general/CircularDependenciesWrongInternalFromTests/module1/src/a.kt new file mode 100644 index 00000000000..4da8772ebba --- /dev/null +++ b/jps-plugin/testData/general/CircularDependenciesWrongInternalFromTests/module1/src/a.kt @@ -0,0 +1,9 @@ +package test + +fun a() { + +} + +internal fun funA() {} + +val a = "" diff --git a/jps-plugin/testData/general/CircularDependenciesWrongInternalFromTests/module1/test/test_a_1.kt b/jps-plugin/testData/general/CircularDependenciesWrongInternalFromTests/module1/test/test_a_1.kt new file mode 100644 index 00000000000..e3526b4ac21 --- /dev/null +++ b/jps-plugin/testData/general/CircularDependenciesWrongInternalFromTests/module1/test/test_a_1.kt @@ -0,0 +1,3 @@ +package test + +internal fun testFunA() {} \ No newline at end of file diff --git a/jps-plugin/testData/general/CircularDependenciesWrongInternalFromTests/module1/test/test_a_2.kt b/jps-plugin/testData/general/CircularDependenciesWrongInternalFromTests/module1/test/test_a_2.kt new file mode 100644 index 00000000000..fb8416d39d3 --- /dev/null +++ b/jps-plugin/testData/general/CircularDependenciesWrongInternalFromTests/module1/test/test_a_2.kt @@ -0,0 +1,6 @@ +package test + +fun foo() { + funB() + testFunB() +} \ No newline at end of file diff --git a/jps-plugin/testData/general/CircularDependenciesWrongInternalFromTests/module2/module2.iml b/jps-plugin/testData/general/CircularDependenciesWrongInternalFromTests/module2/module2.iml new file mode 100644 index 00000000000..a2e977d345b --- /dev/null +++ b/jps-plugin/testData/general/CircularDependenciesWrongInternalFromTests/module2/module2.iml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/jps-plugin/testData/general/CircularDependenciesWrongInternalFromTests/module2/src/b.kt b/jps-plugin/testData/general/CircularDependenciesWrongInternalFromTests/module2/src/b.kt new file mode 100644 index 00000000000..395d5075411 --- /dev/null +++ b/jps-plugin/testData/general/CircularDependenciesWrongInternalFromTests/module2/src/b.kt @@ -0,0 +1,9 @@ +package test + +fun b() { + +} + +internal fun funB() {} + +var b = b() diff --git a/jps-plugin/testData/general/CircularDependenciesWrongInternalFromTests/module2/test/test_b_1.kt b/jps-plugin/testData/general/CircularDependenciesWrongInternalFromTests/module2/test/test_b_1.kt new file mode 100644 index 00000000000..d6360452cef --- /dev/null +++ b/jps-plugin/testData/general/CircularDependenciesWrongInternalFromTests/module2/test/test_b_1.kt @@ -0,0 +1,3 @@ +package test + +internal fun testFunB() {} \ No newline at end of file diff --git a/jps-plugin/testData/general/CircularDependenciesWrongInternalFromTests/module2/test/test_b_2.kt b/jps-plugin/testData/general/CircularDependenciesWrongInternalFromTests/module2/test/test_b_2.kt new file mode 100644 index 00000000000..e9ce5c96421 --- /dev/null +++ b/jps-plugin/testData/general/CircularDependenciesWrongInternalFromTests/module2/test/test_b_2.kt @@ -0,0 +1,6 @@ +package test + +fun bar() { + funA() + testFunA() +} \ No newline at end of file