Use module to resolve top level class in DecompiledTextConsistencyTest

Refactor: rename ResolverForDecompiler#resolveClass to resolveTopLevelClass to document assumptions made in implementations
This commit is contained in:
Pavel V. Talanov
2014-06-10 16:50:33 +04:00
parent f1e6560904
commit 8789d9b0bf
4 changed files with 12 additions and 11 deletions
@@ -44,7 +44,7 @@ public fun buildDecompiledText(
buildDecompiledText(packageFqName, ArrayList(resolver.resolveDeclarationsInPackage(packageFqName)))
}
else if (kind == KotlinClassHeader.Kind.CLASS) {
buildDecompiledText(packageFqName, listOf(resolver.resolveClass(classFqName)).filterNotNull())
buildDecompiledText(packageFqName, listOf(resolver.resolveTopLevelClass(classFqName)).filterNotNull())
}
else {
throw UnsupportedOperationException("Unknown header kind: " + kind)
@@ -56,7 +56,7 @@ public fun DeserializerForDecompiler(classFile: VirtualFile): DeserializerForDec
public class DeserializerForDecompiler(val packageDirectory: VirtualFile, val directoryPackageFqName: FqName) : ResolverForDecompiler {
override fun resolveClass(classFqName: FqName) = classes(classFqName.toClassId())
override fun resolveTopLevelClass(classFqName: FqName) = classes(classFqName.toClassId())
override fun resolveDeclarationsInPackage(packageFqName: FqName): Collection<DeclarationDescriptor> {
assert(packageFqName == directoryPackageFqName, "Was called for $packageFqName but only $directoryPackageFqName is expected.")
@@ -21,6 +21,6 @@ import org.jetbrains.jet.lang.resolve.name.FqName
import org.jetbrains.jet.lang.descriptors.ClassDescriptor
trait ResolverForDecompiler {
fun resolveClass(classFqName: FqName): ClassDescriptor?
fun resolveTopLevelClass(classFqName: FqName): ClassDescriptor?
fun resolveDeclarationsInPackage(packageFqName: FqName): Collection<DeclarationDescriptor>
}
@@ -30,6 +30,10 @@ import org.jetbrains.jet.plugin.caches.resolve.JavaResolveExtension
import org.jetbrains.jet.lang.descriptors.CallableDescriptor
import org.jetbrains.jet.lang.resolve.DescriptorUtils
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns
import org.jetbrains.jet.lang.resolve.resolveTopLevelClass
import org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor
import org.jetbrains.jet.plugin.caches.resolve.KotlinCacheService
import org.jetbrains.jet.plugin.project.TargetPlatform
public class DecompiledTextConsistencyTest : JetLightCodeInsightFixtureTestCase() {
@@ -54,19 +58,16 @@ public class DecompiledTextConsistencyTest : JetLightCodeInsightFixtureTestCase(
}
class ProjectBasedResolverForDecompiler(project: Project) : ResolverForDecompiler {
val javaDescriptorResolver = JavaResolveExtension[project]
val module = KotlinCacheService.getInstance(project).getGlobalLazyResolveSession(TargetPlatform.JVM).getModuleDescriptor()
override fun resolveClass(classFqName: FqName): ClassDescriptor? {
return javaDescriptorResolver.resolveClass(classFqName)
override fun resolveTopLevelClass(classFqName: FqName): ClassDescriptor? {
return module.resolveTopLevelClass(classFqName)
}
override fun resolveDeclarationsInPackage(packageFqName: FqName): Collection<DeclarationDescriptor> {
val packageView = javaDescriptorResolver.getModule().getPackage(packageFqName)
if (packageView == null) {
return Collections.emptyList()
}
val packageView = module.getPackage(packageFqName) ?: return listOf()
return packageView.getMemberScope().getAllDescriptors() filter {
it is CallableDescriptor && DescriptorUtils.getContainingModule(it) != KotlinBuiltIns.getInstance().getBuiltInsModule()
it is CallableMemberDescriptor && DescriptorUtils.getContainingModule(it) != KotlinBuiltIns.getInstance().getBuiltInsModule()
}
}
}