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:
@@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user