[K/JS] Exclude kotlinx.serialization synthetic declarations from JsExport
^KT-57024 Fixed
This commit is contained in:
+7
-1
@@ -175,8 +175,8 @@ class SerializationFirResolveExtension(session: FirSession) : FirDeclarationGene
|
||||
symbol = FirNamedFunctionSymbol(callableId)
|
||||
origin = SerializationPluginKey.origin
|
||||
status = original.status.copy(modality = Modality.FINAL)
|
||||
|
||||
}
|
||||
copy.excludeFromJsExport()
|
||||
return listOf(copy.symbol)
|
||||
}
|
||||
|
||||
@@ -208,6 +208,8 @@ class SerializationFirResolveExtension(session: FirSession) : FirDeclarationGene
|
||||
}
|
||||
}
|
||||
|
||||
function.excludeFromJsExport()
|
||||
|
||||
return function.symbol
|
||||
}
|
||||
|
||||
@@ -224,6 +226,8 @@ class SerializationFirResolveExtension(session: FirSession) : FirDeclarationGene
|
||||
target.resolvedReturnType
|
||||
)
|
||||
|
||||
property.excludeFromJsExport()
|
||||
|
||||
return listOf(property.symbol)
|
||||
}
|
||||
|
||||
@@ -270,6 +274,7 @@ class SerializationFirResolveExtension(session: FirSession) : FirDeclarationGene
|
||||
}
|
||||
// TODO: add deprecate hidden
|
||||
// serializerFirClass.replaceAnnotations(listOf(Annotations.create(listOf(KSerializerDescriptorResolver.createDeprecatedHiddenAnnotation(thisDescriptor.module)))))
|
||||
serializerFirClass.excludeFromJsExport()
|
||||
|
||||
return serializerFirClass.symbol
|
||||
}
|
||||
@@ -282,6 +287,7 @@ class SerializationFirResolveExtension(session: FirSession) : FirDeclarationGene
|
||||
superType(serializerFactoryClassId.constructClassLikeType(emptyArray(), false))
|
||||
}
|
||||
}
|
||||
|
||||
return companion.symbol
|
||||
}
|
||||
|
||||
|
||||
+40
@@ -6,7 +6,9 @@
|
||||
package org.jetbrains.kotlinx.serialization.compiler.fir
|
||||
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.fir.FirAnnotationContainer
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.*
|
||||
import org.jetbrains.kotlin.fir.expressions.*
|
||||
@@ -14,15 +16,28 @@ import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||
import org.jetbrains.kotlin.fir.expressions.arguments
|
||||
import org.jetbrains.kotlin.fir.resolve.createSubstitutionForSupertype
|
||||
import org.jetbrains.kotlin.fir.expressions.builder.buildAnnotationCall
|
||||
import org.jetbrains.kotlin.fir.extensions.FirExtension
|
||||
import org.jetbrains.kotlin.fir.extensions.predicateBasedProvider
|
||||
import org.jetbrains.kotlin.fir.moduleData
|
||||
import org.jetbrains.kotlin.fir.references.builder.buildResolvedNamedReference
|
||||
import org.jetbrains.kotlin.fir.resolve.defaultType
|
||||
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
|
||||
import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider
|
||||
import org.jetbrains.kotlin.fir.resolve.substitution.ChainedSubstitutor
|
||||
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
|
||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||
import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider
|
||||
import org.jetbrains.kotlin.fir.scopes.platformSpecificOverridabilityRules
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
|
||||
import org.jetbrains.kotlin.fir.types.*
|
||||
import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.platform.isJs
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
|
||||
import org.jetbrains.kotlinx.serialization.compiler.fir.services.dependencySerializationInfoProvider
|
||||
import org.jetbrains.kotlinx.serialization.compiler.resolve.SerialEntityNames
|
||||
import org.jetbrains.kotlinx.serialization.compiler.resolve.SerializationAnnotations
|
||||
@@ -30,6 +45,7 @@ import org.jetbrains.kotlinx.serialization.compiler.resolve.SerializationAnnotat
|
||||
import org.jetbrains.kotlinx.serialization.compiler.resolve.SerializationAnnotations.metaSerializableAnnotationClassId
|
||||
import org.jetbrains.kotlinx.serialization.compiler.resolve.SerializationAnnotations.serialInfoClassId
|
||||
import org.jetbrains.kotlinx.serialization.compiler.resolve.SerializationAnnotations.serialNameAnnotationClassId
|
||||
import org.jetbrains.kotlinx.serialization.compiler.resolve.SerializationJsDependenciesClassIds
|
||||
|
||||
object AnnotationParameterNames {
|
||||
val VALUE = Name.identifier("value")
|
||||
@@ -217,3 +233,27 @@ val ConeKotlinType.isTypeParameter: Boolean
|
||||
context(FirSession)
|
||||
val ConeKotlinType.isGeneratedSerializableObject: Boolean
|
||||
get() = toRegularClassSymbol(this@FirSession)?.let { it.classKind.isObject && it.hasSerializableOrMetaAnnotationWithoutArgs } ?: false
|
||||
|
||||
|
||||
context(FirExtension)
|
||||
fun FirAnnotationContainer.excludeFromJsExport() {
|
||||
if (!session.moduleData.platform.isJs()) {
|
||||
return
|
||||
}
|
||||
val jsExportIgnore = session.symbolProvider.getClassLikeSymbolByClassId(SerializationJsDependenciesClassIds.jsExportIgnore)
|
||||
val jsExportIgnoreAnnotation = jsExportIgnore as? FirRegularClassSymbol ?: return
|
||||
val jsExportIgnoreConstructor = jsExportIgnoreAnnotation.declarationSymbols.firstIsInstanceOrNull<FirConstructorSymbol>() ?: return
|
||||
|
||||
val jsExportIgnoreAnnotationCall = buildAnnotationCall {
|
||||
argumentList = buildResolvedArgumentList(linkedMapOf())
|
||||
annotationTypeRef = buildResolvedTypeRef {
|
||||
type = jsExportIgnoreAnnotation.defaultType()
|
||||
}
|
||||
calleeReference = buildResolvedNamedReference {
|
||||
name = jsExportIgnoreAnnotation.name
|
||||
resolvedSymbol = jsExportIgnoreConstructor
|
||||
}
|
||||
}
|
||||
|
||||
replaceAnnotations(annotations + jsExportIgnoreAnnotationCall)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user