Initial version of storing SourceElements in descriptors

Introduce SourceElement, JavaSourceElementFactory, DeclarationDescriptorWithSource
Implement getSource() for eager, lazy and java descriptors
This commit is contained in:
Pavel V. Talanov
2014-07-07 21:20:53 +04:00
parent e3b1639edf
commit 59e43020c3
86 changed files with 576 additions and 219 deletions
@@ -100,7 +100,7 @@ public class MemberDeserializer {
modality(Flags.MODALITY.get(getterFlags)),
visibility(Flags.VISIBILITY.get(getterFlags)),
isNotDefault, !isNotDefault,
property.getKind(), null);
property.getKind(), null, SourceElement.NO_SOURCE);
}
else {
getter = DescriptorFactory.createDefaultGetter(property);
@@ -117,7 +117,7 @@ public class MemberDeserializer {
modality(Flags.MODALITY.get(setterFlags)),
visibility(Flags.VISIBILITY.get(setterFlags)), isNotDefault,
!isNotDefault,
property.getKind(), null);
property.getKind(), null, SourceElement.NO_SOURCE);
DeserializationContextWithTypes setterLocal = local.childContext(setter, Collections.<TypeParameter>emptyList(),
Collections.<TypeParameterDescriptor>emptyList());
List<ValueParameterDescriptor> valueParameters
@@ -186,7 +186,7 @@ public class MemberDeserializer {
classDescriptor,
getAnnotations(proto, proto.getFlags(), AnnotatedCallableKind.FUNCTION),
// TODO: primary
true);
true, SourceElement.NO_SOURCE);
List<TypeParameterDescriptor> typeParameters = new ArrayList<TypeParameterDescriptor>(proto.getTypeParameterCount());
DeserializationContextWithTypes local = context.childContext(descriptor, Collections.<TypeParameter>emptyList(), typeParameters);
descriptor.initialize(
@@ -260,7 +260,8 @@ public class MemberDeserializer {
context.getNameResolver().getName(proto.getName()),
context.getTypeDeserializer().type(proto.getType()),
Flags.DECLARES_DEFAULT_VALUE.get(proto.getFlags()),
context.getTypeDeserializer().typeOrNull(proto.hasVarargElementType() ? proto.getVarargElementType() : null))
context.getTypeDeserializer().typeOrNull(proto.hasVarargElementType() ? proto.getVarargElementType() : null),
SourceElement.NO_SOURCE)
);
}
return result;
@@ -200,7 +200,7 @@ public class DeserializedClassDescriptor extends AbstractClassDescriptor impleme
ProtoBuf.Class.PrimaryConstructor constructorProto = classProto.getPrimaryConstructor();
if (!constructorProto.hasData()) {
ConstructorDescriptorImpl descriptor = DescriptorFactory.createPrimaryConstructorForObject(this);
ConstructorDescriptorImpl descriptor = DescriptorFactory.createPrimaryConstructorForObject(this, SourceElement.NO_SOURCE);
descriptor.setReturnType(getDefaultType());
return descriptor;
}
@@ -267,6 +267,12 @@ public class DeserializedClassDescriptor extends AbstractClassDescriptor impleme
return "deserialized class " + getName().toString();
}
@NotNull
@Override
public SourceElement getSource() {
return SourceElement.NO_SOURCE;
}
private class DeserializedClassTypeConstructor extends AbstractClassTypeConstructor {
private final Collection<JetType> supertypes = computeSuperTypes();
private final List<TypeParameterDescriptor> parameters;
@@ -441,7 +447,7 @@ public class DeserializedClassDescriptor extends AbstractClassDescriptor impleme
public ClassDescriptor invoke(Name name) {
if (enumEntryNames.contains(name)) {
return EnumEntrySyntheticClassDescriptor
.create(storageManager, DeserializedClassDescriptor.this, name, enumMemberNames);
.create(storageManager, DeserializedClassDescriptor.this, name, enumMemberNames, SourceElement.NO_SOURCE);
}
if (nestedClassNames.contains(name)) {
return ContextPackage.deserializeClass(context, classId.createNestedClassId(name));
@@ -26,6 +26,7 @@ import org.jetbrains.jet.descriptors.serialization.NameResolver
import org.jetbrains.jet.lang.descriptors.impl.PropertyDescriptorImpl
import org.jetbrains.jet.descriptors.serialization.ProtoBuf
import org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor.Kind
import org.jetbrains.jet.lang.descriptors.SourceElement
public class DeserializedPropertyDescriptor(
containingDeclaration: DeclarationDescriptor,
@@ -39,7 +40,7 @@ public class DeserializedPropertyDescriptor(
override public val proto: ProtoBuf.Callable,
override public val nameResolver: NameResolver
) : DeserializedCallableMemberDescriptor,
PropertyDescriptorImpl(containingDeclaration, original, annotations, modality, visibility, isVar, name, kind) {
PropertyDescriptorImpl(containingDeclaration, original, annotations, modality, visibility, isVar, name, kind, SourceElement.NO_SOURCE) {
override fun createSubstitutedCopy(
newOwner: DeclarationDescriptor,
@@ -22,6 +22,7 @@ import org.jetbrains.jet.descriptors.serialization.*;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
import org.jetbrains.jet.lang.descriptors.SimpleFunctionDescriptor;
import org.jetbrains.jet.lang.descriptors.SourceElement;
import org.jetbrains.jet.lang.descriptors.annotations.Annotations;
import org.jetbrains.jet.lang.descriptors.impl.FunctionDescriptorImpl;
import org.jetbrains.jet.lang.descriptors.impl.SimpleFunctionDescriptorImpl;
@@ -40,7 +41,7 @@ public class DeserializedSimpleFunctionDescriptor extends SimpleFunctionDescript
@NotNull Kind kind,
@NotNull ProtoBuf.Callable proto,
@NotNull NameResolver nameResolver) {
super(containingDeclaration, original, annotations, name, kind);
super(containingDeclaration, original, annotations, name, kind, SourceElement.NO_SOURCE);
this.proto = proto;
this.nameResolver = nameResolver;
}
@@ -20,12 +20,13 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.descriptors.serialization.ProtoBuf;
import org.jetbrains.jet.descriptors.serialization.TypeDeserializer;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.descriptors.SourceElement;
import org.jetbrains.jet.lang.descriptors.impl.AbstractLazyTypeParameterDescriptor;
import org.jetbrains.jet.storage.StorageManager;
import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.lang.types.JetType;
import org.jetbrains.jet.lang.types.Variance;
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
import org.jetbrains.jet.storage.StorageManager;
import java.util.LinkedHashSet;
import java.util.Set;
@@ -45,7 +46,7 @@ public class DeserializedTypeParameterDescriptor extends AbstractLazyTypeParamet
boolean isReified,
int index
) {
super(storageManager, containingDeclaration, name, variance, isReified, index);
super(storageManager, containingDeclaration, name, variance, isReified, index, SourceElement.NO_SOURCE);
this.proto = proto;
this.typeDeserializer = typeDeserializer;
}