Introduce PropertyDescriptor.isDelegated, write new flag to metadata

#KT-8384 In Progress
This commit is contained in:
Alexander Udalov
2017-01-17 20:08:19 +03:00
parent 76fc3b40d5
commit f1cd2ee6fd
24 changed files with 111 additions and 43 deletions
@@ -83,6 +83,9 @@ public class LocalVariableDescriptor extends VariableDescriptorWithInitializerIm
return setter;
}
// This override is not deprecated because local variables can only come from sources,
// and we can be sure that they won't be recompiled independently
@Override
public boolean isDelegated() {
return isDelegated;
}
@@ -833,7 +833,8 @@ public class DescriptorResolver {
modifierList != null && modifierList.hasModifier(KtTokens.HEADER_KEYWORD) ||
containingDeclaration instanceof ClassDescriptor && ((ClassDescriptor) containingDeclaration).isHeader(),
modifierList != null && modifierList.hasModifier(KtTokens.IMPL_KEYWORD),
modifierList != null && modifierList.hasModifier(KtTokens.EXTERNAL_KEYWORD)
modifierList != null && modifierList.hasModifier(KtTokens.EXTERNAL_KEYWORD),
property.hasDelegate()
);
wrapper.setDescriptor(propertyDescriptor);
@@ -1161,11 +1162,12 @@ public class DescriptorResolver {
name,
CallableMemberDescriptor.Kind.DECLARATION,
KotlinSourceElementKt.toSourceElement(parameter),
/* lateInit = */ false,
/* isConst = */ false,
/* isHeader = */ classDescriptor.isHeader(),
/* isImpl = */ modifierList != null && modifierList.hasModifier(KtTokens.IMPL_KEYWORD),
/* isExternal = */ false
false,
false,
classDescriptor.isHeader(),
modifierList != null && modifierList.hasModifier(KtTokens.IMPL_KEYWORD),
false,
false
);
propertyWrapper.setDescriptor(propertyDescriptor);
propertyDescriptor.setType(type, Collections.<TypeParameterDescriptor>emptyList(),
@@ -148,7 +148,8 @@ class LocalVariableResolver(
/* isConst = */ false,
/* isHeader = */ false,
/* isImpl = */ false,
/* isExternal = */ false
/* isExternal = */ false,
variable is KtProperty && variable.hasDelegate()
)
// For a local variable the type must not be deferred
type = variableTypeAndInitializerResolver.resolveType(propertyDescriptor, scope, variable, dataFlowInfo, trace, local = true)
@@ -100,7 +100,8 @@ class DynamicCallableDescriptors(storageManager: StorageManager, builtIns: Kotli
/* isConst = */ false,
/* isHeader = */ false,
/* isImpl = */ false,
/* isExternal = */ false
/* isExternal = */ false,
/* isDelegated = */ false
)
propertyDescriptor.setType(
dynamicType,
@@ -230,4 +231,3 @@ fun DeclarationDescriptor.isDynamic(): Boolean {
val dispatchReceiverParameter = dispatchReceiverParameter
return dispatchReceiverParameter != null && dispatchReceiverParameter.type.isDynamic()
}