diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/PackageCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/PackageCodegen.java index ffea59c1810..21b2d6b010a 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/PackageCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/PackageCodegen.java @@ -87,7 +87,8 @@ public class PackageCodegen { JetFile sourceFile = getRepresentativePackageFile(files); String className = AsmUtil.internalNameByFqNameWithoutInnerClasses(getPackageClassFqName(fqName)); - ClassBuilder v = PackageCodegen.this.state.getFactory().newVisitor(Type.getObjectType(className), files); + ClassBuilder v = PackageCodegen.this.state.getFactory() + .newVisitor(Type.getObjectType(className), getPackageFilesWithCallables(files)); v.defineClass(sourceFile, V1_6, ACC_PUBLIC | ACC_FINAL, className, @@ -111,18 +112,7 @@ public class PackageCodegen { return null; } - List packageFilesWithCallables = ContainerUtil.filter(packageFiles, new Condition() { - @Override - public boolean value(JetFile packageFile) { - for (JetDeclaration declaration : packageFile.getDeclarations()) { - if (declaration instanceof JetProperty || declaration instanceof JetNamedFunction) { - return true; - } - } - return false; - } - }); - + List packageFilesWithCallables = getPackageFilesWithCallables(packageFiles); return packageFilesWithCallables.size() == 1 ? packageFilesWithCallables.get(0) : null; } @@ -359,6 +349,21 @@ public class PackageCodegen { MemberCodegen.genClassOrObject(context, classOrObject, state, null); } + @NotNull + public static List getPackageFilesWithCallables(@NotNull Collection packageFiles) { + return ContainerUtil.filter(packageFiles, new Condition() { + @Override + public boolean value(JetFile packageFile) { + for (JetDeclaration declaration : packageFile.getDeclarations()) { + if (declaration instanceof JetProperty || declaration instanceof JetNamedFunction) { + return true; + } + } + return false; + } + }); + } + public void done() { v.done(); } 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 ac795e9352f..e7c2be657f8 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 @@ -38,6 +38,8 @@ import org.jetbrains.jet.lang.resolve.kotlin.DeserializedResolverUtils import java.util.Collections import org.jetbrains.jet.utils.addToStdlib.singletonOrEmptyList import org.jetbrains.jet.storage.NotNullLazyValue +import org.jetbrains.jet.lang.psi.JetNamedFunction +import org.jetbrains.jet.lang.psi.JetProperty public class IncrementalPackageFragmentProvider( sourceFiles: Collection, @@ -70,7 +72,9 @@ public class IncrementalPackageFragmentProvider( } for (source in sourceFiles) { - createPackageFragment(source.getPackageFqName()) + if (source.getDeclarations().any { it is JetProperty || it is JetNamedFunction }) { + createPackageFragment(source.getPackageFqName()) + } } } diff --git a/jps-plugin/test/org/jetbrains/jet/jps/build/KotlinJpsBuildTest.java b/jps-plugin/test/org/jetbrains/jet/jps/build/KotlinJpsBuildTest.java index e78331d65bf..92ed4cf7664 100644 --- a/jps-plugin/test/org/jetbrains/jet/jps/build/KotlinJpsBuildTest.java +++ b/jps-plugin/test/org/jetbrains/jet/jps/build/KotlinJpsBuildTest.java @@ -154,7 +154,7 @@ public class KotlinJpsBuildTest extends AbstractKotlinJpsBuildTestCase { checkPackageDeletedFromOutputWhen(Operation.CHANGE, "kotlinProject", "src/main.kt", "foo.FooPackage"); checkPackageDeletedFromOutputWhen(Operation.CHANGE, "kotlinProject", "src/boo.kt", "boo.BooPackage"); - checkClassesDeletedFromOutputWhen(Operation.CHANGE, "kotlinProject", "src/Bar.kt", "foo.Bar", "foo.FooPackage"); + checkClassesDeletedFromOutputWhen(Operation.CHANGE, "kotlinProject", "src/Bar.kt", "foo.Bar"); checkPackageDeletedFromOutputWhen(Operation.DELETE, "kotlinProject", "src/main.kt", "foo.FooPackage"); assertFilesNotExistInOutput(module, "foo/FooPackage.class");