Allow null operators for result and using Result as return type with enabled InlineClasses

This commit is contained in:
Dmitriy Novozhilov
2019-12-17 11:21:09 +03:00
parent eed5b3f1d1
commit aa8578b675
18 changed files with 336 additions and 2 deletions
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.resolve.calls.checkers
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.config.LanguageFeature
import org.jetbrains.kotlin.diagnostics.Errors
import org.jetbrains.kotlin.diagnostics.reportDiagnosticOnce
import org.jetbrains.kotlin.lexer.KtTokens
@@ -16,6 +17,8 @@ import org.jetbrains.kotlin.types.expressions.ControlStructureTypingUtils
class ResultTypeWithNullableOperatorsChecker : CallChecker {
override fun check(resolvedCall: ResolvedCall<*>, reportOn: PsiElement, context: CallCheckerContext) {
if (context.languageVersionSettings.supportsFeature(LanguageFeature.AllowNullOperatorsForResult)) return
val name = resolvedCall.resultingDescriptor.name
val operationNode = resolvedCall.call.callOperationNode
@@ -6,6 +6,8 @@
package org.jetbrains.kotlin.resolve.checkers
import org.jetbrains.kotlin.config.AnalysisFlags
import org.jetbrains.kotlin.config.LanguageFeature
import org.jetbrains.kotlin.config.LanguageVersion
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.diagnostics.Errors
import org.jetbrains.kotlin.diagnostics.reportDiagnosticOnce
@@ -17,7 +19,12 @@ import org.jetbrains.kotlin.types.KotlinType
class ResultClassInReturnTypeChecker : DeclarationChecker {
override fun check(declaration: KtDeclaration, descriptor: DeclarationDescriptor, context: DeclarationCheckerContext) {
if (context.languageVersionSettings.getFlag(AnalysisFlags.allowResultReturnType)) return
val languageVersionSettings = context.languageVersionSettings
if (
languageVersionSettings.getFlag(AnalysisFlags.allowResultReturnType) ||
languageVersionSettings.supportsFeature(LanguageFeature.InlineClasses) &&
languageVersionSettings.supportsFeature(LanguageFeature.AllowResultInReturnType)
) return
if (declaration !is KtCallableDeclaration || descriptor !is CallableMemberDescriptor) return