lateinit modifier on property

This commit is contained in:
Yan Zhulanow
2015-09-02 21:04:28 +03:00
parent 48bccab31e
commit add13cae82
32 changed files with 129 additions and 24 deletions
@@ -48,7 +48,7 @@ public class AccessorForPropertyDescriptor extends PropertyDescriptorImpl implem
) { ) {
super(containingDeclaration, null, Annotations.EMPTY, Modality.FINAL, Visibilities.LOCAL, super(containingDeclaration, null, Annotations.EMPTY, Modality.FINAL, Visibilities.LOCAL,
original.isVar(), Name.identifier("access$" + getIndexedAccessorSuffix(original, index)), original.isVar(), Name.identifier("access$" + getIndexedAccessorSuffix(original, index)),
Kind.DECLARATION, SourceElement.NO_SOURCE); Kind.DECLARATION, SourceElement.NO_SOURCE, false);
this.calleeDescriptor = original; this.calleeDescriptor = original;
this.accessorIndex = index; this.accessorIndex = index;
@@ -260,7 +260,8 @@ class JavaSyntheticPropertiesScope(storageManager: StorageManager) : JetScopeImp
name: Name, name: Name,
kind: CallableMemberDescriptor.Kind, kind: CallableMemberDescriptor.Kind,
source: SourceElement source: SourceElement
) : SyntheticJavaPropertyDescriptor, PropertyDescriptorImpl(containingDeclaration, original, annotations, modality, visibility, isVar, name, kind, source) { ) : SyntheticJavaPropertyDescriptor, PropertyDescriptorImpl(containingDeclaration, original, annotations,
modality, visibility, isVar, name, kind, source, false) {
override var getMethod: FunctionDescriptor by Delegates.notNull() override var getMethod: FunctionDescriptor by Delegates.notNull()
private set private set
@@ -166,6 +166,8 @@ public interface JetTokens {
JetKeywordToken FINALLY_KEYWORD = JetKeywordToken.softKeyword("finally"); JetKeywordToken FINALLY_KEYWORD = JetKeywordToken.softKeyword("finally");
JetModifierKeywordToken FINAL_KEYWORD = JetModifierKeywordToken.softKeywordModifier("final"); JetModifierKeywordToken FINAL_KEYWORD = JetModifierKeywordToken.softKeywordModifier("final");
JetModifierKeywordToken LATE_INIT_KEYWORD = JetModifierKeywordToken.softKeywordModifier("lateinit");
TokenSet KEYWORDS = TokenSet.create(PACKAGE_KEYWORD, AS_KEYWORD, TYPE_ALIAS_KEYWORD, CLASS_KEYWORD, TRAIT_KEYWORD, INTERFACE_KEYWORD, TokenSet KEYWORDS = TokenSet.create(PACKAGE_KEYWORD, AS_KEYWORD, TYPE_ALIAS_KEYWORD, CLASS_KEYWORD, TRAIT_KEYWORD, INTERFACE_KEYWORD,
THIS_KEYWORD, SUPER_KEYWORD, VAL_KEYWORD, VAR_KEYWORD, FUN_KEYWORD, FOR_KEYWORD, THIS_KEYWORD, SUPER_KEYWORD, VAL_KEYWORD, VAR_KEYWORD, FUN_KEYWORD, FOR_KEYWORD,
NULL_KEYWORD, NULL_KEYWORD,
@@ -180,7 +182,8 @@ public interface JetTokens {
OVERRIDE_KEYWORD, PRIVATE_KEYWORD, PUBLIC_KEYWORD, INTERNAL_KEYWORD, PROTECTED_KEYWORD, OVERRIDE_KEYWORD, PRIVATE_KEYWORD, PUBLIC_KEYWORD, INTERNAL_KEYWORD, PROTECTED_KEYWORD,
CATCH_KEYWORD, FINALLY_KEYWORD, OUT_KEYWORD, FINAL_KEYWORD, VARARG_KEYWORD, REIFIED_KEYWORD, CATCH_KEYWORD, FINALLY_KEYWORD, OUT_KEYWORD, FINAL_KEYWORD, VARARG_KEYWORD, REIFIED_KEYWORD,
DYNAMIC_KEYWORD, COMPANION_KEYWORD, CONSTRUCTOR_KEYWORD, INIT_KEYWORD, SEALED_KEYWORD, DYNAMIC_KEYWORD, COMPANION_KEYWORD, CONSTRUCTOR_KEYWORD, INIT_KEYWORD, SEALED_KEYWORD,
FIELD_KEYWORD, PROPERTY_KEYWORD, RECEIVER_KEYWORD, PARAM_KEYWORD, SPARAM_KEYWORD FIELD_KEYWORD, PROPERTY_KEYWORD, RECEIVER_KEYWORD, PARAM_KEYWORD, SPARAM_KEYWORD,
LATE_INIT_KEYWORD
); );
/* /*
@@ -192,7 +195,7 @@ public interface JetTokens {
new JetModifierKeywordToken[] { new JetModifierKeywordToken[] {
ABSTRACT_KEYWORD, ENUM_KEYWORD, OPEN_KEYWORD, INNER_KEYWORD, OVERRIDE_KEYWORD, PRIVATE_KEYWORD, ABSTRACT_KEYWORD, ENUM_KEYWORD, OPEN_KEYWORD, INNER_KEYWORD, OVERRIDE_KEYWORD, PRIVATE_KEYWORD,
PUBLIC_KEYWORD, INTERNAL_KEYWORD, PROTECTED_KEYWORD, OUT_KEYWORD, IN_KEYWORD, FINAL_KEYWORD, VARARG_KEYWORD, PUBLIC_KEYWORD, INTERNAL_KEYWORD, PROTECTED_KEYWORD, OUT_KEYWORD, IN_KEYWORD, FINAL_KEYWORD, VARARG_KEYWORD,
REIFIED_KEYWORD, COMPANION_KEYWORD, SEALED_KEYWORD REIFIED_KEYWORD, COMPANION_KEYWORD, SEALED_KEYWORD, LATE_INIT_KEYWORD
}; };
TokenSet MODIFIER_KEYWORDS = TokenSet.create(MODIFIER_KEYWORDS_ARRAY); TokenSet MODIFIER_KEYWORDS = TokenSet.create(MODIFIER_KEYWORDS_ARRAY);
@@ -36,7 +36,7 @@ import org.jetbrains.kotlin.psi.stubs.impl.KotlinFileStubImpl;
import java.io.IOException; import java.io.IOException;
public class JetFileElementType extends IStubFileElementType<KotlinFileStub> { public class JetFileElementType extends IStubFileElementType<KotlinFileStub> {
public static final int STUB_VERSION = 52; public static final int STUB_VERSION = 53;
private static final String NAME = "kotlin.FILE"; private static final String NAME = "kotlin.FILE";
@@ -641,7 +641,8 @@ public class DescriptorResolver {
variable.isVar(), variable.isVar(),
JetPsiUtil.safeName(variable.getName()), JetPsiUtil.safeName(variable.getName()),
CallableMemberDescriptor.Kind.DECLARATION, CallableMemberDescriptor.Kind.DECLARATION,
toSourceElement(variable) toSourceElement(variable),
false
); );
// For a local variable the type must not be deferred // For a local variable the type must not be deferred
type = getVariableType(propertyDescriptor, scope, variable, dataFlowInfo, false, trace); type = getVariableType(propertyDescriptor, scope, variable, dataFlowInfo, false, trace);
@@ -738,7 +739,8 @@ public class DescriptorResolver {
isVar, isVar,
JetPsiUtil.safeName(property.getName()), JetPsiUtil.safeName(property.getName()),
CallableMemberDescriptor.Kind.DECLARATION, CallableMemberDescriptor.Kind.DECLARATION,
toSourceElement(property) toSourceElement(property),
modifierList != null && modifierList.hasModifier(JetTokens.LATE_INIT_KEYWORD)
); );
wrapper.setProperty(propertyDescriptor); wrapper.setProperty(propertyDescriptor);
@@ -1112,7 +1114,8 @@ public class DescriptorResolver {
isMutable, isMutable,
name, name,
CallableMemberDescriptor.Kind.DECLARATION, CallableMemberDescriptor.Kind.DECLARATION,
toSourceElement(parameter) toSourceElement(parameter),
false
); );
propertyWrapper.setProperty(propertyDescriptor); propertyWrapper.setProperty(propertyDescriptor);
propertyDescriptor.setType(type, Collections.<TypeParameterDescriptor>emptyList(), propertyDescriptor.setType(type, Collections.<TypeParameterDescriptor>emptyList(),
@@ -56,7 +56,8 @@ public object ModifierCheckerCore {
OUT_KEYWORD to EnumSet.of(TYPE_PARAMETER, TYPE_PROJECTION), OUT_KEYWORD to EnumSet.of(TYPE_PARAMETER, TYPE_PROJECTION),
REIFIED_KEYWORD to EnumSet.of(TYPE_PARAMETER), REIFIED_KEYWORD to EnumSet.of(TYPE_PARAMETER),
VARARG_KEYWORD to EnumSet.of(VALUE_PARAMETER, PROPERTY_PARAMETER), VARARG_KEYWORD to EnumSet.of(VALUE_PARAMETER, PROPERTY_PARAMETER),
COMPANION_KEYWORD to EnumSet.of(OBJECT) COMPANION_KEYWORD to EnumSet.of(OBJECT),
LATE_INIT_KEYWORD to EnumSet.of(MEMBER_PROPERTY)
) )
// NOTE: redundant targets must be possible! // NOTE: redundant targets must be possible!
@@ -94,7 +94,8 @@ object DynamicCallableDescriptors {
true, true,
name, name,
CallableMemberDescriptor.Kind.DECLARATION, CallableMemberDescriptor.Kind.DECLARATION,
SourceElement.NO_SOURCE SourceElement.NO_SOURCE,
false
) )
propertyDescriptor.setType( propertyDescriptor.setType(
DynamicType, DynamicType,
@@ -92,7 +92,8 @@ public class LazyScriptClassMemberScope protected constructor(
false, false,
Name.identifier(ScriptDescriptor.LAST_EXPRESSION_VALUE_FIELD_NAME), Name.identifier(ScriptDescriptor.LAST_EXPRESSION_VALUE_FIELD_NAME),
CallableMemberDescriptor.Kind.DECLARATION, CallableMemberDescriptor.Kind.DECLARATION,
SourceElement.NO_SOURCE SourceElement.NO_SOURCE,
false
) )
val returnType = scriptDescriptor.getScriptCodeDescriptor().getReturnType() val returnType = scriptDescriptor.getScriptCodeDescriptor().getReturnType()
@@ -132,7 +133,8 @@ public class LazyScriptClassMemberScope protected constructor(
false, false,
parameter.getName(), parameter.getName(),
CallableMemberDescriptor.Kind.DECLARATION, CallableMemberDescriptor.Kind.DECLARATION,
SourceElement.NO_SOURCE SourceElement.NO_SOURCE,
false
) )
propertyDescriptor.setType( propertyDescriptor.setType(
parameter.getType(), parameter.getType(),
@@ -154,8 +154,11 @@ public class DescriptorSerializer {
boolean hasGetter = false; boolean hasGetter = false;
boolean hasSetter = false; boolean hasSetter = false;
boolean hasConstant = false; boolean hasConstant = false;
boolean lateInit = false;
if (descriptor instanceof PropertyDescriptor) { if (descriptor instanceof PropertyDescriptor) {
PropertyDescriptor propertyDescriptor = (PropertyDescriptor) descriptor; PropertyDescriptor propertyDescriptor = (PropertyDescriptor) descriptor;
lateInit = propertyDescriptor.isLateInit();
int propertyFlags = Flags.getAccessorFlags( int propertyFlags = Flags.getAccessorFlags(
hasAnnotations(propertyDescriptor), hasAnnotations(propertyDescriptor),
@@ -204,7 +207,8 @@ public class DescriptorSerializer {
callableKind(descriptor), callableKind(descriptor),
hasGetter, hasGetter,
hasSetter, hasSetter,
hasConstant hasConstant,
lateInit
)); ));
for (TypeParameterDescriptor typeParameterDescriptor : descriptor.getTypeParameters()) { for (TypeParameterDescriptor typeParameterDescriptor : descriptor.getTypeParameters()) {
+4
View File
@@ -59,6 +59,7 @@ ref
val receiver val receiver
val param val param
val sparam val sparam
val lateinit
get() = a get() = a
set(S : s) {} set(S : s) {}
@@ -92,6 +93,7 @@ ref
fun receiver () : receiver fun receiver () : receiver
fun param () : param fun param () : param
fun sparam () : sparam fun sparam () : sparam
fun lateinit () : lateinit
fun test( fun test(
abstract : t, abstract : t,
@@ -122,6 +124,7 @@ ref
receiver : t, receiver : t,
param : t, param : t,
sparam : t, sparam : t,
lateinit : t,
public protected private internal abstract public protected private internal abstract
open open
enum enum
@@ -169,6 +172,7 @@ class F(val foo : bar,
receiver : t, receiver : t,
param : t, param : t,
sparam : t, sparam : t,
lateinit : t,
public protected private internal abstract public protected private internal abstract
open open
enum enum
+43
View File
@@ -320,6 +320,11 @@ JetFile: SoftKeywords.kt
PsiElement(val)('val') PsiElement(val)('val')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('sparam') PsiElement(IDENTIFIER)('sparam')
PsiWhiteSpace('\n ')
PROPERTY
PsiElement(val)('val')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('lateinit')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
PROPERTY_ACCESSOR PROPERTY_ACCESSOR
PsiElement(get)('get') PsiElement(get)('get')
@@ -806,6 +811,22 @@ JetFile: SoftKeywords.kt
USER_TYPE USER_TYPE
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('sparam') PsiElement(IDENTIFIER)('sparam')
PsiWhiteSpace('\n ')
FUN
PsiElement(fun)('fun')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('lateinit')
PsiWhiteSpace(' ')
VALUE_PARAMETER_LIST
PsiElement(LPAR)('(')
PsiElement(RPAR)(')')
PsiWhiteSpace(' ')
PsiElement(COLON)(':')
PsiWhiteSpace(' ')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('lateinit')
PsiWhiteSpace('\n\n ') PsiWhiteSpace('\n\n ')
FUN FUN
PsiElement(fun)('fun') PsiElement(fun)('fun')
@@ -1121,6 +1142,17 @@ JetFile: SoftKeywords.kt
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('t') PsiElement(IDENTIFIER)('t')
PsiElement(COMMA)(',') PsiElement(COMMA)(',')
PsiWhiteSpace('\n ')
VALUE_PARAMETER
PsiElement(IDENTIFIER)('lateinit')
PsiWhiteSpace(' ')
PsiElement(COLON)(':')
PsiWhiteSpace(' ')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('t')
PsiElement(COMMA)(',')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
VALUE_PARAMETER VALUE_PARAMETER
MODIFIER_LIST MODIFIER_LIST
@@ -1501,6 +1533,17 @@ JetFile: SoftKeywords.kt
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('t') PsiElement(IDENTIFIER)('t')
PsiElement(COMMA)(',') PsiElement(COMMA)(',')
PsiWhiteSpace('\n ')
VALUE_PARAMETER
PsiElement(IDENTIFIER)('lateinit')
PsiWhiteSpace(' ')
PsiElement(COLON)(':')
PsiWhiteSpace(' ')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('t')
PsiElement(COMMA)(',')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
VALUE_PARAMETER VALUE_PARAMETER
MODIFIER_LIST MODIFIER_LIST
@@ -36,7 +36,7 @@ public class JavaPropertyDescriptor extends PropertyDescriptorImpl implements Ja
@NotNull SourceElement source, @NotNull SourceElement source,
@Nullable PropertyDescriptor original @Nullable PropertyDescriptor original
) { ) {
super(containingDeclaration, original, annotations, Modality.FINAL, visibility, isVar, name, Kind.DECLARATION, source); super(containingDeclaration, original, annotations, Modality.FINAL, visibility, isVar, name, Kind.DECLARATION, source, false);
} }
@Override @Override
@@ -53,4 +53,6 @@ public interface PropertyDescriptor extends VariableDescriptor, CallableMemberDe
@Override @Override
PropertyDescriptor substitute(@NotNull TypeSubstitutor substitutor); PropertyDescriptor substitute(@NotNull TypeSubstitutor substitutor);
boolean isLateInit();
} }
@@ -38,6 +38,7 @@ public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImp
private final Set<PropertyDescriptor> overriddenProperties = new LinkedHashSet<PropertyDescriptor>(); // LinkedHashSet is essential here private final Set<PropertyDescriptor> overriddenProperties = new LinkedHashSet<PropertyDescriptor>(); // LinkedHashSet is essential here
private final PropertyDescriptor original; private final PropertyDescriptor original;
private final Kind kind; private final Kind kind;
private final boolean lateInit;
private ReceiverParameterDescriptor dispatchReceiverParameter; private ReceiverParameterDescriptor dispatchReceiverParameter;
private ReceiverParameterDescriptor extensionReceiverParameter; private ReceiverParameterDescriptor extensionReceiverParameter;
@@ -55,13 +56,15 @@ public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImp
boolean isVar, boolean isVar,
@NotNull Name name, @NotNull Name name,
@NotNull Kind kind, @NotNull Kind kind,
@NotNull SourceElement source @NotNull SourceElement source,
boolean lateInit
) { ) {
super(containingDeclaration, annotations, name, null, isVar, source); super(containingDeclaration, annotations, name, null, isVar, source);
this.modality = modality; this.modality = modality;
this.visibility = visibility; this.visibility = visibility;
this.original = original == null ? this : original; this.original = original == null ? this : original;
this.kind = kind; this.kind = kind;
this.lateInit = lateInit;
} }
@NotNull @NotNull
@@ -73,9 +76,11 @@ public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImp
boolean isVar, boolean isVar,
@NotNull Name name, @NotNull Name name,
@NotNull Kind kind, @NotNull Kind kind,
@NotNull SourceElement source @NotNull SourceElement source,
boolean lateInit
) { ) {
return new PropertyDescriptorImpl(containingDeclaration, null, annotations, modality, visibility, isVar, name, kind, source); return new PropertyDescriptorImpl(containingDeclaration, null, annotations,
modality, visibility, isVar, name, kind, source, lateInit);
} }
public void setType( public void setType(
@@ -168,6 +173,11 @@ public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImp
return setterProjectedOut; return setterProjectedOut;
} }
@Override
public boolean isLateInit() {
return lateInit;
}
@Override @Override
@NotNull @NotNull
public List<PropertyAccessorDescriptor> getAccessors() { public List<PropertyAccessorDescriptor> getAccessors() {
@@ -288,7 +298,8 @@ public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImp
@NotNull Kind kind @NotNull Kind kind
) { ) {
return new PropertyDescriptorImpl(newOwner, original, return new PropertyDescriptorImpl(newOwner, original,
getAnnotations(), newModality, newVisibility, isVar(), getName(), kind, SourceElement.NO_SOURCE); getAnnotations(), newModality, newVisibility,
isVar(), getName(), kind, SourceElement.NO_SOURCE, isLateInit());
} }
@NotNull @NotNull
@@ -458,6 +458,12 @@ internal class DescriptorRendererImpl(
} }
} }
private fun renderLateInit(propertyDescriptor: PropertyDescriptor, builder: StringBuilder) {
if (propertyDescriptor.isLateInit) {
builder.append("lateinit ")
}
}
override fun render(declarationDescriptor: DeclarationDescriptor): String { override fun render(declarationDescriptor: DeclarationDescriptor): String {
return StringBuilder { return StringBuilder {
declarationDescriptor.accept(RenderDeclarationDescriptorVisitor(), this) declarationDescriptor.accept(RenderDeclarationDescriptorVisitor(), this)
@@ -706,6 +712,7 @@ internal class DescriptorRendererImpl(
renderVisibility(property.getVisibility(), builder) renderVisibility(property.getVisibility(), builder)
renderModalityForCallable(property, builder) renderModalityForCallable(property, builder)
renderOverride(property, builder) renderOverride(property, builder)
renderLateInit(property, builder)
renderMemberKind(property, builder) renderMemberKind(property, builder)
renderValVarPrefix(property, builder) renderValVarPrefix(property, builder)
renderTypeParameters(property.getTypeParameters(), builder, true) renderTypeParameters(property.getTypeParameters(), builder, true)
@@ -400,7 +400,8 @@ public class ErrorUtils {
true, true,
Name.special("<ERROR PROPERTY>"), Name.special("<ERROR PROPERTY>"),
CallableMemberDescriptor.Kind.DECLARATION, CallableMemberDescriptor.Kind.DECLARATION,
SourceElement.NO_SOURCE SourceElement.NO_SOURCE,
/*lateInit =*/ false
); );
descriptor.setType(ERROR_PROPERTY_TYPE, descriptor.setType(ERROR_PROPERTY_TYPE,
Collections.<TypeParameterDescriptor>emptyList(), Collections.<TypeParameterDescriptor>emptyList(),
@@ -250,6 +250,7 @@ message Callable {
hasGetter hasGetter
hasSetter hasSetter
hasConstant hasConstant
lateinit
*/ */
optional int32 flags = 1; optional int32 flags = 1;
@@ -48,6 +48,8 @@ public class Flags {
public static final FlagField<Boolean> HAS_SETTER = FlagField.booleanAfter(HAS_GETTER); public static final FlagField<Boolean> HAS_SETTER = FlagField.booleanAfter(HAS_GETTER);
public static final FlagField<Boolean> HAS_CONSTANT = FlagField.booleanAfter(HAS_SETTER); public static final FlagField<Boolean> HAS_CONSTANT = FlagField.booleanAfter(HAS_SETTER);
public static final FlagField<Boolean> LATE_INIT = FlagField.booleanAfter(HAS_CONSTANT);
// Parameters // Parameters
public static final FlagField<Boolean> DECLARES_DEFAULT_VALUE = FlagField.booleanAfter(HAS_ANNOTATIONS); public static final FlagField<Boolean> DECLARES_DEFAULT_VALUE = FlagField.booleanAfter(HAS_ANNOTATIONS);
@@ -112,7 +114,8 @@ public class Flags {
@NotNull ProtoBuf.Callable.CallableKind callableKind, @NotNull ProtoBuf.Callable.CallableKind callableKind,
boolean hasGetter, boolean hasGetter,
boolean hasSetter, boolean hasSetter,
boolean hasConstant boolean hasConstant,
boolean lateInit
) { ) {
return HAS_ANNOTATIONS.toFlags(hasAnnotations) return HAS_ANNOTATIONS.toFlags(hasAnnotations)
| MODALITY.toFlags(modality(modality)) | MODALITY.toFlags(modality(modality))
@@ -122,6 +125,7 @@ public class Flags {
| HAS_GETTER.toFlags(hasGetter) | HAS_GETTER.toFlags(hasGetter)
| HAS_SETTER.toFlags(hasSetter) | HAS_SETTER.toFlags(hasSetter)
| HAS_CONSTANT.toFlags(hasConstant) | HAS_CONSTANT.toFlags(hasConstant)
| LATE_INIT.toFlags(lateInit)
; ;
} }
@@ -45,6 +45,8 @@ public class MemberDeserializer(private val c: DeserializationContext) {
private fun loadProperty(proto: Callable): PropertyDescriptor { private fun loadProperty(proto: Callable): PropertyDescriptor {
val flags = proto.getFlags() val flags = proto.getFlags()
val lateInit = Flags.LATE_INIT.get(flags)
val property = DeserializedPropertyDescriptor( val property = DeserializedPropertyDescriptor(
c.containingDeclaration, null, c.containingDeclaration, null,
getAnnotations(proto, flags, AnnotatedCallableKind.PROPERTY), getAnnotations(proto, flags, AnnotatedCallableKind.PROPERTY),
@@ -54,7 +56,8 @@ public class MemberDeserializer(private val c: DeserializationContext) {
c.nameResolver.getName(proto.getName()), c.nameResolver.getName(proto.getName()),
memberKind(Flags.MEMBER_KIND.get(flags)), memberKind(Flags.MEMBER_KIND.get(flags)),
proto, proto,
c.nameResolver c.nameResolver,
Flags.LATE_INIT.get(flags)
) )
val local = c.childContext(property, proto.getTypeParameterList()) val local = c.childContext(property, proto.getTypeParameterList())
@@ -38,9 +38,11 @@ public class DeserializedPropertyDescriptor(
name: Name, name: Name,
kind: Kind, kind: Kind,
override public val proto: ProtoBuf.Callable, override public val proto: ProtoBuf.Callable,
override public val nameResolver: NameResolver override public val nameResolver: NameResolver,
lateInit: Boolean
) : DeserializedCallableMemberDescriptor, ) : DeserializedCallableMemberDescriptor,
PropertyDescriptorImpl(containingDeclaration, original, annotations, modality, visibility, isVar, name, kind, SourceElement.NO_SOURCE) { PropertyDescriptorImpl(containingDeclaration, original, annotations,
modality, visibility, isVar, name, kind, SourceElement.NO_SOURCE, lateInit) {
override fun createSubstitutedCopy( override fun createSubstitutedCopy(
newOwner: DeclarationDescriptor, newOwner: DeclarationDescriptor,
@@ -50,6 +52,6 @@ public class DeserializedPropertyDescriptor(
kind: Kind kind: Kind
): PropertyDescriptorImpl { ): PropertyDescriptorImpl {
return DeserializedPropertyDescriptor( return DeserializedPropertyDescriptor(
newOwner, original, getAnnotations(), newModality, newVisibility, isVar(), getName(), kind, proto, nameResolver) newOwner, original, annotations, newModality, newVisibility, isVar, name, kind, proto, nameResolver, isLateInit)
} }
} }
@@ -35,4 +35,5 @@ class MouseMovedEventArgs
/*why?*/ /*why?*/
// EXIST: companion object // EXIST: companion object
// EXIST: sealed // EXIST: sealed
// EXIST: lateinit
// NOTHING_ELSE // NOTHING_ELSE
@@ -38,5 +38,6 @@ class B {
/*why?*/ /*why?*/
// EXIST: companion object // EXIST: companion object
// EXIST: sealed // EXIST: sealed
// EXIST: lateinit
/*TODO*/ /*TODO*/
// NOTHING_ELSE // NOTHING_ELSE
+1
View File
@@ -38,4 +38,5 @@ class A {
/*why?*/ /*why?*/
// EXIST: companion object // EXIST: companion object
// EXIST: sealed // EXIST: sealed
// EXIST: lateinit
// NOTHING_ELSE // NOTHING_ELSE
+1
View File
@@ -23,4 +23,5 @@
// EXIST: {"lookupString":"val","itemText":"val","attributes":"bold"} // EXIST: {"lookupString":"val","itemText":"val","attributes":"bold"}
// EXIST: {"lookupString":"var","itemText":"var","attributes":"bold"} // EXIST: {"lookupString":"var","itemText":"var","attributes":"bold"}
// EXIST: {"lookupString":"vararg","itemText":"vararg","attributes":"bold"} // EXIST: {"lookupString":"vararg","itemText":"vararg","attributes":"bold"}
// EXIST: {"lookupString":"lateinit","itemText":"lateinit","attributes":"bold"}
// NOTHING_ELSE // NOTHING_ELSE
@@ -38,5 +38,6 @@ var a : Int
/*why?*/ /*why?*/
// EXIST: companion object // EXIST: companion object
// EXIST: sealed // EXIST: sealed
// EXIST: lateinit
/*TODO*/ /*TODO*/
// NOTHING_ELSE // NOTHING_ELSE
@@ -36,4 +36,5 @@ public class Test {
/*why?*/ /*why?*/
// EXIST: companion object // EXIST: companion object
// EXIST: sealed // EXIST: sealed
// EXIST: lateinit
// NOTHING_ELSE // NOTHING_ELSE
@@ -30,4 +30,5 @@ class TestClass {
// EXIST: init // EXIST: init
// EXIST: companion object // EXIST: companion object
// EXIST: sealed // EXIST: sealed
// EXIST: lateinit
// NOTHING_ELSE // NOTHING_ELSE
@@ -29,5 +29,6 @@ package Test
/*why?*/ /*why?*/
// EXIST: companion object // EXIST: companion object
// EXIST: sealed // EXIST: sealed
// EXIST: lateinit
/*TODO*/ /*TODO*/
// NOTHING_ELSE // NOTHING_ELSE
@@ -34,4 +34,5 @@ class Some {
// EXIST: init // EXIST: init
// EXIST: companion object // EXIST: companion object
// EXIST: sealed // EXIST: sealed
// EXIST: lateinit
// NOTHING_ELSE // NOTHING_ELSE
@@ -34,4 +34,5 @@ class Some {
// EXIST: init // EXIST: init
// EXIST: companion object // EXIST: companion object
// EXIST: sealed // EXIST: sealed
// EXIST: lateinit
// NOTHING_ELSE // NOTHING_ELSE
@@ -36,4 +36,5 @@ class Some {
// EXIST: init // EXIST: init
// EXIST: companion object // EXIST: companion object
// EXIST: sealed // EXIST: sealed
// EXIST: lateinit
// NOTHING_ELSE // NOTHING_ELSE
+1
View File
@@ -28,5 +28,6 @@
/*why?*/ /*why?*/
// EXIST: companion object // EXIST: companion object
// EXIST: sealed // EXIST: sealed
// EXIST: lateinit
/*TODO*/ /*TODO*/
// NOTHING_ELSE // NOTHING_ELSE