update KotlinCoverageExtension according to removal of package facades

This commit is contained in:
Dmitry Jemerov
2015-11-09 17:32:47 +01:00
parent bb5f47fe95
commit de24e70389
@@ -16,32 +16,28 @@
package org.jetbrains.kotlin.idea.coverage package org.jetbrains.kotlin.idea.coverage
import com.intellij.coverage.JavaCoverageEngineExtension
import com.intellij.execution.configurations.RunConfigurationBase
import org.jetbrains.kotlin.idea.run.JetRunConfiguration
import com.intellij.psi.PsiFile
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.coverage.CoverageSuitesBundle import com.intellij.coverage.CoverageSuitesBundle
import java.io.File import com.intellij.coverage.JavaCoverageAnnotator
import org.jetbrains.kotlin.psi.KtFile import com.intellij.coverage.JavaCoverageEngineExtension
import com.intellij.openapi.roots.ProjectRootManager
import com.intellij.psi.PsiClass
import com.intellij.openapi.util.text.StringUtil
import com.intellij.psi.PsiNamedElement
import com.intellij.coverage.PackageAnnotator import com.intellij.coverage.PackageAnnotator
import com.intellij.execution.configurations.RunConfigurationBase
import com.intellij.openapi.diagnostic.Logger
import com.intellij.openapi.module.ModuleUtilCore import com.intellij.openapi.module.ModuleUtilCore
import com.intellij.openapi.roots.CompilerModuleExtension import com.intellij.openapi.roots.CompilerModuleExtension
import com.intellij.coverage.JavaCoverageAnnotator import com.intellij.openapi.roots.ProjectRootManager
import org.jetbrains.kotlin.psi.KtClassOrObject
import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils
import com.intellij.openapi.vfs.VfsUtilCore
import com.intellij.openapi.diagnostic.Logger
import org.jetbrains.kotlin.load.kotlin.PackageClassUtils
import org.jetbrains.kotlin.load.kotlin.KotlinBinaryClassCache
import com.intellij.openapi.vfs.LocalFileSystem
import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader
import com.intellij.openapi.util.io.FileUtilRt import com.intellij.openapi.util.io.FileUtilRt
import com.intellij.openapi.util.text.StringUtil
import com.intellij.openapi.vfs.VfsUtilCore
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.psi.PsiClass
import com.intellij.psi.PsiFile
import com.intellij.psi.PsiNamedElement
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil
import org.jetbrains.kotlin.idea.run.JetRunConfiguration
import org.jetbrains.kotlin.idea.util.application.runReadAction import org.jetbrains.kotlin.idea.util.application.runReadAction
import org.jetbrains.kotlin.psi.KtClassOrObject
import org.jetbrains.kotlin.psi.KtFile
import java.io.File
public class KotlinCoverageExtension(): JavaCoverageEngineExtension() { public class KotlinCoverageExtension(): JavaCoverageEngineExtension() {
private val LOG = Logger.getInstance(javaClass<KotlinCoverageExtension>()) private val LOG = Logger.getInstance(javaClass<KotlinCoverageExtension>())
@@ -77,23 +73,6 @@ public class KotlinCoverageExtension(): JavaCoverageEngineExtension() {
return true // keep everything, sort it out later return true // keep everything, sort it out later
} }
// Implements API added in IDEA 14.1
override fun ignoreCoverageForClass(bundle: CoverageSuitesBundle, classFile: File): Boolean {
// Ignore classes that only contain bridge methods delegating to package parts.
if (looksLikePackageFacade(classFile)) {
val classVFile = LocalFileSystem.getInstance().findFileByIoFile(classFile)
if (classVFile == null) return false
val header = KotlinBinaryClassCache.getKotlinBinaryClass(classVFile)?.getClassHeader()
return header != null && header.kind == KotlinClassHeader.Kind.PACKAGE_FACADE;
}
return false;
}
fun looksLikePackageFacade(classFile: File): Boolean {
val packageName = classFile.getParentFile().getName()
return classFile.getName() == StringUtil.capitalize(packageName) + PackageClassUtils.PACKAGE_CLASS_NAME_SUFFIX + ".class"
}
override fun collectOutputFiles(srcFile: PsiFile, override fun collectOutputFiles(srcFile: PsiFile,
output: VirtualFile?, output: VirtualFile?,
testoutput: VirtualFile?, testoutput: VirtualFile?,
@@ -182,7 +161,7 @@ public class KotlinCoverageExtension(): JavaCoverageEngineExtension() {
private fun collectClassFilePrefixes(file: KtFile): Collection<String> { private fun collectClassFilePrefixes(file: KtFile): Collection<String> {
val result = file.getChildren().filter { it is KtClassOrObject }.map { (it as KtClassOrObject).getName()!! } val result = file.getChildren().filter { it is KtClassOrObject }.map { (it as KtClassOrObject).getName()!! }
val packagePartFqName = PackagePartClassUtils.getPackagePartFqName(file) val packagePartFqName = JvmFileClassUtil.getFileClassInfoNoResolve(file).fileClassFqName
return result.union(arrayListOf(packagePartFqName.shortName().asString())) return result.union(arrayListOf(packagePartFqName.shortName().asString()))
} }
} }