[FIR] Add two kinds of Java origin to distinguish source and library declarations

This commit is contained in:
Dmitriy Novozhilov
2022-05-26 12:04:36 +03:00
committed by teamcity
parent 26df9d74e8
commit fb57e1ecd5
21 changed files with 84 additions and 47 deletions
@@ -39,7 +39,7 @@ object FirInterfaceDefaultMethodCallChecker : FirQualifiedAccessExpressionChecke
var typeSymbol: FirRegularClassSymbol? = null
if (!supportsDefaults && symbol.isStatic) {
typeSymbol = getTypeSymbol() ?: return
if (typeSymbol.isInterface && typeSymbol.origin == FirDeclarationOrigin.Java) {
if (typeSymbol.isInterface && typeSymbol.origin is FirDeclarationOrigin.Java) {
reporter.reportOn(expression.source, FirJvmErrors.INTERFACE_STATIC_METHOD_CALL_FROM_JAVA6_TARGET, context)
}
}
@@ -55,7 +55,7 @@ object FirInterfaceDefaultMethodCallChecker : FirQualifiedAccessExpressionChecke
if (typeSymbol == null) typeSymbol = getTypeSymbol() ?: return
val jvmDefaultMode = context.session.jvmDefaultModeState
if (typeSymbol.isInterface && (typeSymbol.origin == FirDeclarationOrigin.Java || symbol.isCompiledToJvmDefault(jvmDefaultMode))) {
if (typeSymbol.isInterface && (typeSymbol.origin is FirDeclarationOrigin.Java || symbol.isCompiledToJvmDefault(jvmDefaultMode))) {
if (containingDeclaration.isInterface) {
val containingMember = context.findContainingMember()?.symbol
if (containingMember?.isCompiledToJvmDefault(jvmDefaultMode) == false) {
@@ -35,7 +35,7 @@ object FirJavaAnnotationsChecker : FirAnnotationChecker() {
override fun check(expression: FirAnnotation, context: CheckerContext, reporter: DiagnosticReporter) {
if (context.containingDeclarations.lastOrNull()?.source?.kind != KtRealSourceElementKind) return
val callableSymbol = expression.annotationTypeRef.toRegularClassSymbol(context.session)
if (callableSymbol?.origin != FirDeclarationOrigin.Java) return
if (callableSymbol?.origin !is FirDeclarationOrigin.Java) return
val lookupTag = expression.annotationTypeRef.coneTypeSafe<ConeClassLikeType>()?.lookupTag ?: return
javaToKotlinNameMap[lookupTag.classId]?.let { betterName ->
@@ -127,7 +127,7 @@ fun FirClassLikeSymbol<*>.containsRepeatableAnnotation(session: FirSession): Boo
getAnnotationByClassId(StandardClassIds.Annotations.JvmRepeatable) != null
) {
return session.languageVersionSettings.supportsFeature(LanguageFeature.RepeatableAnnotations) ||
getAnnotationRetention() == AnnotationRetention.SOURCE && origin == FirDeclarationOrigin.Java
getAnnotationRetention() == AnnotationRetention.SOURCE && origin is FirDeclarationOrigin.Java
}
return false
}
@@ -43,7 +43,7 @@ object FirSealedSupertypeChecker : FirClassChecker() {
val superClass = context.session.symbolProvider.getClassLikeSymbolByClassId(superClassId) as? FirRegularClassSymbol ?: continue
if (!superClass.isSealed) continue
if (superClass.origin == FirDeclarationOrigin.Java) {
if (superClass.origin is FirDeclarationOrigin.Java) {
reporter.reportOn(superTypeRef.source, FirErrors.CLASS_INHERITS_JAVA_SEALED_CLASS, context)
continue
}