Minor. Move LockLevel to LexicalWritableScope
This commit is contained in:
+2
-5
@@ -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)
|
||||
|
||||
|
||||
+2
-3
@@ -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);
|
||||
|
||||
+1
-2
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -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);
|
||||
|
||||
+1
-1
@@ -357,7 +357,7 @@ class CallableBuilder(val config: CallableBuilderConfiguration) {
|
||||
)
|
||||
) {
|
||||
receiverClassDescriptor.getTypeConstructor().getParameters().forEach { addClassifierDescriptor(it) }
|
||||
changeLockLevel(WritableScope.LockLevel.READING)
|
||||
changeLockLevel(LexicalWritableScope.LockLevel.READING)
|
||||
this
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user