Refactor creation of ModuleDescriptor

Add storageManager to ModuleDescriptorImpl (to be used later)
Extract ModuleParameters to hold default imports and platform class map
Introduce MutableModuleContext to simplify module creation code
This commit is contained in:
Pavel V. Talanov
2015-05-19 16:34:31 +03:00
parent 6a3cb0eff8
commit cfdb1f4ec3
30 changed files with 304 additions and 234 deletions
@@ -28,9 +28,7 @@ import org.jetbrains.kotlin.descriptors.impl.ValueParameterDescriptorImpl;
import org.jetbrains.kotlin.name.FqName;
import org.jetbrains.kotlin.name.FqNameUnsafe;
import org.jetbrains.kotlin.name.Name;
import org.jetbrains.kotlin.platform.PlatformToKotlinClassMap;
import org.jetbrains.kotlin.resolve.DescriptorUtils;
import org.jetbrains.kotlin.resolve.ImportPath;
import org.jetbrains.kotlin.resolve.scopes.JetScope;
import org.jetbrains.kotlin.serialization.deserialization.FlexibleTypeCapabilitiesDeserializer;
import org.jetbrains.kotlin.storage.LockBasedStorageManager;
@@ -109,12 +107,13 @@ public class KotlinBuiltIns {
public static final FqNames FQ_NAMES = new FqNames();
private KotlinBuiltIns() {
LockBasedStorageManager storageManager = new LockBasedStorageManager();
builtInsModule = new ModuleDescriptorImpl(
Name.special("<built-ins module>"), Collections.<ImportPath>emptyList(), PlatformToKotlinClassMap.EMPTY
Name.special("<built-ins module>"), storageManager, ModuleParameters.Empty.INSTANCE$
);
PackageFragmentProvider packageFragmentProvider = BuiltinsPackage.createBuiltInPackageFragmentProvider(
new LockBasedStorageManager(), builtInsModule, Collections.singleton(BUILT_INS_PACKAGE_FQ_NAME),
storageManager, builtInsModule, Collections.singleton(BUILT_INS_PACKAGE_FQ_NAME),
FlexibleTypeCapabilitiesDeserializer.ThrowException.INSTANCE$, new Function1<String, InputStream>() {
@Override
public InputStream invoke(String path) {
@@ -16,14 +16,14 @@
package org.jetbrains.kotlin.descriptors
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.descriptors.impl.PackageViewDescriptorImpl
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.platform.PlatformToKotlinClassMap
import org.jetbrains.kotlin.resolve.ImportPath
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.types.TypeSubstitutor
import org.jetbrains.kotlin.descriptors.impl.PackageViewDescriptorImpl
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
public trait ModuleDescriptor : DeclarationDescriptor {
public trait ModuleDescriptor : DeclarationDescriptor, ModuleParameters {
override fun getContainingDeclaration(): DeclarationDescriptor? = null
public fun getPackageFragmentProvider(): PackageFragmentProvider
@@ -33,10 +33,6 @@ public trait ModuleDescriptor : DeclarationDescriptor {
return if (!fragments.isEmpty()) PackageViewDescriptorImpl(this, fqName, fragments) else null
}
public val defaultImports: List<ImportPath>
public val platformToKotlinClassMap: PlatformToKotlinClassMap
public val builtIns: KotlinBuiltIns
public fun isFriend(other: ModuleDescriptor): Boolean
@@ -49,3 +45,19 @@ public trait ModuleDescriptor : DeclarationDescriptor {
return visitor.visitModuleDeclaration(this, data)
}
}
trait ModuleParameters {
public val defaultImports: List<ImportPath>
public val platformToKotlinClassMap: PlatformToKotlinClassMap
object Empty: ModuleParameters {
override val defaultImports: List<ImportPath> = emptyList()
override val platformToKotlinClassMap: PlatformToKotlinClassMap = PlatformToKotlinClassMap.EMPTY
}
}
public fun ModuleParameters(defaultImports: List<ImportPath>, platformToKotlinClassMap: PlatformToKotlinClassMap): ModuleParameters =
object : ModuleParameters {
override val defaultImports: List<ImportPath> = defaultImports
override val platformToKotlinClassMap: PlatformToKotlinClassMap = platformToKotlinClassMap
}
@@ -18,20 +18,20 @@ package org.jetbrains.kotlin.descriptors.impl
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.ModuleParameters
import org.jetbrains.kotlin.descriptors.PackageFragmentProvider
import org.jetbrains.kotlin.descriptors.annotations.Annotations
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.platform.PlatformToKotlinClassMap
import org.jetbrains.kotlin.resolve.ImportPath
import org.jetbrains.kotlin.storage.StorageManager
import java.util.ArrayList
import java.util.LinkedHashSet
import kotlin.properties.Delegates
public class ModuleDescriptorImpl(
moduleName: Name,
override val defaultImports: List<ImportPath>,
override val platformToKotlinClassMap: PlatformToKotlinClassMap
) : DeclarationDescriptorImpl(Annotations.EMPTY, moduleName), ModuleDescriptor {
private val storageManager: StorageManager,
private val moduleParameters: ModuleParameters
) : DeclarationDescriptorImpl(Annotations.EMPTY, moduleName), ModuleDescriptor, ModuleParameters by moduleParameters {
init {
if (!moduleName.isSpecial()) {
throw IllegalArgumentException("Module name must be special: $moduleName")
@@ -24,10 +24,9 @@ import org.jetbrains.kotlin.descriptors.*;
import org.jetbrains.kotlin.descriptors.annotations.Annotations;
import org.jetbrains.kotlin.descriptors.impl.*;
import org.jetbrains.kotlin.name.Name;
import org.jetbrains.kotlin.platform.PlatformToKotlinClassMap;
import org.jetbrains.kotlin.resolve.ImportPath;
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter;
import org.jetbrains.kotlin.resolve.scopes.JetScope;
import org.jetbrains.kotlin.storage.LockBasedStorageManager;
import org.jetbrains.kotlin.types.error.ErrorSimpleFunctionDescriptorImpl;
import org.jetbrains.kotlin.utils.Printer;
@@ -44,8 +43,8 @@ public class ErrorUtils {
static {
ERROR_MODULE = new ModuleDescriptorImpl(
Name.special("<ERROR MODULE>"),
Collections.<ImportPath>emptyList(),
PlatformToKotlinClassMap.EMPTY
LockBasedStorageManager.NO_LOCKS,
ModuleParameters.Empty.INSTANCE$
);
}