Fixed incremental compilation, when removing all callables from file.
This commit is contained in:
+11
-6
@@ -94,13 +94,18 @@ public class PackagePartClassUtils {
|
|||||||
return ContainerUtil.filter(packageFiles, new Condition<JetFile>() {
|
return ContainerUtil.filter(packageFiles, new Condition<JetFile>() {
|
||||||
@Override
|
@Override
|
||||||
public boolean value(JetFile packageFile) {
|
public boolean value(JetFile packageFile) {
|
||||||
for (JetDeclaration declaration : packageFile.getDeclarations()) {
|
return fileHasCallables(packageFile);
|
||||||
if (declaration instanceof JetProperty || declaration instanceof JetNamedFunction) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean fileHasCallables(@NotNull JetFile file) {
|
||||||
|
for (JetDeclaration declaration : file.getDeclarations()) {
|
||||||
|
if (declaration instanceof JetProperty || declaration instanceof JetNamedFunction) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+7
-2
@@ -22,15 +22,20 @@ import org.jetbrains.jet.lang.resolve.name.FqName
|
|||||||
import org.jetbrains.jet.lang.resolve.java.JvmClassName
|
import org.jetbrains.jet.lang.resolve.java.JvmClassName
|
||||||
import java.util.HashMap
|
import java.util.HashMap
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
import org.jetbrains.jet.lang.resolve.kotlin.PackagePartClassUtils
|
||||||
|
|
||||||
public fun IncrementalCache.getPackagesWithRemovedFiles(sourceFilesToCompile: Collection<JetFile>): Collection<FqName> {
|
public fun IncrementalCache.getPackagesWithRemovedFiles(sourceFilesToCompile: Collection<JetFile>): Collection<FqName> {
|
||||||
return getRemovedPackageParts(sourceFilesToCompile).map { it.getPackageFqName() }
|
return getRemovedPackageParts(sourceFilesToCompile).map { it.getPackageFqName() }
|
||||||
}
|
}
|
||||||
|
|
||||||
public fun IncrementalCache.getRemovedPackageParts(sourceFilesToCompile: Collection<JetFile>): Collection<JvmClassName> {
|
public fun IncrementalCache.getRemovedPackageParts(sourceFilesToCompile: Collection<JetFile>): Collection<JvmClassName> {
|
||||||
val sourceFilesToFqName = HashMap<File, String>()
|
val sourceFilesToFqName = HashMap<File, String?>()
|
||||||
for (sourceFile in sourceFilesToCompile) {
|
for (sourceFile in sourceFilesToCompile) {
|
||||||
sourceFilesToFqName[File(sourceFile.getVirtualFile()!!.getPath())] = sourceFile.getPackageFqName().asString()
|
sourceFilesToFqName[File(sourceFile.getVirtualFile()!!.getPath())] =
|
||||||
|
if (PackagePartClassUtils.fileHasCallables(sourceFile))
|
||||||
|
sourceFile.getPackageFqName().asString()
|
||||||
|
else
|
||||||
|
null
|
||||||
}
|
}
|
||||||
|
|
||||||
return getRemovedPackageParts(sourceFilesToFqName).map { JvmClassName.byInternalName(it) }
|
return getRemovedPackageParts(sourceFilesToFqName).map { JvmClassName.byInternalName(it) }
|
||||||
|
|||||||
+4
-1
@@ -23,7 +23,10 @@ import java.util.HashMap
|
|||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
public trait IncrementalCache {
|
public trait IncrementalCache {
|
||||||
public fun getRemovedPackageParts(sourceFilesToCompileAndFqNames: Map<File, String>): Collection<String>
|
public fun getRemovedPackageParts(
|
||||||
|
// null value means source file has no top-level callables (won't produce package part)
|
||||||
|
sourceFilesToCompileAndFqNames: Map<File, String?>
|
||||||
|
): Collection<String>
|
||||||
|
|
||||||
public fun getPackageData(fqName: String): ByteArray?
|
public fun getPackageData(fqName: String): ByteArray?
|
||||||
|
|
||||||
|
|||||||
@@ -146,7 +146,7 @@ public class IncrementalCacheImpl(val baseDir: File): StorageOwner, IncrementalC
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override fun getRemovedPackageParts(sourceFilesToCompileAndFqNames: Map<File, String>): Collection<String> {
|
public override fun getRemovedPackageParts(sourceFilesToCompileAndFqNames: Map<File, String?>): Collection<String> {
|
||||||
return packagePartMap.getRemovedPackageParts(sourceFilesToCompileAndFqNames)
|
return packagePartMap.getRemovedPackageParts(sourceFilesToCompileAndFqNames)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -451,7 +451,7 @@ public class IncrementalCacheImpl(val baseDir: File): StorageOwner, IncrementalC
|
|||||||
storage.remove(sourceFile.getAbsolutePath())
|
storage.remove(sourceFile.getAbsolutePath())
|
||||||
}
|
}
|
||||||
|
|
||||||
public fun getRemovedPackageParts(compiledSourceFilesToFqName: Map<File, String>): Collection<String> {
|
public fun getRemovedPackageParts(compiledSourceFilesToFqName: Map<File, String?>): Collection<String> {
|
||||||
val result = HashSet<String>()
|
val result = HashSet<String>()
|
||||||
|
|
||||||
storage.processKeysWithExistingMapping { key ->
|
storage.processKeysWithExistingMapping { key ->
|
||||||
@@ -463,9 +463,10 @@ public class IncrementalCacheImpl(val baseDir: File): StorageOwner, IncrementalC
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
val previousPackageFqName = JvmClassName.byInternalName(packagePartClassName).getPackageFqName()
|
val previousPackageFqName = JvmClassName.byInternalName(packagePartClassName).getPackageFqName()
|
||||||
val currentPackageFqName = compiledSourceFilesToFqName[sourceFile]
|
if (sourceFile in compiledSourceFilesToFqName) {
|
||||||
if (currentPackageFqName != null && currentPackageFqName != previousPackageFqName.asString()) {
|
if (compiledSourceFilesToFqName[sourceFile] != previousPackageFqName.asString()) {
|
||||||
result.add(packagePartClassName)
|
result.add(packagePartClassName)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -493,6 +493,12 @@ public class IncrementalJpsTestGenerated extends AbstractIncrementalJpsTest {
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("onlyTopLevelFunctionInFileRemoved")
|
||||||
|
public void testOnlyTopLevelFunctionInFileRemoved() throws Exception {
|
||||||
|
String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/incremental/withJava/kotlinUsedInJava/onlyTopLevelFunctionInFileRemoved/");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("propertyRenamed")
|
@TestMetadata("propertyRenamed")
|
||||||
public void testPropertyRenamed() throws Exception {
|
public void testPropertyRenamed() throws Exception {
|
||||||
String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/incremental/withJava/kotlinUsedInJava/propertyRenamed/");
|
String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/incremental/withJava/kotlinUsedInJava/propertyRenamed/");
|
||||||
|
|||||||
+5
@@ -0,0 +1,5 @@
|
|||||||
|
class Usage {
|
||||||
|
void usage() {
|
||||||
|
test.TestPackage.a();
|
||||||
|
}
|
||||||
|
}
|
||||||
+4
@@ -0,0 +1,4 @@
|
|||||||
|
package test
|
||||||
|
|
||||||
|
fun a() {
|
||||||
|
}
|
||||||
+4
@@ -0,0 +1,4 @@
|
|||||||
|
package test
|
||||||
|
|
||||||
|
fun b() {
|
||||||
|
}
|
||||||
+2
@@ -0,0 +1,2 @@
|
|||||||
|
package test
|
||||||
|
|
||||||
+21
@@ -0,0 +1,21 @@
|
|||||||
|
Cleaning output files:
|
||||||
|
out/production/module/test/TestPackage$b$*.class
|
||||||
|
out/production/module/test/TestPackage.class
|
||||||
|
End of files
|
||||||
|
Compiling files:
|
||||||
|
src/b.kt
|
||||||
|
End of files
|
||||||
|
Compiling files:
|
||||||
|
src/Usage.java
|
||||||
|
End of files
|
||||||
|
Cleaning output files:
|
||||||
|
out/production/module/Usage.class
|
||||||
|
out/production/module/test/TestPackage$a$*.class
|
||||||
|
out/production/module/test/TestPackage.class
|
||||||
|
End of files
|
||||||
|
Compiling files:
|
||||||
|
src/a.kt
|
||||||
|
End of files
|
||||||
|
Compiling files:
|
||||||
|
src/Usage.java
|
||||||
|
End of files
|
||||||
Reference in New Issue
Block a user