Value classes: treat @JvmInline value classes as inline classes
Report error on value classes without @JvmInline annotation. Do not check for @JvmInline annotation in value classes since it breaks reflection.
This commit is contained in:
+2
-1
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.psi.KtNamedDeclaration
|
||||
import org.jetbrains.kotlin.psi.KtTypeParameter
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameOrNull
|
||||
import org.jetbrains.kotlin.resolve.isInlineClass
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
import org.jetbrains.kotlin.types.TypeProjection
|
||||
import org.jetbrains.kotlin.types.isError
|
||||
@@ -101,7 +102,7 @@ private fun DeclarationDescriptor.collectAllTypes(): Sequence<FqName?> {
|
||||
return when (this) {
|
||||
is ClassConstructorDescriptor -> valueParameters.asSequence().map(ValueParameterDescriptor::getType)
|
||||
.flatMap(KotlinType::collectAllTypes)
|
||||
is ClassDescriptor -> if (isInline) unsubstitutedPrimaryConstructor?.collectAllTypes().orEmpty() else {
|
||||
is ClassDescriptor -> if (isInlineClass()) unsubstitutedPrimaryConstructor?.collectAllTypes().orEmpty() else {
|
||||
emptySequence()
|
||||
} + declaredTypeParameters.asSequence().flatMap(DeclarationDescriptor::collectAllTypes) + sequenceOf(fqNameOrNull())
|
||||
is CallableDescriptor -> {
|
||||
|
||||
+1
-1
@@ -144,7 +144,7 @@ fun OverrideMemberChooserObject.generateMember(
|
||||
val renderer = baseRenderer.withOptions {
|
||||
if (descriptor is ClassConstructorDescriptor && descriptor.isPrimary) {
|
||||
val containingClass = descriptor.containingDeclaration
|
||||
if (containingClass.kind == ClassKind.ANNOTATION_CLASS || containingClass.isInline) {
|
||||
if (containingClass.kind == ClassKind.ANNOTATION_CLASS || containingClass.isInline || containingClass.isValue) {
|
||||
renderPrimaryConstructorParametersAsProperties = true
|
||||
}
|
||||
}
|
||||
|
||||
@@ -76,6 +76,7 @@ import org.jetbrains.kotlin.resolve.BindingContext
|
||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||
import org.jetbrains.kotlin.resolve.bindingContextUtil.isUsedAsExpression
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
|
||||
import org.jetbrains.kotlin.resolve.isInlineClass
|
||||
import org.jetbrains.kotlin.resolve.isInlineClassType
|
||||
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
||||
import org.jetbrains.kotlin.util.findCallableMemberBySignature
|
||||
@@ -513,7 +514,7 @@ class UnusedSymbolInspection : AbstractKotlinInspection() {
|
||||
return when {
|
||||
descriptor is ConstructorDescriptor -> {
|
||||
val classDescriptor = descriptor.constructedClass
|
||||
!classDescriptor.isInline && classDescriptor.visibility != DescriptorVisibilities.LOCAL
|
||||
!classDescriptor.isInlineClass() && classDescriptor.visibility != DescriptorVisibilities.LOCAL
|
||||
}
|
||||
hasModifier(KtTokens.INTERNAL_KEYWORD) -> false
|
||||
descriptor !is FunctionDescriptor -> true
|
||||
|
||||
Reference in New Issue
Block a user