Allow to declare vararg parameters of unsigned types
varargs inside annotations will be supported later when constant evaluation of more complex expressions of unsigned types will be ready #KT-24880 In Progress
This commit is contained in:
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.resolve
|
||||
import com.google.common.collect.ImmutableSet
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||
import org.jetbrains.kotlin.builtins.UnsignedTypes
|
||||
import org.jetbrains.kotlin.config.LanguageFeature
|
||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
@@ -921,7 +922,9 @@ class DeclarationsChecker(
|
||||
val nullableNothing = callableDescriptor.builtIns.nullableNothingType
|
||||
for (parameter in varargParameters) {
|
||||
val varargElementType = parameter.varargElementType!!.upperIfFlexible()
|
||||
if (KotlinTypeChecker.DEFAULT.isSubtypeOf(varargElementType, nullableNothing) || varargElementType.isInlineClassType()) {
|
||||
if (KotlinTypeChecker.DEFAULT.isSubtypeOf(varargElementType, nullableNothing) ||
|
||||
(varargElementType.isInlineClassType() && !UnsignedTypes.isUnsignedType(varargElementType))
|
||||
) {
|
||||
val parameterDeclaration = DescriptorToSourceUtils.descriptorToDeclaration(parameter) as? KtParameter ?: continue
|
||||
trace.report(FORBIDDEN_VARARG_PARAMETER_TYPE.on(parameterDeclaration, varargElementType))
|
||||
}
|
||||
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
// !LANGUAGE: +InlineClasses
|
||||
// !SKIP_METADATA_VERSION_CHECK
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
|
||||
fun ubyte(vararg a: UByte) {}
|
||||
fun ushort(vararg a: UShort) {}
|
||||
fun uint(vararg a: UInt) {}
|
||||
fun ulong(vararg a: ULong) {}
|
||||
|
||||
class ValueParam(vararg val a: ULong)
|
||||
|
||||
annotation class Ann(vararg val a: <!INVALID_TYPE_OF_ANNOTATION_MEMBER!>UInt<!>)
|
||||
|
||||
fun array(<!FORBIDDEN_VARARG_PARAMETER_TYPE!>vararg<!> a: UIntArray) {}
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
package
|
||||
|
||||
public fun array(/*0*/ vararg a: kotlin.UIntArray /*kotlin.Array<out kotlin.UIntArray>*/): kotlin.Unit
|
||||
public fun ubyte(/*0*/ vararg a: kotlin.UByte /*kotlin.Array<out kotlin.UByte>*/): kotlin.Unit
|
||||
public fun uint(/*0*/ vararg a: kotlin.UInt /*kotlin.Array<out kotlin.UInt>*/): kotlin.Unit
|
||||
public fun ulong(/*0*/ vararg a: kotlin.ULong /*kotlin.Array<out kotlin.ULong>*/): kotlin.Unit
|
||||
public fun ushort(/*0*/ vararg a: kotlin.UShort /*kotlin.Array<out kotlin.UShort>*/): kotlin.Unit
|
||||
|
||||
public final annotation class Ann : kotlin.Annotation {
|
||||
public constructor Ann(/*0*/ vararg a: kotlin.UInt /*kotlin.Array<out kotlin.UInt>*/)
|
||||
public final val a: kotlin.Array<out kotlin.UInt>
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public final class ValueParam {
|
||||
public constructor ValueParam(/*0*/ vararg a: kotlin.ULong /*kotlin.Array<out kotlin.ULong>*/)
|
||||
public final val a: kotlin.Array<out kotlin.ULong>
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
+5
@@ -29,6 +29,11 @@ public class DiagnosticsWithUnsignedTypesGenerated extends AbstractDiagnosticsWi
|
||||
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/diagnostics/testsWithUnsignedTypes"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.ANY, true);
|
||||
}
|
||||
|
||||
@TestMetadata("allowedVarargsOfUnsignedTypes.kt")
|
||||
public void testAllowedVarargsOfUnsignedTypes() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/testsWithUnsignedTypes/allowedVarargsOfUnsignedTypes.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("forbiddenEqualsOnUnsignedTypes.kt")
|
||||
public void testForbiddenEqualsOnUnsignedTypes() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/testsWithUnsignedTypes/forbiddenEqualsOnUnsignedTypes.kt");
|
||||
|
||||
Reference in New Issue
Block a user