Pull up getThisAsReceiverParameter()
This commit is contained in:
-32
@@ -29,8 +29,6 @@ import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
||||
import org.jetbrains.jet.lang.resolve.OverridingUtil;
|
||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.receivers.ClassReceiver;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverValue;
|
||||
import org.jetbrains.jet.lang.types.ErrorUtils;
|
||||
import org.jetbrains.jet.lang.types.JetType;
|
||||
import org.jetbrains.jet.lang.types.TypeConstructor;
|
||||
@@ -53,7 +51,6 @@ public class DeserializedClassDescriptor extends AbstractClassDescriptor impleme
|
||||
private final TypeDeserializer typeDeserializer;
|
||||
private final DescriptorDeserializer deserializer;
|
||||
private final DeserializedMemberScope memberScope;
|
||||
private final ReceiverParameterDescriptor thisAsReceiverParameter;
|
||||
|
||||
private final NullableLazyValue<ConstructorDescriptor> primaryConstructor;
|
||||
|
||||
@@ -104,7 +101,6 @@ public class DeserializedClassDescriptor extends AbstractClassDescriptor impleme
|
||||
|
||||
this.typeConstructor = new DeserializedClassTypeConstructor(typeParameters);
|
||||
this.memberScope = new DeserializedClassMemberScope(storageManager, this);
|
||||
this.thisAsReceiverParameter = new LazyClassReceiverParameterDescriptor();
|
||||
|
||||
int flags = classProto.getFlags();
|
||||
this.modality = DescriptorDeserializer.modality(Flags.MODALITY.get(flags));
|
||||
@@ -291,12 +287,6 @@ public class DeserializedClassDescriptor extends AbstractClassDescriptor impleme
|
||||
return classObjectDescriptor.invoke();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public ReceiverParameterDescriptor getThisAsReceiverParameter() {
|
||||
return thisAsReceiverParameter;
|
||||
}
|
||||
|
||||
private Collection<JetType> computeSuperTypes() {
|
||||
List<JetType> supertypes = new ArrayList<JetType>(classProto.getSupertypeCount());
|
||||
for (ProtoBuf.Type supertype : classProto.getSupertypeList()) {
|
||||
@@ -495,27 +485,5 @@ public class DeserializedClassDescriptor extends AbstractClassDescriptor impleme
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
private class LazyClassReceiverParameterDescriptor extends AbstractReceiverParameterDescriptor {
|
||||
private final ClassReceiver classReceiver = new ClassReceiver(DeserializedClassDescriptor.this);
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public JetType getType() {
|
||||
return getDefaultType();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public ReceiverValue getValue() {
|
||||
return classReceiver;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public DeclarationDescriptor getContainingDeclaration() {
|
||||
return DeserializedClassDescriptor.this;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
-14
@@ -32,7 +32,6 @@ import org.jetbrains.jet.lang.descriptors.impl.ClassDescriptorBase;
|
||||
import org.jetbrains.jet.lang.psi.*;
|
||||
import org.jetbrains.jet.lang.resolve.AnnotationResolver;
|
||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
||||
import org.jetbrains.jet.lang.resolve.DescriptorFactory;
|
||||
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
||||
import org.jetbrains.jet.lang.resolve.lazy.ForceResolveUtil;
|
||||
import org.jetbrains.jet.lang.resolve.lazy.LazyDescriptor;
|
||||
@@ -77,7 +76,6 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements LazyDesc
|
||||
private final ClassKind kind;
|
||||
private final boolean isInner;
|
||||
|
||||
private final NotNullLazyValue<ReceiverParameterDescriptor> thisAsReceiverParameter;
|
||||
private final NotNullLazyValue<List<AnnotationDescriptor>> annotations;
|
||||
private final NullableLazyValue<ClassDescriptor> classObjectDescriptor;
|
||||
|
||||
@@ -126,12 +124,6 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements LazyDesc
|
||||
this.isInner = isInnerClass(modifierList);
|
||||
|
||||
StorageManager storageManager = resolveSession.getStorageManager();
|
||||
this.thisAsReceiverParameter = storageManager.createLazyValue(new Function0<ReceiverParameterDescriptor>() {
|
||||
@Override
|
||||
public ReceiverParameterDescriptor invoke() {
|
||||
return DescriptorFactory.createLazyReceiverParameterDescriptor(LazyClassDescriptor.this);
|
||||
}
|
||||
});
|
||||
this.annotations = storageManager.createLazyValue(new Function0<List<AnnotationDescriptor>>() {
|
||||
@Override
|
||||
public List<AnnotationDescriptor> invoke() {
|
||||
@@ -311,12 +303,6 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements LazyDesc
|
||||
return isInner;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public ReceiverParameterDescriptor getThisAsReceiverParameter() {
|
||||
return thisAsReceiverParameter.invoke();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public List<AnnotationDescriptor> getAnnotations() {
|
||||
|
||||
+14
-4
@@ -19,10 +19,7 @@ package org.jetbrains.jet.lang.descriptors.impl;
|
||||
import jet.Function0;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptorVisitor;
|
||||
import org.jetbrains.jet.lang.descriptors.TypeParameterDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.*;
|
||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.InnerClassesScopeWrapper;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
||||
@@ -38,6 +35,7 @@ public abstract class AbstractClassDescriptor implements ClassDescriptor {
|
||||
private final Name name;
|
||||
protected final NotNullLazyValue<JetType> defaultType;
|
||||
private final NotNullLazyValue<JetScope> unsubstitutedInnerClassesScope;
|
||||
private final NotNullLazyValue<ReceiverParameterDescriptor> thisAsReceiverParameter;
|
||||
|
||||
public AbstractClassDescriptor(@NotNull StorageManager storageManager, @NotNull Name name) {
|
||||
this.name = name;
|
||||
@@ -53,6 +51,12 @@ public abstract class AbstractClassDescriptor implements ClassDescriptor {
|
||||
return new InnerClassesScopeWrapper(getScopeForMemberLookup());
|
||||
}
|
||||
});
|
||||
this.thisAsReceiverParameter = storageManager.createLazyValue(new Function0<ReceiverParameterDescriptor>() {
|
||||
@Override
|
||||
public ReceiverParameterDescriptor invoke() {
|
||||
return new LazyClassReceiverParameterDescriptor(AbstractClassDescriptor.this);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -83,6 +87,12 @@ public abstract class AbstractClassDescriptor implements ClassDescriptor {
|
||||
return unsubstitutedInnerClassesScope.invoke();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public ReceiverParameterDescriptor getThisAsReceiverParameter() {
|
||||
return thisAsReceiverParameter.invoke();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public JetScope getMemberScope(List<? extends TypeProjection> typeArguments) {
|
||||
|
||||
@@ -16,19 +16,16 @@
|
||||
|
||||
package org.jetbrains.jet.lang.descriptors.impl;
|
||||
|
||||
import jet.Function0;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.lang.descriptors.*;
|
||||
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
|
||||
import org.jetbrains.jet.lang.resolve.DescriptorFactory;
|
||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
||||
import org.jetbrains.jet.lang.types.JetType;
|
||||
import org.jetbrains.jet.lang.types.TypeConstructor;
|
||||
import org.jetbrains.jet.lang.types.TypeConstructorImpl;
|
||||
import org.jetbrains.jet.storage.LockBasedStorageManager;
|
||||
import org.jetbrains.jet.storage.NotNullLazyValue;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
@@ -38,7 +35,6 @@ import java.util.Set;
|
||||
public class ClassDescriptorImpl extends ClassDescriptorBase {
|
||||
private final Modality modality;
|
||||
private final TypeConstructor typeConstructor;
|
||||
private final NotNullLazyValue<ReceiverParameterDescriptor> thisAsReceiverParameter;
|
||||
|
||||
private JetScope scopeForMemberLookup;
|
||||
private Set<ConstructorDescriptor> constructors;
|
||||
@@ -55,13 +51,6 @@ public class ClassDescriptorImpl extends ClassDescriptorBase {
|
||||
|
||||
this.typeConstructor = new TypeConstructorImpl(this, Collections.<AnnotationDescriptor>emptyList(), false, getName().asString(),
|
||||
Collections.<TypeParameterDescriptor>emptyList(), supertypes);
|
||||
|
||||
this.thisAsReceiverParameter = LockBasedStorageManager.NO_LOCKS.createLazyValue(new Function0<ReceiverParameterDescriptor>() {
|
||||
@Override
|
||||
public ReceiverParameterDescriptor invoke() {
|
||||
return DescriptorFactory.createLazyReceiverParameterDescriptor(ClassDescriptorImpl.this);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public final void initialize(
|
||||
@@ -136,12 +125,6 @@ public class ClassDescriptorImpl extends ClassDescriptorBase {
|
||||
return false;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public ReceiverParameterDescriptor getThisAsReceiverParameter() {
|
||||
return thisAsReceiverParameter.invoke();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "class " + getName();
|
||||
|
||||
+57
@@ -0,0 +1,57 @@
|
||||
/*
|
||||
* Copyright 2010-2013 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.jetbrains.jet.lang.descriptors.impl;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.receivers.ClassReceiver;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverValue;
|
||||
import org.jetbrains.jet.lang.types.JetType;
|
||||
|
||||
public class LazyClassReceiverParameterDescriptor extends AbstractReceiverParameterDescriptor {
|
||||
private final ClassDescriptor descriptor;
|
||||
private final ClassReceiver receiverValue;
|
||||
|
||||
public LazyClassReceiverParameterDescriptor(@NotNull ClassDescriptor descriptor) {
|
||||
this.descriptor = descriptor;
|
||||
this.receiverValue = new ClassReceiver(descriptor);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public JetType getType() {
|
||||
return descriptor.getDefaultType();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public ReceiverValue getValue() {
|
||||
return receiverValue;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public DeclarationDescriptor getContainingDeclaration() {
|
||||
return descriptor;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "class " + descriptor.getName() + "::this";
|
||||
}
|
||||
}
|
||||
-10
@@ -21,7 +21,6 @@ import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.lang.descriptors.*;
|
||||
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
|
||||
import org.jetbrains.jet.lang.resolve.DescriptorFactory;
|
||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.WritableScope;
|
||||
@@ -171,15 +170,6 @@ public abstract class MutableClassDescriptorLite extends ClassDescriptorBase {
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public ReceiverParameterDescriptor getThisAsReceiverParameter() {
|
||||
if (implicitReceiver == null) {
|
||||
implicitReceiver = DescriptorFactory.createLazyReceiverParameterDescriptor(this);
|
||||
}
|
||||
return implicitReceiver;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
try {
|
||||
|
||||
@@ -22,9 +22,7 @@ import org.jetbrains.jet.lang.descriptors.*;
|
||||
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.impl.*;
|
||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.receivers.ClassReceiver;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.receivers.ExtensionReceiver;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverValue;
|
||||
import org.jetbrains.jet.lang.types.JetType;
|
||||
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
|
||||
|
||||
@@ -124,38 +122,4 @@ public class DescriptorFactory {
|
||||
? NO_RECEIVER_PARAMETER
|
||||
: new ReceiverParameterDescriptorImpl(owner, receiverParameterType, new ExtensionReceiver(owner, receiverParameterType));
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static ReceiverParameterDescriptor createLazyReceiverParameterDescriptor(@NotNull final ClassDescriptor classDescriptor) {
|
||||
return new AbstractReceiverParameterDescriptor() {
|
||||
private ClassReceiver value;
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public JetType getType() {
|
||||
// This must be lazy, thus the inner class
|
||||
return classDescriptor.getDefaultType();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public ReceiverValue getValue() {
|
||||
if (value == null) {
|
||||
value = new ClassReceiver(classDescriptor);
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public DeclarationDescriptor getContainingDeclaration() {
|
||||
return classDescriptor;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "class " + classDescriptor.getName() + "::this";
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user