FIR IDE: add completion support to classes and to type aliases
This commit is contained in:
committed by
TeamCityServer
parent
a5c33c8d42
commit
da6c5e13d5
-1
@@ -31,7 +31,6 @@ class RawFirFragmentForLazyBodiesBuilder private constructor(
|
||||
designation: List<FirDeclaration>,
|
||||
declaration: KtDeclaration,
|
||||
): FirDeclaration {
|
||||
require(declaration is KtNamedFunction || declaration is KtProperty) { "Not implemented for ${declaration::class.qualifiedName}" }
|
||||
val builder = RawFirFragmentForLazyBodiesBuilder(session, baseScopeProvider, declaration)
|
||||
builder.context.packageFqName = declaration.containingKtFile.packageFqName
|
||||
return builder.moveNext(designation.iterator())
|
||||
|
||||
+1
@@ -365,6 +365,7 @@ open class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransfor
|
||||
}
|
||||
doTransformTypeParameters(typeAlias)
|
||||
typeAlias.transformAnnotations(transformer, data)
|
||||
transformer.onBeforeDeclarationContentResolve(typeAlias)
|
||||
typeAlias.transformExpandedTypeRef(transformer, data)
|
||||
return typeAlias
|
||||
}
|
||||
|
||||
+24
@@ -81,3 +81,27 @@ inline fun buildRegularClass(init: FirRegularClassBuilder.() -> Unit): FirRegula
|
||||
}
|
||||
return FirRegularClassBuilder().apply(init).build()
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalContracts::class)
|
||||
inline fun buildRegularClassCopy(original: FirRegularClass, init: FirRegularClassBuilder.() -> Unit): FirRegularClass {
|
||||
contract {
|
||||
callsInPlace(init, kotlin.contracts.InvocationKind.EXACTLY_ONCE)
|
||||
}
|
||||
val copyBuilder = FirRegularClassBuilder()
|
||||
copyBuilder.source = original.source
|
||||
copyBuilder.session = original.session
|
||||
copyBuilder.resolvePhase = original.resolvePhase
|
||||
copyBuilder.origin = original.origin
|
||||
copyBuilder.attributes = original.attributes.copy()
|
||||
copyBuilder.annotations.addAll(original.annotations)
|
||||
copyBuilder.typeParameters.addAll(original.typeParameters)
|
||||
copyBuilder.status = original.status
|
||||
copyBuilder.classKind = original.classKind
|
||||
copyBuilder.declarations.addAll(original.declarations)
|
||||
copyBuilder.scopeProvider = original.scopeProvider
|
||||
copyBuilder.name = original.name
|
||||
copyBuilder.symbol = original.symbol
|
||||
copyBuilder.companionObject = original.companionObject
|
||||
copyBuilder.superTypeRefs.addAll(original.superTypeRefs)
|
||||
return copyBuilder.apply(init).build()
|
||||
}
|
||||
|
||||
+20
@@ -68,3 +68,23 @@ inline fun buildTypeAlias(init: FirTypeAliasBuilder.() -> Unit): FirTypeAlias {
|
||||
}
|
||||
return FirTypeAliasBuilder().apply(init).build()
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalContracts::class)
|
||||
inline fun buildTypeAliasCopy(original: FirTypeAlias, init: FirTypeAliasBuilder.() -> Unit): FirTypeAlias {
|
||||
contract {
|
||||
callsInPlace(init, kotlin.contracts.InvocationKind.EXACTLY_ONCE)
|
||||
}
|
||||
val copyBuilder = FirTypeAliasBuilder()
|
||||
copyBuilder.source = original.source
|
||||
copyBuilder.session = original.session
|
||||
copyBuilder.resolvePhase = original.resolvePhase
|
||||
copyBuilder.origin = original.origin
|
||||
copyBuilder.attributes = original.attributes.copy()
|
||||
copyBuilder.status = original.status
|
||||
copyBuilder.typeParameters.addAll(original.typeParameters)
|
||||
copyBuilder.name = original.name
|
||||
copyBuilder.symbol = original.symbol
|
||||
copyBuilder.expandedTypeRef = original.expandedTypeRef
|
||||
copyBuilder.annotations.addAll(original.annotations)
|
||||
return copyBuilder.apply(init).build()
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@ inline fun <reified T : ConeKotlinType> FirTypeRef.coneTypeSafe(): T? {
|
||||
return (this as? FirResolvedTypeRef)?.type as? T
|
||||
}
|
||||
|
||||
inline val FirTypeRef.coneType: ConeKotlinType
|
||||
val FirTypeRef.coneType: ConeKotlinType
|
||||
get() = coneTypeSafe()
|
||||
?: error("Expected FirResolvedTypeRef with ConeKotlinType but was ${this::class.simpleName} ${render()}")
|
||||
|
||||
|
||||
+2
@@ -37,6 +37,7 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
|
||||
parents += typeParameterRefsOwnerBuilder
|
||||
defaultNull("companionObject")
|
||||
openBuilder()
|
||||
withCopy()
|
||||
}
|
||||
|
||||
val qualifiedAccessBuilder by builder {
|
||||
@@ -95,6 +96,7 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
|
||||
|
||||
builder(typeAlias) {
|
||||
parents += typeParametersOwnerBuilder
|
||||
withCopy()
|
||||
}
|
||||
|
||||
builder(annotationCall) {
|
||||
|
||||
Reference in New Issue
Block a user