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