Minor, refactor BuiltInDefinitionFile.read to get rid of isInternalBuiltInFile

This commit is contained in:
Alexander Udalov
2016-02-25 12:50:45 +03:00
committed by Alexander Udalov
parent 5f39f628c9
commit 63db41a712
2 changed files with 13 additions and 16 deletions
@@ -48,7 +48,7 @@ class KotlinBuiltInDecompiler : ClassFileDecompilers.Full() {
override fun createFileViewProvider(file: VirtualFile, manager: PsiManager, physical: Boolean): FileViewProvider {
return KotlinDecompiledFileViewProvider(manager, file, physical) { provider ->
if (isInternalBuiltInFile(BuiltInDefinitionFile.read(provider.virtualFile))) {
if (BuiltInDefinitionFile.read(provider.virtualFile) == null) {
null
}
else {
@@ -68,6 +68,8 @@ fun buildDecompiledTextForBuiltIns(builtInFile: VirtualFile): DecompiledText {
}
val file = BuiltInDefinitionFile.read(builtInFile)
?: error("Unexpectedly empty built-in file: $builtInFile")
when (file) {
is BuiltInDefinitionFile.Incompatible -> {
return createIncompatibleAbiVersionDecompiledText(BuiltInsBinaryVersion.INSTANCE, file.version)
@@ -111,7 +113,7 @@ sealed class BuiltInDefinitionFile {
var FILTER_OUT_CLASSES_EXISTING_AS_JVM_CLASS_FILES = true
@TestOnly set
fun read(file: VirtualFile): BuiltInDefinitionFile {
fun read(file: VirtualFile): BuiltInDefinitionFile? {
val stream = ByteArrayInputStream(file.contentsToByteArray())
val version = BuiltInsBinaryVersion.readFrom(stream)
@@ -120,18 +122,15 @@ sealed class BuiltInDefinitionFile {
}
val proto = BuiltInsProtoBuf.BuiltIns.parseFrom(stream, BuiltInSerializerProtocol.extensionRegistry)
return BuiltInDefinitionFile.Compatible(proto, file.parent)
}
}
}
val result = BuiltInDefinitionFile.Compatible(proto, file.parent)
if (result.classesToDecompile.isEmpty() &&
result.proto.`package`.functionCount == 0 &&
result.proto.`package`.propertyCount == 0) {
// No callables or top-level classes to decompile: should skip this file
return null
}
internal fun isInternalBuiltInFile(file: BuiltInDefinitionFile): Boolean {
when (file) {
is BuiltInDefinitionFile.Incompatible -> return false
is BuiltInDefinitionFile.Compatible -> {
return file.classesToDecompile.isEmpty() &&
file.proto.`package`.functionCount == 0 &&
file.proto.`package`.propertyCount == 0
return result
}
}
}
@@ -33,9 +33,7 @@ class KotlinBuiltInStubBuilder : ClsStubBuilder() {
override fun buildFileStub(content: FileContent): PsiFileStub<*>? {
val virtualFile = content.file
assert(virtualFile.fileType == KotlinBuiltInFileType) { "Unexpected file type ${virtualFile.fileType}" }
val file = BuiltInDefinitionFile.read(virtualFile)
if (isInternalBuiltInFile(file)) return null
val file = BuiltInDefinitionFile.read(virtualFile) ?: return null
when (file) {
is BuiltInDefinitionFile.Incompatible -> {