Don't call possibleGetterNamesByPropertyName without a reason

This commit is contained in:
Mikhail Glukhikh
2020-12-10 12:24:41 +03:00
parent 44948aa9a2
commit 0e43eaa662
@@ -81,54 +81,51 @@ class JavaClassUseSiteMemberScope(
processor: (FirVariableSymbol<*>) -> Unit processor: (FirVariableSymbol<*>) -> Unit
) { ) {
val overrideCandidates = mutableSetOf<FirCallableSymbol<*>>() val overrideCandidates = mutableSetOf<FirCallableSymbol<*>>()
val klass = symbol.fir
declaredMemberScope.processPropertiesByName(propertyName) { variableSymbol -> declaredMemberScope.processPropertiesByName(propertyName) { variableSymbol ->
if (variableSymbol.isStatic) return@processPropertiesByName if (variableSymbol.isStatic) return@processPropertiesByName
overrideCandidates += variableSymbol overrideCandidates += variableSymbol
processor(variableSymbol) processor(variableSymbol)
} }
if (klass is FirJavaClass) { for (getterName in getterNames) {
for (getterName in getterNames) { var getterSymbol: FirNamedFunctionSymbol? = null
var getterSymbol: FirNamedFunctionSymbol? = null var setterSymbol: FirNamedFunctionSymbol? = null
var setterSymbol: FirNamedFunctionSymbol? = null declaredMemberScope.processFunctionsByName(getterName) { functionSymbol ->
declaredMemberScope.processFunctionsByName(getterName) { functionSymbol -> if (getterSymbol == null) {
if (getterSymbol == null) { val function = functionSymbol.fir
val function = functionSymbol.fir if (!function.isStatic && function.valueParameters.isEmpty()) {
if (!function.isStatic && function.valueParameters.isEmpty()) { getterSymbol = functionSymbol
getterSymbol = functionSymbol
}
} }
} }
val setterName = session.syntheticNamesProvider.setterNameByGetterName(getterName) }
if (getterSymbol != null && setterName != null) { val setterName = session.syntheticNamesProvider.setterNameByGetterName(getterName)
declaredMemberScope.processFunctionsByName(setterName) { functionSymbol -> if (getterSymbol != null && setterName != null) {
if (setterSymbol == null) { declaredMemberScope.processFunctionsByName(setterName) { functionSymbol ->
val function = functionSymbol.fir if (setterSymbol == null) {
if (!function.isStatic && function.valueParameters.size == 1) { val function = functionSymbol.fir
val returnTypeRef = function.returnTypeRef if (!function.isStatic && function.valueParameters.size == 1) {
if (returnTypeRef.isUnit) { val returnTypeRef = function.returnTypeRef
// Unit return type if (returnTypeRef.isUnit) {
setterSymbol = functionSymbol // Unit return type
} else if (returnTypeRef is FirJavaTypeRef) { setterSymbol = functionSymbol
// Void/void return type } else if (returnTypeRef is FirJavaTypeRef) {
when (val returnType = returnTypeRef.type) { // Void/void return type
is JavaPrimitiveTypeImpl -> when (val returnType = returnTypeRef.type) {
if (returnType.psi.kind == JvmPrimitiveTypeKind.VOID) { is JavaPrimitiveTypeImpl ->
setterSymbol = functionSymbol if (returnType.psi.kind == JvmPrimitiveTypeKind.VOID) {
} setterSymbol = functionSymbol
is JavaPrimitiveType -> }
if (returnType.type == null) { is JavaPrimitiveType ->
setterSymbol = functionSymbol if (returnType.type == null) {
} setterSymbol = functionSymbol
} }
} }
} }
} }
} }
val accessorSymbol = generateAccessorSymbol(getterSymbol!!, setterSymbol, propertyName)
overrideCandidates += accessorSymbol
} }
val accessorSymbol = generateAccessorSymbol(getterSymbol!!, setterSymbol, propertyName)
overrideCandidates += accessorSymbol
} }
} }
@@ -144,11 +141,11 @@ class JavaClassUseSiteMemberScope(
} }
override fun processPropertiesByName(name: Name, processor: (FirVariableSymbol<*>) -> Unit) { override fun processPropertiesByName(name: Name, processor: (FirVariableSymbol<*>) -> Unit) {
// Do not generate accessors at all? val getterNames = if (symbol.fir is FirJavaClass) {
if (name.isSpecial) { FirJavaSyntheticNamesProvider.possibleGetterNamesByPropertyName(name)
return processAccessorFunctionsAndPropertiesByName(name, emptyList(), processor) } else {
emptyList()
} }
val getterNames = FirJavaSyntheticNamesProvider.possibleGetterNamesByPropertyName(name)
return processAccessorFunctionsAndPropertiesByName(name, getterNames, processor) return processAccessorFunctionsAndPropertiesByName(name, getterNames, processor)
} }