get rid of WritableScopeWithImports
This commit is contained in:
+18
-14
@@ -33,10 +33,7 @@ import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.renderer.DescriptorRenderer
|
||||
import org.jetbrains.kotlin.renderer.DescriptorRendererBuilder
|
||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||
import org.jetbrains.kotlin.resolve.scopes.JetScope
|
||||
import org.jetbrains.kotlin.resolve.scopes.RedeclarationHandler
|
||||
import org.jetbrains.kotlin.resolve.scopes.WritableScope
|
||||
import org.jetbrains.kotlin.resolve.scopes.WritableScopeImpl
|
||||
import org.jetbrains.kotlin.resolve.scopes.*
|
||||
import org.jetbrains.kotlin.serialization.deserialization.findClassAcrossModuleDependencies
|
||||
import org.jetbrains.kotlin.test.*
|
||||
import org.jetbrains.kotlin.test.JetTestUtils.TestFileFactoryNoModules
|
||||
@@ -133,14 +130,12 @@ public abstract class AbstractJvmRuntimeDescriptorLoaderTest : TestCaseWithTmpdi
|
||||
private fun createReflectedPackageView(classLoader: URLClassLoader): SyntheticPackageViewForTest {
|
||||
val module = RuntimeModuleData.create(classLoader).module
|
||||
|
||||
// Since runtime package view descriptor doesn't support getAllDescriptors(), we construct a synthetic package view here.
|
||||
// It has in its scope descriptors for all the classes and top level members generated by the compiler
|
||||
val actual = SyntheticPackageViewForTest(module)
|
||||
val scope = actual.getMemberScope()
|
||||
|
||||
val generatedPackageDir = File(tmpdir, LoadDescriptorUtil.TEST_PACKAGE_FQNAME.pathSegments().single().asString())
|
||||
val allClassFiles = FileUtil.findFilesByMask(Pattern.compile(".*\\.class"), generatedPackageDir)
|
||||
|
||||
val packageScopes = arrayListOf<JetScope>()
|
||||
val classes = arrayListOf<ClassDescriptor>()
|
||||
for (classFile in allClassFiles) {
|
||||
val className = tmpdir.relativePath(classFile).substringBeforeLast(".class").replace('/', '.').replace('\\', '.')
|
||||
|
||||
@@ -148,8 +143,8 @@ public abstract class AbstractJvmRuntimeDescriptorLoaderTest : TestCaseWithTmpdi
|
||||
val header = ReflectKotlinClass.create(klass)?.getClassHeader()
|
||||
|
||||
if (header?.kind == KotlinClassHeader.Kind.PACKAGE_FACADE) {
|
||||
val packageView = module.getPackage(actual.getFqName()).sure { "Couldn't resolve package ${actual.getFqName()}" }
|
||||
scope.importScope(packageView.getMemberScope())
|
||||
val packageView = module.getPackage(LoadDescriptorUtil.TEST_PACKAGE_FQNAME).sure { "Couldn't resolve package ${LoadDescriptorUtil.TEST_PACKAGE_FQNAME}" }
|
||||
packageScopes.add(packageView.getMemberScope())
|
||||
}
|
||||
else if (header == null ||
|
||||
(header.kind == KotlinClassHeader.Kind.CLASS && header.classKind == JvmAnnotationNames.KotlinClass.Kind.CLASS)) {
|
||||
@@ -158,11 +153,15 @@ public abstract class AbstractJvmRuntimeDescriptorLoaderTest : TestCaseWithTmpdi
|
||||
if (!classId.isLocal()) {
|
||||
val classDescriptor = module.findClassAcrossModuleDependencies(classId).sure { "Couldn't resolve class $className" }
|
||||
if (DescriptorUtils.isTopLevelDeclaration(classDescriptor)) {
|
||||
scope.addClassifierDescriptor(classDescriptor)
|
||||
classes.add(classDescriptor)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Since runtime package view descriptor doesn't support getAllDescriptors(), we construct a synthetic package view here.
|
||||
// It has in its scope descriptors for all the classes and top level members generated by the compiler
|
||||
val actual = SyntheticPackageViewForTest(module, packageScopes, classes)
|
||||
return actual
|
||||
}
|
||||
|
||||
@@ -180,11 +179,16 @@ public abstract class AbstractJvmRuntimeDescriptorLoaderTest : TestCaseWithTmpdi
|
||||
)
|
||||
}
|
||||
|
||||
private class SyntheticPackageViewForTest(private val module: ModuleDescriptor) : PackageViewDescriptor {
|
||||
private val scope = WritableScopeImpl(JetScope.Empty, this, RedeclarationHandler.THROW_EXCEPTION, "runtime descriptor loader test")
|
||||
private class SyntheticPackageViewForTest(private val module: ModuleDescriptor,
|
||||
packageScopes: List<JetScope>,
|
||||
classes: List<ClassifierDescriptor>) : PackageViewDescriptor {
|
||||
private val scope: JetScope
|
||||
|
||||
init {
|
||||
scope.changeLockLevel(WritableScope.LockLevel.BOTH)
|
||||
val writableScope = WritableScopeImpl(JetScope.Empty, this, RedeclarationHandler.THROW_EXCEPTION, "runtime descriptor loader test")
|
||||
classes.forEach { writableScope.addClassifierDescriptor(it) }
|
||||
writableScope.changeLockLevel(WritableScope.LockLevel.READING)
|
||||
scope = ChainedScope(null, "", *(listOf(writableScope) + packageScopes).toTypedArray())
|
||||
}
|
||||
|
||||
override fun getFqName() = LoadDescriptorUtil.TEST_PACKAGE_FQNAME
|
||||
|
||||
@@ -591,7 +591,7 @@ public class JetTypeCheckerTest extends JetLiteFixture {
|
||||
assertEquals(expectedType, type);
|
||||
}
|
||||
|
||||
private WritableScope getDeclarationsScope(String path) throws IOException {
|
||||
private JetScope getDeclarationsScope(String path) throws IOException {
|
||||
ModuleDescriptor moduleDescriptor = LazyResolveTestUtil.resolve(
|
||||
getProject(),
|
||||
Collections.singletonList(JetTestUtils.loadJetFile(getProject(), new File(path)))
|
||||
@@ -604,15 +604,18 @@ public class JetTypeCheckerTest extends JetLiteFixture {
|
||||
}
|
||||
|
||||
@SuppressWarnings("ConstantConditions")
|
||||
private WritableScopeImpl addImports(JetScope scope) {
|
||||
private JetScope addImports(JetScope scope) {
|
||||
WritableScopeImpl writableScope = new WritableScopeImpl(
|
||||
scope, scope.getContainingDeclaration(), RedeclarationHandler.DO_NOTHING, "JetTypeCheckerTest.addImports"
|
||||
);
|
||||
List<JetScope> scopeChain = new ArrayList<JetScope>();
|
||||
scopeChain.add(writableScope);
|
||||
|
||||
ModuleDescriptor module = LazyResolveTestUtil.resolveProject(getProject());
|
||||
for (ImportPath defaultImport : module.getDefaultImports()) {
|
||||
FqName fqName = defaultImport.fqnPart();
|
||||
if (defaultImport.isAllUnder()) {
|
||||
writableScope.importScope(module.getPackage(fqName).getMemberScope());
|
||||
scopeChain.add(module.getPackage(fqName).getMemberScope());
|
||||
}
|
||||
else {
|
||||
Name shortName = fqName.shortName();
|
||||
@@ -620,9 +623,9 @@ public class JetTypeCheckerTest extends JetLiteFixture {
|
||||
writableScope.addClassifierDescriptor(module.getPackage(fqName.parent()).getMemberScope().getClassifier(shortName));
|
||||
}
|
||||
}
|
||||
writableScope.importScope(module.getPackage(FqName.ROOT).getMemberScope());
|
||||
scopeChain.add(module.getPackage(FqName.ROOT).getMemberScope());
|
||||
writableScope.changeLockLevel(WritableScope.LockLevel.BOTH);
|
||||
return writableScope;
|
||||
return new ChainedScope(scope.getContainingDeclaration(), "", scopeChain.toArray(new JetScope[scopeChain.size()]));
|
||||
}
|
||||
|
||||
private JetType makeType(String typeStr) {
|
||||
|
||||
Reference in New Issue
Block a user