Minor. Move LockLevel to LexicalWritableScope

This commit is contained in:
Stanislav Erokhin
2015-10-31 05:08:42 +03:00
parent fe61f41a94
commit 71620d2ed1
14 changed files with 34 additions and 47 deletions
@@ -19,10 +19,7 @@ package org.jetbrains.kotlin.descriptors.impl;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.descriptors.ModuleDescriptor;
import org.jetbrains.kotlin.name.FqName;
import org.jetbrains.kotlin.resolve.scopes.KtScope;
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.*;
public class MutablePackageFragmentDescriptor extends PackageFragmentDescriptorImpl {
private final WritableScope scope;
@@ -31,7 +28,7 @@ public class MutablePackageFragmentDescriptor extends PackageFragmentDescriptorI
super(module, fqName);
scope = new WritableScopeImpl(KtScope.Empty.INSTANCE$, this, RedeclarationHandler.DO_NOTHING, "Members of " + fqName + " in " + module);
scope.changeLockLevel(WritableScope.LockLevel.BOTH);
scope.changeLockLevel(LexicalWritableScope.LockLevel.BOTH);
}
@NotNull
@@ -49,7 +49,6 @@ import org.jetbrains.kotlin.resolve.lazy.ForceResolveUtil;
import org.jetbrains.kotlin.resolve.scopes.JetScopeUtils;
import org.jetbrains.kotlin.resolve.scopes.LexicalScope;
import org.jetbrains.kotlin.resolve.scopes.LexicalWritableScope;
import org.jetbrains.kotlin.resolve.scopes.WritableScope;
import org.jetbrains.kotlin.resolve.scopes.utils.ScopeUtilsKt;
import org.jetbrains.kotlin.resolve.source.KotlinSourceElementKt;
import org.jetbrains.kotlin.storage.StorageManager;
@@ -778,7 +777,7 @@ public class DescriptorResolver {
"Scope with type parameters of a property");
typeParameterDescriptors = resolveTypeParametersForCallableDescriptor(
propertyDescriptor, writableScope, scope, typeParameters, trace);
writableScope.changeLockLevel(WritableScope.LockLevel.READING);
writableScope.changeLockLevel(LexicalWritableScope.LockLevel.READING);
resolveGenericBounds(property, propertyDescriptor, writableScope, typeParameterDescriptors, trace);
scopeWithTypeParameters = writableScope;
}
@@ -37,7 +37,6 @@ import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo
import org.jetbrains.kotlin.resolve.lazy.ForceResolveUtil
import org.jetbrains.kotlin.resolve.scopes.LexicalScope
import org.jetbrains.kotlin.resolve.scopes.LexicalWritableScope
import org.jetbrains.kotlin.resolve.scopes.WritableScope
import org.jetbrains.kotlin.resolve.source.toSourceElement
import org.jetbrains.kotlin.storage.StorageManager
import org.jetbrains.kotlin.types.DeferredType
@@ -147,7 +146,7 @@ class FunctionDescriptorResolver(
val typeParameterDescriptors = descriptorResolver.
resolveTypeParametersForCallableDescriptor(functionDescriptor, innerScope, scope, function.getTypeParameters(), trace)
innerScope.changeLockLevel(WritableScope.LockLevel.BOTH)
innerScope.changeLockLevel(LexicalWritableScope.LockLevel.BOTH)
descriptorResolver.resolveGenericBounds(function, functionDescriptor, innerScope, typeParameterDescriptors, trace)
val receiverTypeRef = function.getReceiverTypeReference()
@@ -160,7 +159,7 @@ class FunctionDescriptorResolver(
val valueParameterDescriptors = createValueParameterDescriptors(function, functionDescriptor, innerScope, trace, expectedFunctionType)
innerScope.changeLockLevel(WritableScope.LockLevel.READING)
innerScope.changeLockLevel(LexicalWritableScope.LockLevel.READING)
val returnType = function.getTypeReference()?.let { typeResolver.resolveType(innerScope, it, trace, true) }
@@ -290,7 +289,7 @@ class FunctionDescriptorResolver(
TraceBasedRedeclarationHandler(trace),
"Scope with value parameters of a constructor"
)
parameterScope.changeLockLevel(WritableScope.LockLevel.BOTH)
parameterScope.changeLockLevel(LexicalWritableScope.LockLevel.BOTH)
val constructor = constructorDescriptor.initialize(
typeParameters,
resolveValueParameters(constructorDescriptor, parameterScope, valueParameters, trace, null),
@@ -31,16 +31,22 @@ class LexicalWritableScope(
override val redeclarationHandler: RedeclarationHandler,
private val debugName: String
) : LexicalScope, WritableScopeStorage {
public enum class LockLevel {
WRITING,
BOTH,
READING
}
override val parent = parent.takeSnapshot()
override val addedDescriptors: MutableList<DeclarationDescriptor> = SmartList()
override var functionsByName: MutableMap<Name, WritableScopeStorage.IntList>? = null
override var variablesAndClassifiersByName: MutableMap<Name, WritableScopeStorage.IntList>? = null
private var lockLevel: WritableScope.LockLevel = WritableScope.LockLevel.WRITING
private var lockLevel: LockLevel = LockLevel.WRITING
private var lastSnapshot: Snapshot? = null
public fun changeLockLevel(lockLevel: WritableScope.LockLevel) {
public fun changeLockLevel(lockLevel: LockLevel) {
if (lockLevel.ordinal() < this.lockLevel.ordinal()) {
throw IllegalStateException("cannot lower lock level from " + this.lockLevel + " to " + lockLevel + " at " + toString())
}
@@ -80,14 +86,14 @@ class LexicalWritableScope(
override fun getContributedFunctions(name: Name, location: LookupLocation) = checkMayRead().getDeclaredFunctions(name)
private fun checkMayRead(): LexicalWritableScope {
if (lockLevel != WritableScope.LockLevel.READING && lockLevel != WritableScope.LockLevel.BOTH) {
if (lockLevel != LockLevel.READING && lockLevel != LockLevel.BOTH) {
throw IllegalStateException("cannot read with lock level " + lockLevel + " at " + toString())
}
return this
}
private fun checkMayWrite() {
if (lockLevel != WritableScope.LockLevel.WRITING && lockLevel != WritableScope.LockLevel.BOTH) {
if (lockLevel != LockLevel.WRITING && lockLevel != LockLevel.BOTH) {
throw IllegalStateException("cannot write with lock level " + lockLevel + " at " + toString())
}
}
@@ -21,15 +21,9 @@ import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.descriptors.VariableDescriptor
public interface WritableScope : KtScope {
public enum class LockLevel {
WRITING,
BOTH,
READING
}
public fun takeSnapshot(): KtScope
public fun changeLockLevel(lockLevel: LockLevel)
public fun changeLockLevel(lockLevel: LexicalWritableScope.LockLevel)
public fun addVariableDescriptor(variableDescriptor: VariableDescriptor)
@@ -55,9 +55,9 @@ public class WritableScopeImpl @JvmOverloads constructor(
override fun getContainingDeclaration() = ownerDeclarationDescriptor
private var lockLevel: WritableScope.LockLevel = WritableScope.LockLevel.WRITING
private var lockLevel: LexicalWritableScope.LockLevel = LexicalWritableScope.LockLevel.WRITING
override fun changeLockLevel(lockLevel: WritableScope.LockLevel) {
override fun changeLockLevel(lockLevel: LexicalWritableScope.LockLevel) {
if (lockLevel.ordinal() < this.lockLevel.ordinal()) {
throw IllegalStateException("cannot lower lock level from " + this.lockLevel + " to " + lockLevel + " at " + toString())
}
@@ -65,13 +65,13 @@ public class WritableScopeImpl @JvmOverloads constructor(
}
private fun checkMayRead() {
if (lockLevel != WritableScope.LockLevel.READING && lockLevel != WritableScope.LockLevel.BOTH) {
if (lockLevel != LexicalWritableScope.LockLevel.READING && lockLevel != LexicalWritableScope.LockLevel.BOTH) {
throw IllegalStateException("cannot read with lock level " + lockLevel + " at " + toString())
}
}
private fun checkMayWrite() {
if (lockLevel != WritableScope.LockLevel.WRITING && lockLevel != WritableScope.LockLevel.BOTH) {
if (lockLevel != LexicalWritableScope.LockLevel.WRITING && lockLevel != LexicalWritableScope.LockLevel.BOTH) {
throw IllegalStateException("cannot write with lock level " + lockLevel + " at " + toString())
}
}
@@ -87,7 +87,7 @@ public class WritableScopeImpl @JvmOverloads constructor(
override fun getDescriptors(kindFilter: DescriptorKindFilter,
nameFilter: (Name) -> Boolean): Collection<DeclarationDescriptor> {
checkMayRead()
changeLockLevel(WritableScope.LockLevel.READING)
changeLockLevel(LexicalWritableScope.LockLevel.READING)
val result = ArrayList<DeclarationDescriptor>()
result.addAll(addedDescriptors)
@@ -168,7 +168,7 @@ public class WritableScopeImpl @JvmOverloads constructor(
private inner class Snapshot(val descriptorLimit: Int) : KtScope by this@WritableScopeImpl {
override fun getDescriptors(kindFilter: DescriptorKindFilter, nameFilter: (Name) -> Boolean): Collection<DeclarationDescriptor> {
checkMayRead()
changeLockLevel(WritableScope.LockLevel.READING)
changeLockLevel(LexicalWritableScope.LockLevel.READING)
val workerResult = workerScope.getDescriptors(kindFilter, nameFilter)
@@ -31,7 +31,6 @@ import org.jetbrains.kotlin.resolve.calls.context.ResolutionContext;
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo;
import org.jetbrains.kotlin.resolve.scopes.LexicalScope;
import org.jetbrains.kotlin.resolve.scopes.LexicalWritableScope;
import org.jetbrains.kotlin.resolve.scopes.WritableScope;
import org.jetbrains.kotlin.types.ErrorUtils;
import org.jetbrains.kotlin.types.KotlinType;
import org.jetbrains.kotlin.types.expressions.typeInfoFactory.TypeInfoFactoryKt;
@@ -169,7 +168,7 @@ public class ExpressionTypingServices {
}
LexicalWritableScope scope = new LexicalWritableScope(context.scope, containingDescriptor, false, null,
new TraceBasedRedeclarationHandler(context.trace), "getBlockReturnedType");
scope.changeLockLevel(WritableScope.LockLevel.BOTH);
scope.changeLockLevel(LexicalWritableScope.LockLevel.BOTH);
KotlinTypeInfo r;
if (block.isEmpty()) {
@@ -180,7 +179,7 @@ public class ExpressionTypingServices {
r = getBlockReturnedTypeWithWritableScope(scope, block, coercionStrategyForLastExpression,
context.replaceStatementFilter(statementFilter));
}
scope.changeLockLevel(WritableScope.LockLevel.READING);
scope.changeLockLevel(LexicalWritableScope.LockLevel.READING);
if (containingDescriptor instanceof ScriptDescriptor) {
context.trace.record(BindingContext.SCRIPT_SCOPE, (ScriptDescriptor) containingDescriptor, scope);
@@ -33,7 +33,6 @@ import org.jetbrains.kotlin.lexer.KtTokens;
import org.jetbrains.kotlin.psi.*;
import org.jetbrains.kotlin.resolve.*;
import org.jetbrains.kotlin.resolve.scopes.LexicalWritableScope;
import org.jetbrains.kotlin.resolve.scopes.WritableScope;
import org.jetbrains.kotlin.resolve.scopes.receivers.ClassReceiver;
import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver;
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue;
@@ -106,7 +105,7 @@ public class ExpressionTypingUtils {
public static LexicalWritableScope newWritableScopeImpl(ExpressionTypingContext context, @NotNull String scopeDebugName) {
LexicalWritableScope scope = new LexicalWritableScope(
context.scope, context.scope.getOwnerDescriptor(), false, null, new TraceBasedRedeclarationHandler(context.trace), scopeDebugName);
scope.changeLockLevel(WritableScope.LockLevel.BOTH);
scope.changeLockLevel(LexicalWritableScope.LockLevel.BOTH);
return scope;
}
@@ -189,7 +189,7 @@ public abstract class AbstractJvmRuntimeDescriptorLoaderTest : TestCaseWithTmpdi
init {
val writableScope = WritableScopeImpl(KtScope.Empty, this, RedeclarationHandler.THROW_EXCEPTION, "runtime descriptor loader test")
classes.forEach { writableScope.addClassifierDescriptor(it) }
writableScope.changeLockLevel(WritableScope.LockLevel.READING)
writableScope.changeLockLevel(LexicalWritableScope.LockLevel.READING)
scope = ChainedScope(this, "synthetic package view for test", writableScope, *packageScopes.toTypedArray())
}
@@ -29,10 +29,7 @@ import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo;
import org.jetbrains.kotlin.resolve.lazy.JvmResolveUtil;
import org.jetbrains.kotlin.resolve.lazy.ResolveSession;
import org.jetbrains.kotlin.resolve.lazy.declarations.FileBasedDeclarationProviderFactory;
import org.jetbrains.kotlin.resolve.scopes.KtScope;
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.test.ConfigurationKind;
import org.jetbrains.kotlin.test.KotlinLiteFixture;
import org.jetbrains.kotlin.test.KotlinTestUtils;
@@ -94,7 +91,7 @@ public class DefaultModalityModifiersTest extends KotlinLiteFixture {
libraryScope, root, RedeclarationHandler.DO_NOTHING, "JetDefaultModalityModifiersTest");
assert classDescriptor instanceof ClassifierDescriptor;
scope.addClassifierDescriptor((ClassifierDescriptor) classDescriptor);
scope.changeLockLevel(WritableScope.LockLevel.READING);
scope.changeLockLevel(LexicalWritableScope.LockLevel.READING);
return scope;
}
@@ -625,7 +625,7 @@ public class KotlinTypeCheckerTest extends KotlinLiteFixture {
}
}
scopeChain.add(module.getPackage(FqName.ROOT).getMemberScope());
writableScope.changeLockLevel(WritableScope.LockLevel.BOTH);
writableScope.changeLockLevel(LexicalWritableScope.LockLevel.BOTH);
return new ChainedScope(scope.getContainingDeclaration(), "JetTypeCheckerTest.addImports scope with imports", scopeChain.toArray(new KtScope[scopeChain.size()]));
}
@@ -91,7 +91,7 @@ public class TypeSubstitutorTest extends KotlinTestWithEnvironment {
for (TypeParameterDescriptor parameterDescriptor : contextClass.getTypeConstructor().getParameters()) {
typeParameters.addClassifierDescriptor(parameterDescriptor);
}
typeParameters.changeLockLevel(WritableScope.LockLevel.READING);
typeParameters.changeLockLevel(LexicalWritableScope.LockLevel.READING);
return new ChainedScope(module,
"TypeSubstitutorTest::getContextScope()",
topLevelDeclarations,
@@ -32,10 +32,7 @@ import org.jetbrains.kotlin.psi.KtPsiFactoryKt;
import org.jetbrains.kotlin.psi.KtTypeProjection;
import org.jetbrains.kotlin.psi.KtTypeReference;
import org.jetbrains.kotlin.resolve.TypeResolver;
import org.jetbrains.kotlin.resolve.scopes.KtScope;
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.test.ConfigurationKind;
import org.jetbrains.kotlin.test.KotlinLiteFixture;
import org.jetbrains.kotlin.test.KotlinTestUtils;
@@ -205,7 +202,7 @@ public class TypeUnifierTest extends KotlinLiteFixture {
new WritableScopeImpl(scope, scope.getContainingDeclaration(), RedeclarationHandler.DO_NOTHING, "With X");
withX.addClassifierDescriptor(x);
withX.addClassifierDescriptor(y);
withX.changeLockLevel(WritableScope.LockLevel.READING);
withX.changeLockLevel(LexicalWritableScope.LockLevel.READING);
KtTypeProjection projection = KtPsiFactoryKt
.KtPsiFactory(getProject()).createTypeArguments("<" + typeStr + ">").getArguments().get(0);
@@ -357,7 +357,7 @@ class CallableBuilder(val config: CallableBuilderConfiguration) {
)
) {
receiverClassDescriptor.getTypeConstructor().getParameters().forEach { addClassifierDescriptor(it) }
changeLockLevel(WritableScope.LockLevel.READING)
changeLockLevel(LexicalWritableScope.LockLevel.READING)
this
}