FIR: Support inherited default parameters

This commit is contained in:
Denis Zharkov
2019-11-21 12:24:36 +03:00
parent c9cb4dff52
commit 256f5ca0a1
6 changed files with 165 additions and 6 deletions
@@ -7,8 +7,14 @@ package org.jetbrains.kotlin.fir.java.scopes
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.impl.FirSimpleFunctionImpl
import org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.java.JavaTypeParameterStack
import org.jetbrains.kotlin.fir.java.declarations.FirJavaClass
import org.jetbrains.kotlin.fir.java.declarations.FirJavaMethod
import org.jetbrains.kotlin.fir.java.declarations.FirJavaValueParameter
import org.jetbrains.kotlin.fir.java.types.FirJavaTypeRef
import org.jetbrains.kotlin.fir.scopes.FirScope
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
import org.jetbrains.kotlin.fir.scopes.ProcessorAction.NEXT
@@ -103,6 +109,31 @@ class JavaClassUseSiteMemberScope(
}
}
override fun createFunctionCopy(firSimpleFunction: FirSimpleFunction, newSymbol: FirNamedFunctionSymbol): FirSimpleFunctionImpl {
if (firSimpleFunction !is FirJavaMethod) return super.createFunctionCopy(firSimpleFunction, newSymbol)
return FirJavaMethod(
firSimpleFunction.session,
firSimpleFunction.source,
newSymbol,
firSimpleFunction.name,
firSimpleFunction.visibility,
firSimpleFunction.modality,
firSimpleFunction.returnTypeRef as FirJavaTypeRef,
firSimpleFunction.status.isStatic
)
}
override fun createValueParameterCopy(parameter: FirValueParameter, newDefaultValue: FirExpression?): FirValueParameterImpl {
if (parameter !is FirJavaValueParameter) return super.createValueParameterCopy(parameter, newDefaultValue)
return FirJavaValueParameter(
parameter.session,
parameter.source,
parameter.name,
parameter.returnTypeRef as FirJavaTypeRef,
parameter.isVararg
)
}
override fun processPropertiesByName(name: Name, processor: (FirCallableSymbol<*>) -> ProcessorAction): ProcessorAction {
val getterName = Name.identifier(getterPrefix + name.asString().capitalize())
return processAccessorFunctionsAndPropertiesByName(name, getterName, isGetter = true, processor = processor)