Fixed error reporting for special constructions (if, elvis)
Track whether an error was reported for sub expressions (like 'if' branches) or it should be reported for the whole expression #KT-6189 Fixed
This commit is contained in:
@@ -0,0 +1,13 @@
|
||||
// !DIAGNOSTICS: -USELESS_ELVIS
|
||||
|
||||
fun test() {
|
||||
bar(if (true) {
|
||||
<!CONSTANT_EXPECTED_TYPE_MISMATCH!>1<!>
|
||||
} else {
|
||||
<!CONSTANT_EXPECTED_TYPE_MISMATCH!>2<!>
|
||||
})
|
||||
|
||||
bar(<!CONSTANT_EXPECTED_TYPE_MISMATCH!>1<!> ?: <!CONSTANT_EXPECTED_TYPE_MISMATCH!>2<!>)
|
||||
}
|
||||
|
||||
fun bar(s: String) = s
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
DescriptorResolver@0 {
|
||||
<name not found> = JetTypeImpl@1['String']
|
||||
}
|
||||
|
||||
LazyJavaPackageFragmentProvider@2 {
|
||||
packageFragments('<root>': FqName@3) = LazyJavaPackageFragment@4['<root>']
|
||||
packageFragments('String': FqName@5) = null
|
||||
packageFragments('java': FqName@6) = LazyJavaPackageFragment@7['java']
|
||||
packageFragments('java.lang': FqName@8) = LazyJavaPackageFragment@9['lang']
|
||||
packageFragments('java.lang.String': FqName@10) = null
|
||||
packageFragments('kotlin': FqName@11) = null
|
||||
packageFragments('kotlin.String': FqName@12) = null
|
||||
packageFragments('kotlin.io': FqName@13) = null
|
||||
packageFragments('kotlin.jvm': FqName@14) = null
|
||||
}
|
||||
|
||||
LazyJavaPackageFragment@4['<root>'] {
|
||||
classes('String': Name@15) = null // through LazyPackageFragmentScopeForJavaPackage@16
|
||||
classes('bar': Name@17) = null // through LazyPackageFragmentScopeForJavaPackage@16
|
||||
deserializedPackageScope = Empty@18 // through LazyPackageFragmentScopeForJavaPackage@16
|
||||
functions('bar': Name@17) = EmptyList@19[empty] // through LazyPackageFragmentScopeForJavaPackage@16
|
||||
memberIndex = computeMemberIndex$1@20 // through LazyPackageFragmentScopeForJavaPackage@16
|
||||
}
|
||||
|
||||
LazyJavaPackageFragment@7['java'] {
|
||||
classes('lang': Name@21) = null // through LazyPackageFragmentScopeForJavaPackage@22
|
||||
deserializedPackageScope = Empty@18 // through LazyPackageFragmentScopeForJavaPackage@22
|
||||
functions('lang': Name@23) = EmptyList@19[empty] // through LazyPackageFragmentScopeForJavaPackage@22
|
||||
memberIndex = computeMemberIndex$1@24 // through LazyPackageFragmentScopeForJavaPackage@22
|
||||
}
|
||||
|
||||
LazyJavaPackageFragment@9['lang'] {
|
||||
classes('bar': Name@17) = null // through LazyPackageFragmentScopeForJavaPackage@25
|
||||
deserializedPackageScope = Empty@18 // through LazyPackageFragmentScopeForJavaPackage@25
|
||||
functions('bar': Name@17) = EmptyList@19[empty] // through LazyPackageFragmentScopeForJavaPackage@25
|
||||
memberIndex = computeMemberIndex$1@26 // through LazyPackageFragmentScopeForJavaPackage@25
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
package
|
||||
|
||||
internal fun bar(/*0*/ s: kotlin.String): kotlin.String
|
||||
internal fun test(): kotlin.Unit
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
// !DIAGNOSTICS: -UNUSED_VARIABLE
|
||||
|
||||
trait A
|
||||
trait B
|
||||
|
||||
trait C: A, B
|
||||
trait D: A, B
|
||||
trait E: A, B
|
||||
|
||||
fun foo(c: C?, d: D?, e: E?) {
|
||||
val a: A? = <!TYPE_MISMATCH!>c ?: d<!> ?: e
|
||||
|
||||
val b: B? = if (false) <!TYPE_MISMATCH!>if (true) c else d<!> else e
|
||||
|
||||
//outer elvis operator and if-expression have error types
|
||||
}
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
LazyJavaPackageFragmentProvider@0 {
|
||||
packageFragments('<root>': FqName@1) = LazyJavaPackageFragment@2['<root>']
|
||||
packageFragments('A': FqName@3) = null
|
||||
packageFragments('B': FqName@4) = null
|
||||
packageFragments('C': FqName@5) = null
|
||||
packageFragments('D': FqName@6) = null
|
||||
packageFragments('E': FqName@7) = null
|
||||
packageFragments('java': FqName@8) = LazyJavaPackageFragment@9['java']
|
||||
packageFragments('java.lang': FqName@10) = LazyJavaPackageFragment@11['lang']
|
||||
packageFragments('java.lang.A': FqName@12) = null
|
||||
packageFragments('java.lang.B': FqName@13) = null
|
||||
packageFragments('java.lang.C': FqName@14) = null
|
||||
packageFragments('java.lang.D': FqName@15) = null
|
||||
packageFragments('java.lang.E': FqName@16) = null
|
||||
packageFragments('kotlin': FqName@17) = null
|
||||
packageFragments('kotlin.A': FqName@18) = null
|
||||
packageFragments('kotlin.B': FqName@19) = null
|
||||
packageFragments('kotlin.C': FqName@20) = null
|
||||
packageFragments('kotlin.D': FqName@21) = null
|
||||
packageFragments('kotlin.E': FqName@22) = null
|
||||
packageFragments('kotlin.io': FqName@23) = null
|
||||
packageFragments('kotlin.jvm': FqName@24) = null
|
||||
}
|
||||
|
||||
LazyJavaPackageFragment@9['java'] {
|
||||
classes('lang': Name@25) = null // through LazyPackageFragmentScopeForJavaPackage@26
|
||||
deserializedPackageScope = Empty@27 // through LazyPackageFragmentScopeForJavaPackage@26
|
||||
functions('lang': Name@28) = EmptyList@29[empty] // through LazyPackageFragmentScopeForJavaPackage@26
|
||||
memberIndex = computeMemberIndex$1@30 // through LazyPackageFragmentScopeForJavaPackage@26
|
||||
}
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
package
|
||||
|
||||
internal fun foo(/*0*/ c: C?, /*1*/ d: D?, /*2*/ e: E?): kotlin.Unit
|
||||
|
||||
internal trait A {
|
||||
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
|
||||
}
|
||||
|
||||
internal trait B {
|
||||
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
|
||||
}
|
||||
|
||||
internal trait C : A, B {
|
||||
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
internal trait D : A, B {
|
||||
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
internal trait E : A, B {
|
||||
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
Reference in New Issue
Block a user