diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/kotlin/incremental/IncrementalPackageFragmentProvider.kt b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/kotlin/incremental/IncrementalPackageFragmentProvider.kt index f4c64a1a050..9fd9bfef81f 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/kotlin/incremental/IncrementalPackageFragmentProvider.kt +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/kotlin/incremental/IncrementalPackageFragmentProvider.kt @@ -56,6 +56,7 @@ public class IncrementalPackageFragmentProvider( ).toSet() val fqNameToSubFqNames = MultiMap() val fqNameToPackageFragment = HashMap() + val fqNamesToLoad: Set ;{ fun createPackageFragment(fqName: FqName) { @@ -72,13 +73,12 @@ public class IncrementalPackageFragmentProvider( fqNameToPackageFragment[fqName] = IncrementalPackageFragment(fqName) } - for (source in PackagePartClassUtils.getPackageFilesWithCallables(sourceFiles)) { - createPackageFragment(source.getPackageFqName()) - } + fqNamesToLoad = ( + PackagePartClassUtils.getPackageFilesWithCallables(sourceFiles).map { it.getPackageFqName() } + + incrementalCache.getPackagesWithRemovedFiles(sourceFiles) + ).toSet() - for (fqName in incrementalCache.getPackagesWithRemovedFiles(sourceFiles)) { - createPackageFragment(fqName) - } + fqNamesToLoad.forEach { createPackageFragment(it) } } override fun getSubPackagesOf(fqName: FqName): Collection { @@ -95,12 +95,17 @@ public class IncrementalPackageFragmentProvider( get() = this@IncrementalPackageFragmentProvider.moduleId val _memberScope: NotNullLazyValue = storageManager.createLazyValue { - val packageDataBytes = incrementalCache.getPackageData(fqName) - if (packageDataBytes == null) { + if (fqName !in fqNamesToLoad) { JetScope.EMPTY } else { - IncrementalPackageScope(JavaProtoBufUtil.readPackageDataFrom(packageDataBytes)) + val packageDataBytes = incrementalCache.getPackageData(fqName) + if (packageDataBytes == null) { + JetScope.EMPTY + } + else { + IncrementalPackageScope(JavaProtoBufUtil.readPackageDataFrom(packageDataBytes)) + } } } diff --git a/jps-plugin/test/org/jetbrains/jet/jps/build/IncrementalJpsTestGenerated.java b/jps-plugin/test/org/jetbrains/jet/jps/build/IncrementalJpsTestGenerated.java index 8d569fc5a76..2fae1f59adf 100644 --- a/jps-plugin/test/org/jetbrains/jet/jps/build/IncrementalJpsTestGenerated.java +++ b/jps-plugin/test/org/jetbrains/jet/jps/build/IncrementalJpsTestGenerated.java @@ -275,6 +275,12 @@ public class IncrementalJpsTestGenerated extends AbstractIncrementalJpsTest { doTest(fileName); } + @TestMetadata("subpackage") + public void testSubpackage() throws Exception { + String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/incremental/pureKotlin/subpackage/"); + doTest(fileName); + } + @TestMetadata("topLevelFunctionSameSignature") public void testTopLevelFunctionSameSignature() throws Exception { String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/incremental/pureKotlin/topLevelFunctionSameSignature/"); diff --git a/jps-plugin/testData/incremental/pureKotlin/subpackage/build.log b/jps-plugin/testData/incremental/pureKotlin/subpackage/build.log new file mode 100644 index 00000000000..ca0056732d4 --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/subpackage/build.log @@ -0,0 +1,8 @@ +Cleaning output files: +out/production/module/outer/nested/NestedPackage$main$1.class +out/production/module/outer/nested/NestedPackage-nested-*.class +out/production/module/outer/nested/NestedPackage.class +End of files +Compiling files: +src/nested.kt +End of files diff --git a/jps-plugin/testData/incremental/pureKotlin/subpackage/nested.kt b/jps-plugin/testData/incremental/pureKotlin/subpackage/nested.kt new file mode 100644 index 00000000000..35287cfaf30 --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/subpackage/nested.kt @@ -0,0 +1,12 @@ +package outer.nested + +import outer.f + +fun g() { +} + +fun main(args: Array) { + f { } + g() +} + diff --git a/jps-plugin/testData/incremental/pureKotlin/subpackage/nested.kt.new b/jps-plugin/testData/incremental/pureKotlin/subpackage/nested.kt.new new file mode 100644 index 00000000000..35287cfaf30 --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/subpackage/nested.kt.new @@ -0,0 +1,12 @@ +package outer.nested + +import outer.f + +fun g() { +} + +fun main(args: Array) { + f { } + g() +} + diff --git a/jps-plugin/testData/incremental/pureKotlin/subpackage/outer.kt b/jps-plugin/testData/incremental/pureKotlin/subpackage/outer.kt new file mode 100644 index 00000000000..83ddfc54f1e --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/subpackage/outer.kt @@ -0,0 +1,7 @@ +package outer + +fun f(c: () -> Unit) { +} + +fun f(c: () -> T): String = "" +