replace JavaClassDescriptor with MutableClassDescriptorLite

This commit is contained in:
Stepan Koltsov
2012-01-14 04:27:22 +04:00
parent 10eb516743
commit 882a475ac8
8 changed files with 57 additions and 238 deletions
@@ -1,9 +1,7 @@
package org.jetbrains.jet.lang.descriptors;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.psi.JetParameter;
import org.jetbrains.jet.lang.resolve.AbstractScopeAdapter;
import org.jetbrains.jet.lang.resolve.BindingContext;
@@ -12,8 +10,6 @@ import org.jetbrains.jet.lang.resolve.TraceBasedRedeclarationHandler;
import org.jetbrains.jet.lang.resolve.scopes.*;
import org.jetbrains.jet.lang.resolve.scopes.receivers.ClassReceiver;
import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor;
import org.jetbrains.jet.lang.types.*;
import org.jetbrains.jet.resolve.DescriptorRenderer;
import java.util.*;
@@ -31,7 +27,7 @@ public class MutableClassDescriptor extends MutableClassDescriptorLite {
private final WritableScope scopeForInitializers; //contains members + primary constructor value parameters + map for backing fields
public MutableClassDescriptor(@NotNull BindingTrace trace, @NotNull DeclarationDescriptor containingDeclaration, @NotNull JetScope outerScope, ClassKind kind) {
super(containingDeclaration, kind, new TraceBasedRedeclarationHandler(trace));
super(containingDeclaration, kind);
if (containingDeclaration instanceof ClassDescriptor
|| containingDeclaration instanceof NamespaceLike
@@ -43,6 +39,8 @@ public class MutableClassDescriptor extends MutableClassDescriptorLite {
}
TraceBasedRedeclarationHandler redeclarationHandler = new TraceBasedRedeclarationHandler(trace);
setScopeForMemberLookup(new WritableScopeImpl(JetScope.EMPTY, this, redeclarationHandler).setDebugName("MemberLookup").changeLockLevel(WritableScope.LockLevel.BOTH));
this.scopeForSupertypeResolution = new WritableScopeImpl(outerScope, this, redeclarationHandler).setDebugName("SupertypeResolution").changeLockLevel(WritableScope.LockLevel.BOTH);
this.scopeForMemberResolution = new WritableScopeImpl(scopeForSupertypeResolution, this, redeclarationHandler).setDebugName("MemberResolution").changeLockLevel(WritableScope.LockLevel.BOTH);
this.scopeForInitializers = new WritableScopeImpl(scopeForMemberResolution, this, redeclarationHandler).setDebugName("Initializers").changeLockLevel(WritableScope.LockLevel.BOTH);
@@ -55,15 +55,12 @@ public class MutableClassDescriptorLite extends MutableDeclarationDescriptor imp
private JetType defaultType;
private final ClassKind kind;
private final WritableScope scopeForMemberLookup;
private JetScope scopeForMemberLookup;
private ClassReceiver implicitReceiver;
public MutableClassDescriptorLite(DeclarationDescriptor containingDeclaration, ClassKind kind, RedeclarationHandler redeclarationHandler) {
public MutableClassDescriptorLite(DeclarationDescriptor containingDeclaration, ClassKind kind) {
super(containingDeclaration);
this.scopeForMemberLookup = new WritableScopeImpl(JetScope.EMPTY, this, redeclarationHandler).setDebugName("MemberLookup").changeLockLevel(WritableScope.LockLevel.BOTH);
this.kind = kind;
}
@@ -103,6 +100,10 @@ public class MutableClassDescriptorLite extends MutableDeclarationDescriptor imp
return typeConstructor;
}
public void setScopeForMemberLookup(JetScope scopeForMemberLookup) {
this.scopeForMemberLookup = scopeForMemberLookup;
}
public void createTypeConstructor() {
assert typeConstructor == null : typeConstructor;
this.typeConstructor = new TypeConstructorImpl(
@@ -117,9 +118,14 @@ public class MutableClassDescriptorLite extends MutableDeclarationDescriptor imp
}
}
private WritableScope getScopeForMemberLookupAsWritableScope() {
// hack
return (WritableScope) scopeForMemberLookup;
}
public void addSupertypesToScopeForMemberLookup() {
for (JetType supertype : supertypes) {
scopeForMemberLookup.importScope(supertype.getMemberScope());
getScopeForMemberLookupAsWritableScope().importScope(supertype.getMemberScope());
}
}
@@ -204,12 +210,9 @@ public class MutableClassDescriptorLite extends MutableDeclarationDescriptor imp
return supertypes;
}
public void setSupertypes(@NotNull Collection<JetType> supertypes) {
this.supertypes = supertypes;
}
public void setPrimaryConstructor(@NotNull ConstructorDescriptor constructorDescriptor, BindingTrace trace) {
@@ -249,12 +252,12 @@ public class MutableClassDescriptorLite extends MutableDeclarationDescriptor imp
@Override
public void addPropertyDescriptor(@NotNull PropertyDescriptor propertyDescriptor) {
scopeForMemberLookup.addPropertyDescriptor(propertyDescriptor);
getScopeForMemberLookupAsWritableScope().addPropertyDescriptor(propertyDescriptor);
}
@Override
public void addFunctionDescriptor(@NotNull NamedFunctionDescriptor functionDescriptor) {
scopeForMemberLookup.addFunctionDescriptor(functionDescriptor);
getScopeForMemberLookupAsWritableScope().addFunctionDescriptor(functionDescriptor);
}
@Override
@@ -269,7 +272,7 @@ public class MutableClassDescriptorLite extends MutableDeclarationDescriptor imp
@Override
public void addClassifierDescriptor(@NotNull MutableClassDescriptor classDescriptor) {
scopeForMemberLookup.addClassifierDescriptor(classDescriptor);
getScopeForMemberLookupAsWritableScope().addClassifierDescriptor(classDescriptor);
innerClassesAndObjects.put(classDescriptor.getName(), classDescriptor);
}
@@ -287,7 +290,7 @@ public class MutableClassDescriptorLite extends MutableDeclarationDescriptor imp
@Override
public void addObjectDescriptor(@NotNull MutableClassDescriptor objectDescriptor) {
scopeForMemberLookup.addObjectDescriptor(objectDescriptor);
getScopeForMemberLookupAsWritableScope().addObjectDescriptor(objectDescriptor);
innerClassesAndObjects.put(objectDescriptor.getName(), objectDescriptor);
}
@@ -309,7 +312,7 @@ public class MutableClassDescriptorLite extends MutableDeclarationDescriptor imp
public void lockScopes() {
scopeForMemberLookup.changeLockLevel(WritableScope.LockLevel.READING);
getScopeForMemberLookupAsWritableScope().changeLockLevel(WritableScope.LockLevel.READING);
if (classObjectDescriptor != null) {
classObjectDescriptor.lockScopes();
}