lateinit modifier on property
This commit is contained in:
+1
-1
@@ -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;
|
||||||
|
|||||||
+2
-1
@@ -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);
|
||||||
|
|||||||
+1
-1
@@ -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,
|
||||||
|
|||||||
+4
-2
@@ -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(),
|
||||||
|
|||||||
+5
-1
@@ -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
@@ -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
@@ -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
|
||||||
|
|||||||
+1
-1
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
+15
-4
@@ -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)
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+4
-1
@@ -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())
|
||||||
|
|||||||
+5
-3
@@ -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
|
||||||
|
|||||||
@@ -38,4 +38,5 @@ class A {
|
|||||||
/*why?*/
|
/*why?*/
|
||||||
// EXIST: companion object
|
// EXIST: companion object
|
||||||
// EXIST: sealed
|
// EXIST: sealed
|
||||||
|
// EXIST: lateinit
|
||||||
// NOTHING_ELSE
|
// NOTHING_ELSE
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -28,5 +28,6 @@
|
|||||||
/*why?*/
|
/*why?*/
|
||||||
// EXIST: companion object
|
// EXIST: companion object
|
||||||
// EXIST: sealed
|
// EXIST: sealed
|
||||||
|
// EXIST: lateinit
|
||||||
/*TODO*/
|
/*TODO*/
|
||||||
// NOTHING_ELSE
|
// NOTHING_ELSE
|
||||||
|
|||||||
Reference in New Issue
Block a user