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))) buildDecompiledText(packageFqName, ArrayList(resolver.resolveDeclarationsInPackage(packageFqName)))
} }
else if (kind == KotlinClassHeader.Kind.CLASS) { else if (kind == KotlinClassHeader.Kind.CLASS) {
buildDecompiledText(packageFqName, listOf(resolver.resolveClass(classFqName)).filterNotNull()) buildDecompiledText(packageFqName, listOf(resolver.resolveTopLevelClass(classFqName)).filterNotNull())
} }
else { else {
throw UnsupportedOperationException("Unknown header kind: " + kind) 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 { 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> { override fun resolveDeclarationsInPackage(packageFqName: FqName): Collection<DeclarationDescriptor> {
assert(packageFqName == directoryPackageFqName, "Was called for $packageFqName but only $directoryPackageFqName is expected.") 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 import org.jetbrains.jet.lang.descriptors.ClassDescriptor
trait ResolverForDecompiler { trait ResolverForDecompiler {
fun resolveClass(classFqName: FqName): ClassDescriptor? fun resolveTopLevelClass(classFqName: FqName): ClassDescriptor?
fun resolveDeclarationsInPackage(packageFqName: FqName): Collection<DeclarationDescriptor> 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.descriptors.CallableDescriptor
import org.jetbrains.jet.lang.resolve.DescriptorUtils import org.jetbrains.jet.lang.resolve.DescriptorUtils
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns 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() { public class DecompiledTextConsistencyTest : JetLightCodeInsightFixtureTestCase() {
@@ -54,19 +58,16 @@ public class DecompiledTextConsistencyTest : JetLightCodeInsightFixtureTestCase(
} }
class ProjectBasedResolverForDecompiler(project: Project) : ResolverForDecompiler { class ProjectBasedResolverForDecompiler(project: Project) : ResolverForDecompiler {
val javaDescriptorResolver = JavaResolveExtension[project] val module = KotlinCacheService.getInstance(project).getGlobalLazyResolveSession(TargetPlatform.JVM).getModuleDescriptor()
override fun resolveClass(classFqName: FqName): ClassDescriptor? { override fun resolveTopLevelClass(classFqName: FqName): ClassDescriptor? {
return javaDescriptorResolver.resolveClass(classFqName) return module.resolveTopLevelClass(classFqName)
} }
override fun resolveDeclarationsInPackage(packageFqName: FqName): Collection<DeclarationDescriptor> { override fun resolveDeclarationsInPackage(packageFqName: FqName): Collection<DeclarationDescriptor> {
val packageView = javaDescriptorResolver.getModule().getPackage(packageFqName) val packageView = module.getPackage(packageFqName) ?: return listOf()
if (packageView == null) {
return Collections.emptyList()
}
return packageView.getMemberScope().getAllDescriptors() filter { return packageView.getMemberScope().getAllDescriptors() filter {
it is CallableDescriptor && DescriptorUtils.getContainingModule(it) != KotlinBuiltIns.getInstance().getBuiltInsModule() it is CallableMemberDescriptor && DescriptorUtils.getContainingModule(it) != KotlinBuiltIns.getInstance().getBuiltInsModule()
} }
} }
} }