Minor. Reformat LazyJavaClassMemberScope.kt
This commit is contained in:
+54
-47
@@ -94,12 +94,9 @@ class LazyJavaClassMemberScope(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun isVisibleAsFunctionInCurrentClass(function: SimpleFunctionDescriptor): Boolean {
|
private fun isVisibleAsFunctionInCurrentClass(function: SimpleFunctionDescriptor): Boolean {
|
||||||
if (getPropertyNamesCandidatesByAccessorName(function.name).any {
|
if (getPropertyNamesCandidatesByAccessorName(function.name).any { propertyName ->
|
||||||
propertyName ->
|
getPropertiesFromSupertypes(propertyName).any { property ->
|
||||||
getPropertiesFromSupertypes(propertyName).any {
|
doesClassOverridesProperty(property) { accessorName ->
|
||||||
property ->
|
|
||||||
doesClassOverridesProperty(property) {
|
|
||||||
accessorName ->
|
|
||||||
// This lambda should return property accessors available in this class by their name
|
// This lambda should return property accessors available in this class by their name
|
||||||
// If 'accessorName' is current function we return only it just because we check exactly
|
// If 'accessorName' is current function we return only it just because we check exactly
|
||||||
// that current method is override of accessor
|
// that current method is override of accessor
|
||||||
@@ -128,8 +125,7 @@ class LazyJavaClassMemberScope(
|
|||||||
BuiltinMethodsWithSpecialGenericSignature.getOverriddenBuiltinFunctionWithErasedValueParametersInJava(it)
|
BuiltinMethodsWithSpecialGenericSignature.getOverriddenBuiltinFunctionWithErasedValueParametersInJava(it)
|
||||||
}
|
}
|
||||||
|
|
||||||
return candidatesToOverride.any {
|
return candidatesToOverride.any { candidate ->
|
||||||
candidate ->
|
|
||||||
hasSameJvmDescriptorButDoesNotOverride(candidate)
|
hasSameJvmDescriptorButDoesNotOverride(candidate)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -180,7 +176,8 @@ class LazyJavaClassMemberScope(
|
|||||||
|
|
||||||
return commonOverridabilityResult == OverridingUtil.OverrideCompatibilityInfo.Result.OVERRIDABLE &&
|
return commonOverridabilityResult == OverridingUtil.OverrideCompatibilityInfo.Result.OVERRIDABLE &&
|
||||||
!JavaIncompatibilityRulesOverridabilityCondition.doesJavaOverrideHaveIncompatibleValueParameterKinds(
|
!JavaIncompatibilityRulesOverridabilityCondition.doesJavaOverrideHaveIncompatibleValueParameterKinds(
|
||||||
superDescriptor, this)
|
superDescriptor, this
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun PropertyDescriptor.findGetterOverride(
|
private fun PropertyDescriptor.findGetterOverride(
|
||||||
@@ -201,8 +198,7 @@ class LazyJavaClassMemberScope(
|
|||||||
getterName: String,
|
getterName: String,
|
||||||
functions: (Name) -> Collection<SimpleFunctionDescriptor>
|
functions: (Name) -> Collection<SimpleFunctionDescriptor>
|
||||||
): SimpleFunctionDescriptor? {
|
): SimpleFunctionDescriptor? {
|
||||||
return functions(Name.identifier(getterName)).firstNotNullResult factory@{
|
return functions(Name.identifier(getterName)).firstNotNullResult factory@{ descriptor ->
|
||||||
descriptor ->
|
|
||||||
if (descriptor.valueParameters.size != 0) return@factory null
|
if (descriptor.valueParameters.size != 0) return@factory null
|
||||||
|
|
||||||
descriptor.takeIf { KotlinTypeChecker.DEFAULT.isSubtypeOf(descriptor.returnType ?: return@takeIf false, type) }
|
descriptor.takeIf { KotlinTypeChecker.DEFAULT.isSubtypeOf(descriptor.returnType ?: return@takeIf false, type) }
|
||||||
@@ -212,8 +208,7 @@ class LazyJavaClassMemberScope(
|
|||||||
private fun PropertyDescriptor.findSetterOverride(
|
private fun PropertyDescriptor.findSetterOverride(
|
||||||
functions: (Name) -> Collection<SimpleFunctionDescriptor>
|
functions: (Name) -> Collection<SimpleFunctionDescriptor>
|
||||||
): SimpleFunctionDescriptor? {
|
): SimpleFunctionDescriptor? {
|
||||||
return functions(Name.identifier(JvmAbi.setterName(name.asString()))).firstNotNullResult factory@{
|
return functions(Name.identifier(JvmAbi.setterName(name.asString()))).firstNotNullResult factory@{ descriptor ->
|
||||||
descriptor ->
|
|
||||||
if (descriptor.valueParameters.size != 1) return@factory null
|
if (descriptor.valueParameters.size != 1) return@factory null
|
||||||
|
|
||||||
if (!KotlinBuiltIns.isUnit(descriptor.returnType ?: return@factory null)) return@factory null
|
if (!KotlinBuiltIns.isUnit(descriptor.returnType ?: return@factory null)) return@factory null
|
||||||
@@ -243,7 +238,8 @@ class LazyJavaClassMemberScope(
|
|||||||
addFunctionFromSupertypes(
|
addFunctionFromSupertypes(
|
||||||
result, name,
|
result, name,
|
||||||
functionsFromSupertypes.filter { isVisibleAsFunctionInCurrentClass(it) },
|
functionsFromSupertypes.filter { isVisibleAsFunctionInCurrentClass(it) },
|
||||||
isSpecialBuiltinName = false)
|
isSpecialBuiltinName = false
|
||||||
|
)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -251,17 +247,20 @@ class LazyJavaClassMemberScope(
|
|||||||
|
|
||||||
// Merge functions with same signatures
|
// Merge functions with same signatures
|
||||||
val mergedFunctionFromSuperTypes = resolveOverridesForNonStaticMembers(
|
val mergedFunctionFromSuperTypes = resolveOverridesForNonStaticMembers(
|
||||||
name, functionsFromSupertypes, emptyList(), ownerDescriptor, ErrorReporter.DO_NOTHING)
|
name, functionsFromSupertypes, emptyList(), ownerDescriptor, ErrorReporter.DO_NOTHING
|
||||||
|
)
|
||||||
|
|
||||||
// add declarations
|
// add declarations
|
||||||
addOverriddenBuiltinMethods(
|
addOverriddenBuiltinMethods(
|
||||||
name, result, mergedFunctionFromSuperTypes, result,
|
name, result, mergedFunctionFromSuperTypes, result,
|
||||||
this::searchMethodsByNameWithoutBuiltinMagic)
|
this::searchMethodsByNameWithoutBuiltinMagic
|
||||||
|
)
|
||||||
|
|
||||||
// add from super types
|
// add from super types
|
||||||
addOverriddenBuiltinMethods(
|
addOverriddenBuiltinMethods(
|
||||||
name, result, mergedFunctionFromSuperTypes, specialBuiltinsFromSuperTypes,
|
name, result, mergedFunctionFromSuperTypes, specialBuiltinsFromSuperTypes,
|
||||||
this::searchMethodsInSupertypesWithoutBuiltinMagic)
|
this::searchMethodsInSupertypesWithoutBuiltinMagic
|
||||||
|
)
|
||||||
|
|
||||||
val visibleFunctionsFromSupertypes =
|
val visibleFunctionsFromSupertypes =
|
||||||
functionsFromSupertypes.filter { isVisibleAsFunctionInCurrentClass(it) } + specialBuiltinsFromSuperTypes
|
functionsFromSupertypes.filter { isVisibleAsFunctionInCurrentClass(it) } + specialBuiltinsFromSuperTypes
|
||||||
@@ -282,12 +281,10 @@ class LazyJavaClassMemberScope(
|
|||||||
|
|
||||||
if (!isSpecialBuiltinName) {
|
if (!isSpecialBuiltinName) {
|
||||||
result.addAll(additionalOverrides)
|
result.addAll(additionalOverrides)
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
val allDescriptors = result + additionalOverrides
|
val allDescriptors = result + additionalOverrides
|
||||||
result.addAll(
|
result.addAll(
|
||||||
additionalOverrides.map {
|
additionalOverrides.map { resolvedOverride ->
|
||||||
resolvedOverride ->
|
|
||||||
val overriddenBuiltin = resolvedOverride.getOverriddenSpecialBuiltin()
|
val overriddenBuiltin = resolvedOverride.getOverriddenSpecialBuiltin()
|
||||||
?: return@map resolvedOverride
|
?: return@map resolvedOverride
|
||||||
|
|
||||||
@@ -312,7 +309,8 @@ class LazyJavaClassMemberScope(
|
|||||||
|
|
||||||
if (doesOverrideRenamedDescriptor(overriddenBuiltin, renamedCopy)) {
|
if (doesOverrideRenamedDescriptor(overriddenBuiltin, renamedCopy)) {
|
||||||
result.add(
|
result.add(
|
||||||
renamedCopy.createHiddenCopyIfBuiltinAlreadyAccidentallyOverridden(overriddenBuiltin, alreadyDeclaredFunctions))
|
renamedCopy.createHiddenCopyIfBuiltinAlreadyAccidentallyOverridden(overriddenBuiltin, alreadyDeclaredFunctions)
|
||||||
|
)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -323,8 +321,7 @@ class LazyJavaClassMemberScope(
|
|||||||
BuiltinMethodsWithSpecialGenericSignature.getOverriddenBuiltinFunctionWithErasedValueParametersInJava(descriptor)
|
BuiltinMethodsWithSpecialGenericSignature.getOverriddenBuiltinFunctionWithErasedValueParametersInJava(descriptor)
|
||||||
?: continue
|
?: continue
|
||||||
|
|
||||||
createOverrideForBuiltinFunctionWithErasedParameterIfNeeded(overriddenBuiltin, functions)?.let {
|
createOverrideForBuiltinFunctionWithErasedParameterIfNeeded(overriddenBuiltin, functions)?.let { override ->
|
||||||
override ->
|
|
||||||
if (isVisibleAsFunctionInCurrentClass(override)) {
|
if (isVisibleAsFunctionInCurrentClass(override)) {
|
||||||
result.add(override.createHiddenCopyIfBuiltinAlreadyAccidentallyOverridden(overriddenBuiltin, alreadyDeclaredFunctions))
|
result.add(override.createHiddenCopyIfBuiltinAlreadyAccidentallyOverridden(overriddenBuiltin, alreadyDeclaredFunctions))
|
||||||
}
|
}
|
||||||
@@ -353,12 +350,14 @@ class LazyJavaClassMemberScope(
|
|||||||
): SimpleFunctionDescriptor? {
|
): SimpleFunctionDescriptor? {
|
||||||
return functions(overridden.name).firstOrNull {
|
return functions(overridden.name).firstOrNull {
|
||||||
it.hasSameJvmDescriptorButDoesNotOverride(overridden)
|
it.hasSameJvmDescriptorButDoesNotOverride(overridden)
|
||||||
}?.let {
|
}?.let { override ->
|
||||||
override ->
|
|
||||||
override.newCopyBuilder().apply {
|
override.newCopyBuilder().apply {
|
||||||
setValueParameters(copyValueParameters(
|
setValueParameters(
|
||||||
|
copyValueParameters(
|
||||||
overridden.valueParameters.map { ValueParameterData(it.type, it.declaresDefaultValue()) },
|
overridden.valueParameters.map { ValueParameterData(it.type, it.declaresDefaultValue()) },
|
||||||
override.valueParameters, overridden))
|
override.valueParameters, overridden
|
||||||
|
)
|
||||||
|
)
|
||||||
setSignatureChange()
|
setSignatureChange()
|
||||||
setPreserveSourceElement()
|
setPreserveSourceElement()
|
||||||
}.build()
|
}.build()
|
||||||
@@ -387,8 +386,11 @@ class LazyJavaClassMemberScope(
|
|||||||
searchMethodsInSupertypesWithoutBuiltinMagic(it)
|
searchMethodsInSupertypesWithoutBuiltinMagic(it)
|
||||||
}
|
}
|
||||||
|
|
||||||
result.addAll(resolveOverridesForNonStaticMembers(
|
result.addAll(
|
||||||
name, propertiesFromSupertypes + propertiesOverridesFromSuperTypes, result, ownerDescriptor, c.components.errorReporter))
|
resolveOverridesForNonStaticMembers(
|
||||||
|
name, propertiesFromSupertypes + propertiesOverridesFromSuperTypes, result, ownerDescriptor, c.components.errorReporter
|
||||||
|
)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun addPropertyOverrideByMethod(
|
private fun addPropertyOverrideByMethod(
|
||||||
@@ -466,7 +468,8 @@ class LazyJavaClassMemberScope(
|
|||||||
}
|
}
|
||||||
|
|
||||||
val setter = setterMethod?.let { setterMethod ->
|
val setter = setterMethod?.let { setterMethod ->
|
||||||
DescriptorFactory.createSetter(propertyDescriptor, setterMethod.annotations, /* isDefault = */false,
|
DescriptorFactory.createSetter(
|
||||||
|
propertyDescriptor, setterMethod.annotations, /* isDefault = */false,
|
||||||
/* isExternal = */ false, /* isInline = */ false, setterMethod.visibility, setterMethod.source
|
/* isExternal = */ false, /* isInline = */ false, setterMethod.visibility, setterMethod.source
|
||||||
).apply {
|
).apply {
|
||||||
initialSignatureDescriptor = setterMethod
|
initialSignatureDescriptor = setterMethod
|
||||||
@@ -507,11 +510,15 @@ class LazyJavaClassMemberScope(
|
|||||||
val classDescriptor = ownerDescriptor
|
val classDescriptor = ownerDescriptor
|
||||||
|
|
||||||
val constructorDescriptor = JavaClassConstructorDescriptor.createJavaConstructor(
|
val constructorDescriptor = JavaClassConstructorDescriptor.createJavaConstructor(
|
||||||
classDescriptor, c.resolveAnnotations(constructor), /* isPrimary = */ false, c.components.sourceElementFactory.source(constructor)
|
classDescriptor,
|
||||||
|
c.resolveAnnotations(constructor), /* isPrimary = */
|
||||||
|
false,
|
||||||
|
c.components.sourceElementFactory.source(constructor)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
val c = c.childForMethod(constructorDescriptor, constructor, typeParametersIndexOffset = classDescriptor.declaredTypeParameters.size)
|
val c =
|
||||||
|
c.childForMethod(constructorDescriptor, constructor, typeParametersIndexOffset = classDescriptor.declaredTypeParameters.size)
|
||||||
val valueParameters = resolveValueParameters(c, constructorDescriptor, constructor.valueParameters)
|
val valueParameters = resolveValueParameters(c, constructorDescriptor, constructor.valueParameters)
|
||||||
val constructorTypeParameters =
|
val constructorTypeParameters =
|
||||||
classDescriptor.declaredTypeParameters +
|
classDescriptor.declaredTypeParameters +
|
||||||
@@ -562,8 +569,7 @@ class LazyJavaClassMemberScope(
|
|||||||
|
|
||||||
val attr = TypeUsage.COMMON.toAttributes(isForAnnotationParameter = true)
|
val attr = TypeUsage.COMMON.toAttributes(isForAnnotationParameter = true)
|
||||||
|
|
||||||
val (methodsNamedValue, otherMethods) = methods.
|
val (methodsNamedValue, otherMethods) = methods.partition { it.name == JvmAnnotationNames.DEFAULT_ANNOTATION_MEMBER_NAME }
|
||||||
partition { it.name == JvmAnnotationNames.DEFAULT_ANNOTATION_MEMBER_NAME }
|
|
||||||
|
|
||||||
assert(methodsNamedValue.size <= 1) { "There can't be more than one method named 'value' in annotation class: $jClass" }
|
assert(methodsNamedValue.size <= 1) { "There can't be more than one method named 'value' in annotation class: $jClass" }
|
||||||
val methodNamedValue = methodsNamedValue.firstOrNull()
|
val methodNamedValue = methodsNamedValue.firstOrNull()
|
||||||
@@ -571,8 +577,10 @@ class LazyJavaClassMemberScope(
|
|||||||
val parameterNamedValueJavaType = methodNamedValue.returnType
|
val parameterNamedValueJavaType = methodNamedValue.returnType
|
||||||
val (parameterType, varargType) =
|
val (parameterType, varargType) =
|
||||||
if (parameterNamedValueJavaType is JavaArrayType)
|
if (parameterNamedValueJavaType is JavaArrayType)
|
||||||
Pair(c.typeResolver.transformArrayType(parameterNamedValueJavaType, attr, isVararg = true),
|
Pair(
|
||||||
c.typeResolver.transformJavaType(parameterNamedValueJavaType.componentType, attr))
|
c.typeResolver.transformArrayType(parameterNamedValueJavaType, attr, isVararg = true),
|
||||||
|
c.typeResolver.transformJavaType(parameterNamedValueJavaType.componentType, attr)
|
||||||
|
)
|
||||||
else
|
else
|
||||||
Pair(c.typeResolver.transformJavaType(parameterNamedValueJavaType, attr), null)
|
Pair(c.typeResolver.transformJavaType(parameterNamedValueJavaType, attr), null)
|
||||||
|
|
||||||
@@ -595,7 +603,8 @@ class LazyJavaClassMemberScope(
|
|||||||
returnType: KotlinType,
|
returnType: KotlinType,
|
||||||
varargElementType: KotlinType?
|
varargElementType: KotlinType?
|
||||||
) {
|
) {
|
||||||
add(ValueParameterDescriptorImpl(
|
add(
|
||||||
|
ValueParameterDescriptorImpl(
|
||||||
constructor,
|
constructor,
|
||||||
null,
|
null,
|
||||||
index,
|
index,
|
||||||
@@ -609,7 +618,8 @@ class LazyJavaClassMemberScope(
|
|||||||
// Nulls are not allowed in annotation arguments in Java
|
// Nulls are not allowed in annotation arguments in Java
|
||||||
varargElementType?.let { TypeUtils.makeNotNullable(it) },
|
varargElementType?.let { TypeUtils.makeNotNullable(it) },
|
||||||
c.components.sourceElementFactory.source(method)
|
c.components.sourceElementFactory.source(method)
|
||||||
))
|
)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private val nestedClassIndex = c.storageManager.createLazyValue {
|
private val nestedClassIndex = c.storageManager.createLazyValue {
|
||||||
@@ -620,8 +630,7 @@ class LazyJavaClassMemberScope(
|
|||||||
jClass.fields.filter { it.isEnumEntry }.associateBy { f -> f.name }
|
jClass.fields.filter { it.isEnumEntry }.associateBy { f -> f.name }
|
||||||
}
|
}
|
||||||
|
|
||||||
private val nestedClasses = c.storageManager.createMemoizedFunctionWithNullableValues {
|
private val nestedClasses = c.storageManager.createMemoizedFunctionWithNullableValues { name: Name ->
|
||||||
name: Name ->
|
|
||||||
if (name !in nestedClassIndex()) {
|
if (name !in nestedClassIndex()) {
|
||||||
val field = enumEntryIndex()[name]
|
val field = enumEntryIndex()[name]
|
||||||
if (field != null) {
|
if (field != null) {
|
||||||
@@ -632,10 +641,8 @@ class LazyJavaClassMemberScope(
|
|||||||
c.storageManager, ownerDescriptor, name, enumMemberNames, c.resolveAnnotations(field),
|
c.storageManager, ownerDescriptor, name, enumMemberNames, c.resolveAnnotations(field),
|
||||||
c.components.sourceElementFactory.source(field)
|
c.components.sourceElementFactory.source(field)
|
||||||
)
|
)
|
||||||
}
|
} else null
|
||||||
else null
|
} else {
|
||||||
}
|
|
||||||
else {
|
|
||||||
c.components.finder.findClass(ownerDescriptor.classId!!.createNestedClassId(name))?.let {
|
c.components.finder.findClass(ownerDescriptor.classId!!.createNestedClassId(name))?.let {
|
||||||
LazyJavaClassDescriptor(c, ownerDescriptor, it)
|
LazyJavaClassDescriptor(c, ownerDescriptor, it)
|
||||||
.also(c.components.javaClassesTracker::reportClass)
|
.also(c.components.javaClassesTracker::reportClass)
|
||||||
@@ -661,8 +668,8 @@ class LazyJavaClassMemberScope(
|
|||||||
return super.getContributedVariables(name, location)
|
return super.getContributedVariables(name, location)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun computeClassNames(kindFilter: DescriptorKindFilter, nameFilter: ((Name) -> Boolean)?): Set<Name>
|
override fun computeClassNames(kindFilter: DescriptorKindFilter, nameFilter: ((Name) -> Boolean)?): Set<Name> =
|
||||||
= nestedClassIndex() + enumEntryIndex().keys
|
nestedClassIndex() + enumEntryIndex().keys
|
||||||
|
|
||||||
override fun computePropertyNames(kindFilter: DescriptorKindFilter, nameFilter: ((Name) -> Boolean)?): Set<Name> {
|
override fun computePropertyNames(kindFilter: DescriptorKindFilter, nameFilter: ((Name) -> Boolean)?): Set<Name> {
|
||||||
if (jClass.isAnnotationType) return getFunctionNames()
|
if (jClass.isAnnotationType) return getFunctionNames()
|
||||||
|
|||||||
Reference in New Issue
Block a user