Introduce UNUSED_ANONYMOUS_PARAMETER for anonymous functions
It is not reported for 1.0 language version because renaming to _ is not possible. It has weak warning severity So #KT-8813 Fixed So #KT-16875 Fixed
This commit is contained in:
@@ -646,8 +646,8 @@ class ControlFlowInformationProvider private constructor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
is KtFunction -> {
|
is KtFunction -> {
|
||||||
if (owner is KtFunctionLiteral &&
|
val anonymous = owner is KtFunctionLiteral || owner is KtNamedFunction && owner.name == null
|
||||||
!languageVersionSettings.supportsFeature(LanguageFeature.SingleUnderscoreForParameterName)) {
|
if (anonymous && !languageVersionSettings.supportsFeature(LanguageFeature.SingleUnderscoreForParameterName)) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
val mainFunctionDetector = MainFunctionDetector(trace.bindingContext)
|
val mainFunctionDetector = MainFunctionDetector(trace.bindingContext)
|
||||||
@@ -666,7 +666,12 @@ class ControlFlowInformationProvider private constructor(
|
|||||||
|| OperatorNameConventions.PROVIDE_DELEGATE == functionName) {
|
|| OperatorNameConventions.PROVIDE_DELEGATE == functionName) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
report(UNUSED_PARAMETER.on(element, variableDescriptor), ctxt)
|
if (anonymous) {
|
||||||
|
report(UNUSED_ANONYMOUS_PARAMETER.on(element, variableDescriptor), ctxt)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
report(UNUSED_PARAMETER.on(element, variableDescriptor), ctxt)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1121,6 +1126,7 @@ class ControlFlowInformationProvider private constructor(
|
|||||||
private fun mustBeReportedOnAllCopies(diagnosticFactory: DiagnosticFactory<*>) =
|
private fun mustBeReportedOnAllCopies(diagnosticFactory: DiagnosticFactory<*>) =
|
||||||
diagnosticFactory === UNUSED_VARIABLE
|
diagnosticFactory === UNUSED_VARIABLE
|
||||||
|| diagnosticFactory === UNUSED_PARAMETER
|
|| diagnosticFactory === UNUSED_PARAMETER
|
||||||
|
|| diagnosticFactory === UNUSED_ANONYMOUS_PARAMETER
|
||||||
|| diagnosticFactory === UNUSED_CHANGED_VALUE
|
|| diagnosticFactory === UNUSED_CHANGED_VALUE
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -744,6 +744,7 @@ public interface Errors {
|
|||||||
|
|
||||||
DiagnosticFactory1<KtNamedDeclaration, VariableDescriptor> UNUSED_VARIABLE = DiagnosticFactory1.create(WARNING, DECLARATION_NAME);
|
DiagnosticFactory1<KtNamedDeclaration, VariableDescriptor> UNUSED_VARIABLE = DiagnosticFactory1.create(WARNING, DECLARATION_NAME);
|
||||||
DiagnosticFactory1<KtParameter, VariableDescriptor> UNUSED_PARAMETER = DiagnosticFactory1.create(WARNING, DECLARATION_NAME);
|
DiagnosticFactory1<KtParameter, VariableDescriptor> UNUSED_PARAMETER = DiagnosticFactory1.create(WARNING, DECLARATION_NAME);
|
||||||
|
DiagnosticFactory1<KtParameter, VariableDescriptor> UNUSED_ANONYMOUS_PARAMETER = DiagnosticFactory1.create(WARNING, DECLARATION_NAME);
|
||||||
DiagnosticFactory1<KtDestructuringDeclarationEntry, VariableDescriptor> UNUSED_DESTRUCTURED_PARAMETER_ENTRY =
|
DiagnosticFactory1<KtDestructuringDeclarationEntry, VariableDescriptor> UNUSED_DESTRUCTURED_PARAMETER_ENTRY =
|
||||||
DiagnosticFactory1.create(WARNING, DECLARATION_NAME);
|
DiagnosticFactory1.create(WARNING, DECLARATION_NAME);
|
||||||
DiagnosticFactory2<KtTypeParameter, TypeParameterDescriptor, KotlinType> UNUSED_TYPEALIAS_PARAMETER =
|
DiagnosticFactory2<KtTypeParameter, TypeParameterDescriptor, KotlinType> UNUSED_TYPEALIAS_PARAMETER =
|
||||||
|
|||||||
+1
@@ -288,6 +288,7 @@ public class DefaultErrorMessages {
|
|||||||
MAP.put(UNINITIALIZED_ENUM_COMPANION, "Companion object of enum class ''{0}'' is uninitialized here", NAME);
|
MAP.put(UNINITIALIZED_ENUM_COMPANION, "Companion object of enum class ''{0}'' is uninitialized here", NAME);
|
||||||
MAP.put(UNUSED_VARIABLE, "Variable ''{0}'' is never used", NAME);
|
MAP.put(UNUSED_VARIABLE, "Variable ''{0}'' is never used", NAME);
|
||||||
MAP.put(UNUSED_PARAMETER, "Parameter ''{0}'' is never used", NAME);
|
MAP.put(UNUSED_PARAMETER, "Parameter ''{0}'' is never used", NAME);
|
||||||
|
MAP.put(UNUSED_ANONYMOUS_PARAMETER, "Parameter ''{0}'' is never used, could be renamed to _", NAME);
|
||||||
MAP.put(UNUSED_DESTRUCTURED_PARAMETER_ENTRY, "Destructured parameter ''{0}'' is never used", NAME);
|
MAP.put(UNUSED_DESTRUCTURED_PARAMETER_ENTRY, "Destructured parameter ''{0}'' is never used", NAME);
|
||||||
MAP.put(ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE, "Variable ''{0}'' is assigned but never accessed", NAME);
|
MAP.put(ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE, "Variable ''{0}'' is assigned but never accessed", NAME);
|
||||||
MAP.put(VARIABLE_WITH_REDUNDANT_INITIALIZER, "Variable ''{0}'' initializer is redundant", NAME);
|
MAP.put(VARIABLE_WITH_REDUNDANT_INITIALIZER, "Variable ''{0}'' initializer is redundant", NAME);
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@ fun text() {
|
|||||||
"direct:a" on {it -> it.body == "<hello/>"} to "mock:a"
|
"direct:a" on {it -> it.body == "<hello/>"} to "mock:a"
|
||||||
bar <!EXPECTED_PARAMETERS_NUMBER_MISMATCH!>{<!>1}
|
bar <!EXPECTED_PARAMETERS_NUMBER_MISMATCH!>{<!>1}
|
||||||
bar <!EXPECTED_PARAMETERS_NUMBER_MISMATCH!>{<!><!UNRESOLVED_REFERENCE!>it<!> <!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>+<!> 1}
|
bar <!EXPECTED_PARAMETERS_NUMBER_MISMATCH!>{<!><!UNRESOLVED_REFERENCE!>it<!> <!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>+<!> 1}
|
||||||
bar {it, <!UNUSED_PARAMETER!>it1<!> -> it}
|
bar {it, <!UNUSED_ANONYMOUS_PARAMETER!>it1<!> -> it}
|
||||||
|
|
||||||
bar1 {1}
|
bar1 {1}
|
||||||
bar1 {it + 1}
|
bar1 {it + 1}
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER
|
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER -UNUSED_ANONYMOUS_PARAMETER
|
||||||
// TODO Uncomment all the examples when there will be no problems with light classes
|
// TODO Uncomment all the examples when there will be no problems with light classes
|
||||||
//package `foo.bar`
|
//package `foo.bar`
|
||||||
|
|
||||||
|
|||||||
@@ -36,8 +36,8 @@ fun main(args : Array<String>) {
|
|||||||
foo2()({})
|
foo2()({})
|
||||||
foo2()<!TOO_MANY_ARGUMENTS!>{}<!>
|
foo2()<!TOO_MANY_ARGUMENTS!>{}<!>
|
||||||
(foo2()){}
|
(foo2()){}
|
||||||
(foo2()){<!EXPECTED_PARAMETERS_NUMBER_MISMATCH, CANNOT_INFER_PARAMETER_TYPE, UNUSED_PARAMETER!>x<!> -> }
|
(foo2()){<!EXPECTED_PARAMETERS_NUMBER_MISMATCH, CANNOT_INFER_PARAMETER_TYPE, UNUSED_ANONYMOUS_PARAMETER!>x<!> -> }
|
||||||
foo2()({<!EXPECTED_PARAMETERS_NUMBER_MISMATCH, CANNOT_INFER_PARAMETER_TYPE, UNUSED_PARAMETER!>x<!> -> })
|
foo2()({<!EXPECTED_PARAMETERS_NUMBER_MISMATCH, CANNOT_INFER_PARAMETER_TYPE, UNUSED_ANONYMOUS_PARAMETER!>x<!> -> })
|
||||||
|
|
||||||
val a = fooT1(1)()
|
val a = fooT1(1)()
|
||||||
checkSubtype<Int>(a)
|
checkSubtype<Int>(a)
|
||||||
@@ -72,7 +72,7 @@ fun main1() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun test() {
|
fun test() {
|
||||||
{<!UNUSED_PARAMETER!>x<!> : Int -> 1}(<!NO_VALUE_FOR_PARAMETER!>)<!>;
|
{<!UNUSED_ANONYMOUS_PARAMETER!>x<!> : Int -> 1}(<!NO_VALUE_FOR_PARAMETER!>)<!>;
|
||||||
(fun Int.() = 1)(<!NO_VALUE_FOR_PARAMETER!>)<!>
|
(fun Int.() = 1)(<!NO_VALUE_FOR_PARAMETER!>)<!>
|
||||||
<!TYPE_MISMATCH!>"sd"<!>.(fun Int.() = 1)()
|
<!TYPE_MISMATCH!>"sd"<!>.(fun Int.() = 1)()
|
||||||
val i : Int? = null
|
val i : Int? = null
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE
|
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_ANONYMOUS_PARAMETER -UNUSED_VARIABLE
|
||||||
fun test(<!VALUE_PARAMETER_WITH_NO_TYPE_ANNOTATION!>a<!>) {
|
fun test(<!VALUE_PARAMETER_WITH_NO_TYPE_ANNOTATION!>a<!>) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_EXPRESSION -UNREACHABLE_CODE -UNUSED_VARIABLE -WRONG_ANNOTATION_TARGET -UNUSED_LAMBDA_EXPRESSION
|
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_ANONYMOUS_PARAMETER -UNUSED_EXPRESSION -UNREACHABLE_CODE -UNUSED_VARIABLE -WRONG_ANNOTATION_TARGET -UNUSED_LAMBDA_EXPRESSION
|
||||||
|
|
||||||
// FILE: 1.kt
|
// FILE: 1.kt
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -14,7 +14,7 @@ fun <!UNDERSCORE_IS_RESERVED!>__<!>(<!UNDERSCORE_IS_RESERVED!>___<!>: Int, y: <!
|
|||||||
// in backquotes: allowed
|
// in backquotes: allowed
|
||||||
val `_` = <!UNDERSCORE_USAGE_WITHOUT_BACKTICKS!>__________<!>
|
val `_` = <!UNDERSCORE_USAGE_WITHOUT_BACKTICKS!>__________<!>
|
||||||
|
|
||||||
val q = fun(_: Int, <!UNDERSCORE_IS_RESERVED, UNUSED_PARAMETER!>__<!>: Int) {}
|
val q = fun(_: Int, <!UNDERSCORE_IS_RESERVED, UNUSED_ANONYMOUS_PARAMETER!>__<!>: Int) {}
|
||||||
q(1, 2)
|
q(1, 2)
|
||||||
|
|
||||||
val <!UNDERSCORE_IS_RESERVED!>_<!> = 56
|
val <!UNDERSCORE_IS_RESERVED!>_<!> = 56
|
||||||
|
|||||||
@@ -4,4 +4,4 @@ fun test(@ann <!UNUSED_PARAMETER!>p<!>: Int) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
val bar = fun(@ann <!UNUSED_PARAMETER!>g<!>: Int) {}
|
val bar = fun(@ann <!UNUSED_ANONYMOUS_PARAMETER!>g<!>: Int) {}
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
// !LANGUAGE: -SingleUnderscoreForParameterName
|
||||||
|
// See KT-8813, KT-9631
|
||||||
|
|
||||||
|
fun someApi(f: (Int) -> Unit) = f(42)
|
||||||
|
|
||||||
|
fun test() {
|
||||||
|
someApi(fun(p: Int) {})
|
||||||
|
// Apparently "p" cannot be removed because the signature is fixed by "someApi
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
package
|
||||||
|
|
||||||
|
public fun someApi(/*0*/ f: (kotlin.Int) -> kotlin.Unit): kotlin.Unit
|
||||||
|
public fun test(): kotlin.Unit
|
||||||
Vendored
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE
|
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_ANONYMOUS_PARAMETER -UNUSED_VARIABLE
|
||||||
// !CHECK_TYPE
|
// !CHECK_TYPE
|
||||||
fun foo(block: () -> (() -> Int)) {}
|
fun foo(block: () -> (() -> Int)) {}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE
|
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_ANONYMOUS_PARAMETER -UNUSED_VARIABLE
|
||||||
// !CHECK_TYPE
|
// !CHECK_TYPE
|
||||||
fun foo(block: () -> (() -> Int)) {}
|
fun foo(block: () -> (() -> Int)) {}
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE
|
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_ANONYMOUS_PARAMETER -UNUSED_VARIABLE
|
||||||
|
|
||||||
fun <T, R> Iterable<T>.map(transform: (T) -> R): List<R> = null!!
|
fun <T, R> Iterable<T>.map(transform: (T) -> R): List<R> = null!!
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
// !CHECK_TYPE
|
// !CHECK_TYPE
|
||||||
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE
|
// !DIAGNOSTICS: -UNUSED_ANONYMOUS_PARAMETER -UNUSED_VARIABLE
|
||||||
|
|
||||||
fun testReturnType(foo: String) {
|
fun testReturnType(foo: String) {
|
||||||
val bar = fun () = foo
|
val bar = fun () = foo
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
// !CHECK_TYPE
|
// !CHECK_TYPE
|
||||||
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE
|
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_ANONYMOUS_PARAMETER -UNUSED_VARIABLE
|
||||||
fun <T> listOf(): List<T> = null!!
|
fun <T> listOf(): List<T> = null!!
|
||||||
|
|
||||||
fun test(a: (Int) -> Int) {
|
fun test(a: (Int) -> Int) {
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
// !CHECK_TYPE
|
// !CHECK_TYPE
|
||||||
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE
|
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_ANONYMOUS_PARAMETER -UNUSED_VARIABLE
|
||||||
|
|
||||||
val a = fun (<!CANNOT_INFER_PARAMETER_TYPE!>x<!>) = <!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>x<!>
|
val a = fun (<!CANNOT_INFER_PARAMETER_TYPE!>x<!>) = <!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>x<!>
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE
|
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_ANONYMOUS_PARAMETER -UNUSED_VARIABLE
|
||||||
|
|
||||||
val bar = fun(p: Int = <!ANONYMOUS_FUNCTION_PARAMETER_WITH_DEFAULT_VALUE!>3<!>) {}
|
val bar = fun(p: Int = <!ANONYMOUS_FUNCTION_PARAMETER_WITH_DEFAULT_VALUE!>3<!>) {}
|
||||||
val bas = fun(<!USELESS_VARARG_ON_PARAMETER!>vararg p: Int<!>) {}
|
val bas = fun(<!USELESS_VARARG_ON_PARAMETER!>vararg p: Int<!>) {}
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_ANONYMOUS_PARAMETER
|
||||||
|
|
||||||
interface A
|
interface A
|
||||||
fun devNull(a: Any?){}
|
fun devNull(a: Any?){}
|
||||||
|
|||||||
@@ -17,8 +17,8 @@ val none = { -> }
|
|||||||
|
|
||||||
val parameterWithFunctionType = { a: ((Int) -> Int) -> <!SYNTAX!><!>} // todo fix parser
|
val parameterWithFunctionType = { a: ((Int) -> Int) -> <!SYNTAX!><!>} // todo fix parser
|
||||||
|
|
||||||
val newSyntax = { <!UNUSED_PARAMETER!>a<!>: Int -> }
|
val newSyntax = { <!UNUSED_ANONYMOUS_PARAMETER!>a<!>: Int -> }
|
||||||
val newSyntax1 = { <!CANNOT_INFER_PARAMETER_TYPE, UNUSED_PARAMETER!>a<!>, <!CANNOT_INFER_PARAMETER_TYPE, UNUSED_PARAMETER!>b<!> -> }
|
val newSyntax1 = { <!CANNOT_INFER_PARAMETER_TYPE, UNUSED_ANONYMOUS_PARAMETER!>a<!>, <!CANNOT_INFER_PARAMETER_TYPE, UNUSED_ANONYMOUS_PARAMETER!>b<!> -> }
|
||||||
val newSyntax2 = { <!UNUSED_PARAMETER!>a<!>: Int, <!UNUSED_PARAMETER!>b<!>: Int -> }
|
val newSyntax2 = { <!UNUSED_ANONYMOUS_PARAMETER!>a<!>: Int, <!UNUSED_ANONYMOUS_PARAMETER!>b<!>: Int -> }
|
||||||
val newSyntax3 = { <!CANNOT_INFER_PARAMETER_TYPE, UNUSED_PARAMETER!>a<!>, <!UNUSED_PARAMETER!>b<!>: Int -> }
|
val newSyntax3 = { <!CANNOT_INFER_PARAMETER_TYPE, UNUSED_ANONYMOUS_PARAMETER!>a<!>, <!UNUSED_ANONYMOUS_PARAMETER!>b<!>: Int -> }
|
||||||
val newSyntax4 = { <!UNUSED_PARAMETER!>a<!>: Int, <!CANNOT_INFER_PARAMETER_TYPE, UNUSED_PARAMETER!>b<!> -> }
|
val newSyntax4 = { <!UNUSED_ANONYMOUS_PARAMETER!>a<!>: Int, <!CANNOT_INFER_PARAMETER_TYPE, UNUSED_ANONYMOUS_PARAMETER!>b<!> -> }
|
||||||
|
|||||||
Vendored
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
// !DIAGNOSTICS: -UNUSED_ANONYMOUS_PARAMETER
|
||||||
package a
|
package a
|
||||||
|
|
||||||
interface Super
|
interface Super
|
||||||
|
|||||||
+6
-6
@@ -9,20 +9,20 @@ fun test1() {
|
|||||||
""
|
""
|
||||||
}
|
}
|
||||||
foo0 {
|
foo0 {
|
||||||
<!EXPECTED_PARAMETERS_NUMBER_MISMATCH!><!UNUSED_PARAMETER!>s<!>: String<!>-> ""
|
<!EXPECTED_PARAMETERS_NUMBER_MISMATCH!><!UNUSED_ANONYMOUS_PARAMETER!>s<!>: String<!>-> ""
|
||||||
}
|
}
|
||||||
foo0 {
|
foo0 {
|
||||||
<!EXPECTED_PARAMETERS_NUMBER_MISMATCH!><!CANNOT_INFER_PARAMETER_TYPE, UNUSED_PARAMETER!>x<!>, <!CANNOT_INFER_PARAMETER_TYPE, UNUSED_PARAMETER!>y<!><!> -> ""
|
<!EXPECTED_PARAMETERS_NUMBER_MISMATCH!><!CANNOT_INFER_PARAMETER_TYPE, UNUSED_ANONYMOUS_PARAMETER!>x<!>, <!CANNOT_INFER_PARAMETER_TYPE, UNUSED_ANONYMOUS_PARAMETER!>y<!><!> -> ""
|
||||||
}
|
}
|
||||||
|
|
||||||
foo1 {
|
foo1 {
|
||||||
""
|
""
|
||||||
}
|
}
|
||||||
foo1 {
|
foo1 {
|
||||||
<!EXPECTED_PARAMETER_TYPE_MISMATCH!><!UNUSED_PARAMETER!>s<!>: String<!> -> ""
|
<!EXPECTED_PARAMETER_TYPE_MISMATCH!><!UNUSED_ANONYMOUS_PARAMETER!>s<!>: String<!> -> ""
|
||||||
}
|
}
|
||||||
foo1 {
|
foo1 {
|
||||||
<!EXPECTED_PARAMETERS_NUMBER_MISMATCH!><!UNUSED_PARAMETER!>x<!>, <!CANNOT_INFER_PARAMETER_TYPE, UNUSED_PARAMETER!>y<!><!> -> ""
|
<!EXPECTED_PARAMETERS_NUMBER_MISMATCH!><!UNUSED_ANONYMOUS_PARAMETER!>x<!>, <!CANNOT_INFER_PARAMETER_TYPE, UNUSED_ANONYMOUS_PARAMETER!>y<!><!> -> ""
|
||||||
}
|
}
|
||||||
foo1 {
|
foo1 {
|
||||||
<!EXPECTED_PARAMETERS_NUMBER_MISMATCH!><!>-> <!CONSTANT_EXPECTED_TYPE_MISMATCH!>42<!>
|
<!EXPECTED_PARAMETERS_NUMBER_MISMATCH!><!>-> <!CONSTANT_EXPECTED_TYPE_MISMATCH!>42<!>
|
||||||
@@ -33,10 +33,10 @@ fun test1() {
|
|||||||
""
|
""
|
||||||
}
|
}
|
||||||
foo2 {
|
foo2 {
|
||||||
<!EXPECTED_PARAMETERS_NUMBER_MISMATCH, EXPECTED_PARAMETER_TYPE_MISMATCH!><!UNUSED_PARAMETER!>s<!>: String<!> -> ""
|
<!EXPECTED_PARAMETERS_NUMBER_MISMATCH, EXPECTED_PARAMETER_TYPE_MISMATCH!><!UNUSED_ANONYMOUS_PARAMETER!>s<!>: String<!> -> ""
|
||||||
}
|
}
|
||||||
foo2 {
|
foo2 {
|
||||||
<!EXPECTED_PARAMETERS_NUMBER_MISMATCH, UNUSED_PARAMETER!>x<!> -> ""
|
<!EXPECTED_PARAMETERS_NUMBER_MISMATCH, UNUSED_ANONYMOUS_PARAMETER!>x<!> -> ""
|
||||||
}
|
}
|
||||||
foo2 {
|
foo2 {
|
||||||
<!EXPECTED_PARAMETERS_NUMBER_MISMATCH!><!>-> <!CONSTANT_EXPECTED_TYPE_MISMATCH!>42<!>
|
<!EXPECTED_PARAMETERS_NUMBER_MISMATCH!><!>-> <!CONSTANT_EXPECTED_TYPE_MISMATCH!>42<!>
|
||||||
|
|||||||
Vendored
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
// !CHECK_TYPE
|
// !CHECK_TYPE
|
||||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_ANONYMOUS_PARAMETER
|
||||||
data class A(val x: Int, val y: String)
|
data class A(val x: Int, val y: String)
|
||||||
data class B(val u: Double, val w: Short)
|
data class B(val u: Double, val w: Short)
|
||||||
|
|
||||||
|
|||||||
Vendored
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
// !CHECK_TYPE
|
// !CHECK_TYPE
|
||||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_ANONYMOUS_PARAMETER
|
||||||
data class A(val x: Int, val y: String)
|
data class A(val x: Int, val y: String)
|
||||||
data class B(val u: Double, val w: Short)
|
data class B(val u: Double, val w: Short)
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -40,9 +40,9 @@ fun bar() {
|
|||||||
_ checkType { _<String>() }
|
_ checkType { _<String>() }
|
||||||
}
|
}
|
||||||
|
|
||||||
foo { <!REDECLARATION, REDECLARATION, UNUSED_PARAMETER!>`_`<!>, <!REDECLARATION, REDECLARATION!>`_`<!> ->
|
foo { <!REDECLARATION, REDECLARATION, UNUSED_ANONYMOUS_PARAMETER!>`_`<!>, <!REDECLARATION, REDECLARATION!>`_`<!> ->
|
||||||
_ checkType { _<String>() }
|
_ checkType { _<String>() }
|
||||||
}
|
}
|
||||||
|
|
||||||
foo(fun(<!UNUSED_PARAMETER!>x<!>: Int, _: String) {})
|
foo(fun(<!UNUSED_ANONYMOUS_PARAMETER!>x<!>: Int, _: String) {})
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_ANONYMOUS_PARAMETER
|
||||||
// !CHECK_TYPE
|
// !CHECK_TYPE
|
||||||
|
|
||||||
// FILE: Clazz.java
|
// FILE: Clazz.java
|
||||||
|
|||||||
Vendored
+1
-1
@@ -3,4 +3,4 @@ package f
|
|||||||
fun <R> h(<!UNUSED_PARAMETER!>i<!>: Int, <!UNUSED_PARAMETER!>a<!>: Any, <!UNUSED_PARAMETER!>r<!>: R, <!UNUSED_PARAMETER!>f<!>: (Boolean) -> Int) = 1
|
fun <R> h(<!UNUSED_PARAMETER!>i<!>: Int, <!UNUSED_PARAMETER!>a<!>: Any, <!UNUSED_PARAMETER!>r<!>: R, <!UNUSED_PARAMETER!>f<!>: (Boolean) -> Int) = 1
|
||||||
fun <R> h(<!UNUSED_PARAMETER!>a<!>: Any, <!UNUSED_PARAMETER!>i<!>: Int, <!UNUSED_PARAMETER!>r<!>: R, <!UNUSED_PARAMETER!>f<!>: (Boolean) -> Int) = 1
|
fun <R> h(<!UNUSED_PARAMETER!>a<!>: Any, <!UNUSED_PARAMETER!>i<!>: Int, <!UNUSED_PARAMETER!>r<!>: R, <!UNUSED_PARAMETER!>f<!>: (Boolean) -> Int) = 1
|
||||||
|
|
||||||
fun test() = <!CANNOT_COMPLETE_RESOLVE!>h<!>(1, 1, 1, { <!CANNOT_INFER_PARAMETER_TYPE, UNUSED_PARAMETER!>b<!> -> 42 })
|
fun test() = <!CANNOT_COMPLETE_RESOLVE!>h<!>(1, 1, 1, { <!CANNOT_INFER_PARAMETER_TYPE, UNUSED_ANONYMOUS_PARAMETER!>b<!> -> 42 })
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@ package f
|
|||||||
fun <R> h(<!UNUSED_PARAMETER!>f<!>: (Boolean) -> R) = 1
|
fun <R> h(<!UNUSED_PARAMETER!>f<!>: (Boolean) -> R) = 1
|
||||||
fun <R> h(<!UNUSED_PARAMETER!>f<!>: (String) -> R) = 2
|
fun <R> h(<!UNUSED_PARAMETER!>f<!>: (String) -> R) = 2
|
||||||
|
|
||||||
fun test() = <!CANNOT_COMPLETE_RESOLVE!>h<!>{ <!CANNOT_INFER_PARAMETER_TYPE, UNUSED_PARAMETER!>i<!> -> getAnswer() }
|
fun test() = <!CANNOT_COMPLETE_RESOLVE!>h<!>{ <!CANNOT_INFER_PARAMETER_TYPE, UNUSED_ANONYMOUS_PARAMETER!>i<!> -> getAnswer() }
|
||||||
|
|
||||||
fun getAnswer() = 42
|
fun getAnswer() = 42
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -5,7 +5,7 @@ import java.util.*
|
|||||||
import java.util.Collections.*
|
import java.util.Collections.*
|
||||||
|
|
||||||
fun foo(list: List<String>) : String {
|
fun foo(list: List<String>) : String {
|
||||||
val w : String = max(list, comparator<String?> {<!UNUSED_PARAMETER!>o1<!>, <!UNUSED_PARAMETER!>o2<!> -> 1
|
val w : String = max(list, comparator<String?> {<!UNUSED_ANONYMOUS_PARAMETER!>o1<!>, <!UNUSED_ANONYMOUS_PARAMETER!>o2<!> -> 1
|
||||||
})
|
})
|
||||||
return w
|
return w
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_ANONYMOUS_PARAMETER
|
||||||
|
|
||||||
fun <T, R : Any> foo(body: (R?) -> T): T = fail()
|
fun <T, R : Any> foo(body: (R?) -> T): T = fail()
|
||||||
|
|
||||||
|
|||||||
@@ -9,5 +9,5 @@ fun <A, B> Foo<A>.map(<!UNUSED_PARAMETER!>f<!>: (A) -> B): Foo<B> = object : Foo
|
|||||||
|
|
||||||
fun foo() {
|
fun foo() {
|
||||||
val l: Foo<String> = object : Foo<String> {}
|
val l: Foo<String> = object : Foo<String> {}
|
||||||
val <!UNUSED_VARIABLE!>m<!>: Foo<String> = l.<!TYPE_INFERENCE_EXPECTED_TYPE_MISMATCH!>map { <!UNUSED_PARAMETER!>ppp<!> -> 1 }<!>
|
val <!UNUSED_VARIABLE!>m<!>: Foo<String> = l.<!TYPE_INFERENCE_EXPECTED_TYPE_MISMATCH!>map { <!UNUSED_ANONYMOUS_PARAMETER!>ppp<!> -> 1 }<!>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,5 +7,5 @@ fun <T> _arrayList(vararg <!UNUSED_PARAMETER!>values<!>: T) : List<T> = throw Ex
|
|||||||
class _Pair<A>(val a: A)
|
class _Pair<A>(val a: A)
|
||||||
|
|
||||||
fun test() {
|
fun test() {
|
||||||
_arrayList(_Pair(1))._sortBy { <!UNUSED_PARAMETER!>it<!> -> <!UNRESOLVED_REFERENCE!>xxx<!> }
|
_arrayList(_Pair(1))._sortBy { <!UNUSED_ANONYMOUS_PARAMETER!>it<!> -> <!UNRESOLVED_REFERENCE!>xxx<!> }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ public inline fun <T: Closeable, R> T.use1(block: (T)-> R) : R {
|
|||||||
|
|
||||||
fun main(args: Array<String>) {
|
fun main(args: Array<String>) {
|
||||||
C().use1 {
|
C().use1 {
|
||||||
<!UNUSED_PARAMETER!>w<!> -> // ERROR here
|
<!UNUSED_ANONYMOUS_PARAMETER!>w<!> -> // ERROR here
|
||||||
<!UNRESOLVED_REFERENCE!>x<!>
|
<!UNRESOLVED_REFERENCE!>x<!>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ enum class SomeEnum {
|
|||||||
|
|
||||||
// Doesn't work
|
// Doesn't work
|
||||||
fun Iterable<Int>.some() {
|
fun Iterable<Int>.some() {
|
||||||
this.fold(SomeEnum.FIRST, {res : SomeEnum, <!UNUSED_PARAMETER!>value<!> ->
|
this.fold(SomeEnum.FIRST, {res : SomeEnum, <!UNUSED_ANONYMOUS_PARAMETER!>value<!> ->
|
||||||
if (res == SomeEnum.FIRST) SomeEnum.FIRST else SomeEnum.SECOND
|
if (res == SomeEnum.FIRST) SomeEnum.FIRST else SomeEnum.SECOND
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -19,7 +19,7 @@ fun tempFun() : SomeEnum {
|
|||||||
|
|
||||||
// Doesn't work
|
// Doesn't work
|
||||||
fun Iterable<Int>.someSimpleWithFun() {
|
fun Iterable<Int>.someSimpleWithFun() {
|
||||||
this.fold(SomeEnum.FIRST, {<!UNUSED_PARAMETER!>res<!> : SomeEnum, <!UNUSED_PARAMETER!>value<!> ->
|
this.fold(SomeEnum.FIRST, {<!UNUSED_ANONYMOUS_PARAMETER!>res<!> : SomeEnum, <!UNUSED_ANONYMOUS_PARAMETER!>value<!> ->
|
||||||
tempFun()
|
tempFun()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -27,14 +27,14 @@ fun Iterable<Int>.someSimpleWithFun() {
|
|||||||
|
|
||||||
// Works
|
// Works
|
||||||
fun Iterable<Int>.someSimple() {
|
fun Iterable<Int>.someSimple() {
|
||||||
this.fold(SomeEnum.FIRST, {<!UNUSED_PARAMETER!>res<!> : SomeEnum, <!UNUSED_PARAMETER!>value<!> ->
|
this.fold(SomeEnum.FIRST, {<!UNUSED_ANONYMOUS_PARAMETER!>res<!> : SomeEnum, <!UNUSED_ANONYMOUS_PARAMETER!>value<!> ->
|
||||||
SomeEnum.FIRST
|
SomeEnum.FIRST
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// Works
|
// Works
|
||||||
fun Iterable<Int>.someInt() {
|
fun Iterable<Int>.someInt() {
|
||||||
this.fold(0, {res : Int, <!UNUSED_PARAMETER!>value<!> ->
|
this.fold(0, {res : Int, <!UNUSED_ANONYMOUS_PARAMETER!>value<!> ->
|
||||||
if (res == 0) 1 else 0
|
if (res == 0) 1 else 0
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,10 +15,10 @@ fun SomeTemplate.query(f: (i: Int) -> Unit) = f
|
|||||||
fun SomeTemplate.query1(f: (i: Int) -> Unit) = f
|
fun SomeTemplate.query1(f: (i: Int) -> Unit) = f
|
||||||
|
|
||||||
fun test() {
|
fun test() {
|
||||||
val mapperFunction = { <!UNUSED_PARAMETER!>i<!>: Int -> }
|
val mapperFunction = { <!UNUSED_ANONYMOUS_PARAMETER!>i<!>: Int -> }
|
||||||
SomeTemplate().query(mapperFunction)
|
SomeTemplate().query(mapperFunction)
|
||||||
|
|
||||||
// TYPE_MISMATCH: Required Class<[ERROR: CANT_INFER]>, Found (kotlin.Int) -> Unit
|
// TYPE_MISMATCH: Required Class<[ERROR: CANT_INFER]>, Found (kotlin.Int) -> Unit
|
||||||
SomeTemplate().query { <!UNUSED_PARAMETER!>i<!>: Int -> }
|
SomeTemplate().query { <!UNUSED_ANONYMOUS_PARAMETER!>i<!>: Int -> }
|
||||||
SomeTemplate().query1 { <!UNUSED_PARAMETER!>i<!>: Int -> }
|
SomeTemplate().query1 { <!UNUSED_ANONYMOUS_PARAMETER!>i<!>: Int -> }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_ANONYMOUS_PARAMETER
|
||||||
// KT-8132 Can't omit lambda parameter types
|
// KT-8132 Can't omit lambda parameter types
|
||||||
|
|
||||||
fun <T> test(foo: List<T>): T {
|
fun <T> test(foo: List<T>): T {
|
||||||
|
|||||||
Vendored
+1
-1
@@ -3,7 +3,7 @@ package a
|
|||||||
fun <T, R, S> foo(block: (T)-> R, <!UNUSED_PARAMETER!>second<!>: (T)-> S) = block
|
fun <T, R, S> foo(block: (T)-> R, <!UNUSED_PARAMETER!>second<!>: (T)-> S) = block
|
||||||
|
|
||||||
fun main(args: Array<String>) {
|
fun main(args: Array<String>) {
|
||||||
val fff = { <!UNUSED_PARAMETER!>x<!>: Int -> <!UNRESOLVED_REFERENCE!>aaa<!> }
|
val fff = { <!UNUSED_ANONYMOUS_PARAMETER!>x<!>: Int -> <!UNRESOLVED_REFERENCE!>aaa<!> }
|
||||||
foo(<!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>fff<!>, { x -> x + 1 })
|
foo(<!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>fff<!>, { x -> x + 1 })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -9,7 +9,7 @@ fun <T: Closeable, R> T.foo(block: (T, T)-> R) = block
|
|||||||
|
|
||||||
fun main(args: Array<String>) {
|
fun main(args: Array<String>) {
|
||||||
C().foo { // no ambiguity here
|
C().foo { // no ambiguity here
|
||||||
<!UNUSED_PARAMETER!>www<!> ->
|
<!UNUSED_ANONYMOUS_PARAMETER!>www<!> ->
|
||||||
<!UNRESOLVED_REFERENCE!>xs<!>
|
<!UNRESOLVED_REFERENCE!>xs<!>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -4,7 +4,7 @@ fun <T, R> foo(block: (T)-> R) = block
|
|||||||
|
|
||||||
fun test1() {
|
fun test1() {
|
||||||
<!TYPE_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>foo<!> {
|
<!TYPE_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>foo<!> {
|
||||||
<!CANNOT_INFER_PARAMETER_TYPE, UNUSED_PARAMETER!>x<!> -> // here we have 'cannot infer parameter type' error
|
<!CANNOT_INFER_PARAMETER_TYPE, UNUSED_ANONYMOUS_PARAMETER!>x<!> -> // here we have 'cannot infer parameter type' error
|
||||||
43
|
43
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -12,5 +12,5 @@ fun test1() {
|
|||||||
fun bar(<!UNUSED_PARAMETER!>f<!>: (<!UNRESOLVED_REFERENCE!>A<!>)->Unit) {}
|
fun bar(<!UNUSED_PARAMETER!>f<!>: (<!UNRESOLVED_REFERENCE!>A<!>)->Unit) {}
|
||||||
|
|
||||||
fun test2() {
|
fun test2() {
|
||||||
bar { <!UNUSED_PARAMETER!>a<!> -> } // here we don't have 'cannot infer parameter type' error
|
bar { <!UNUSED_ANONYMOUS_PARAMETER!>a<!> -> } // here we don't have 'cannot infer parameter type' error
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
// !DIAGNOSTICS: -UNUSED_ANONYMOUS_PARAMETER
|
||||||
// FILE: A.java
|
// FILE: A.java
|
||||||
public class A<K, V> {
|
public class A<K, V> {
|
||||||
public void foo(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction) {
|
public void foo(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction) {
|
||||||
|
|||||||
Vendored
+2
-2
@@ -16,12 +16,12 @@ public class A {
|
|||||||
// FILE: main.kt
|
// FILE: main.kt
|
||||||
fun main() {
|
fun main() {
|
||||||
A().foo <!TYPE_MISMATCH!>{
|
A().foo <!TYPE_MISMATCH!>{
|
||||||
<!CANNOT_INFER_PARAMETER_TYPE, UNUSED_PARAMETER!>x<!> ->
|
<!CANNOT_INFER_PARAMETER_TYPE, UNUSED_ANONYMOUS_PARAMETER!>x<!> ->
|
||||||
""
|
""
|
||||||
}<!>
|
}<!>
|
||||||
|
|
||||||
A.bar <!TYPE_MISMATCH!>{
|
A.bar <!TYPE_MISMATCH!>{
|
||||||
<!CANNOT_INFER_PARAMETER_TYPE, UNUSED_PARAMETER!>x<!> ->
|
<!CANNOT_INFER_PARAMETER_TYPE, UNUSED_ANONYMOUS_PARAMETER!>x<!> ->
|
||||||
""
|
""
|
||||||
}<!>
|
}<!>
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER
|
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_ANONYMOUS_PARAMETER
|
||||||
|
|
||||||
// FILE: A.java
|
// FILE: A.java
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
|
|||||||
@@ -3,6 +3,6 @@ fun foo1() : (Int) -> Int = { x: Int -> x }
|
|||||||
fun foo() {
|
fun foo() {
|
||||||
val h : (Int) -> Int = foo1();
|
val h : (Int) -> Int = foo1();
|
||||||
h(1)
|
h(1)
|
||||||
val m : (Int) -> Int = {<!UNUSED_PARAMETER!>a<!> : Int -> 1}//foo1()
|
val m : (Int) -> Int = {<!UNUSED_ANONYMOUS_PARAMETER!>a<!> : Int -> 1}//foo1()
|
||||||
m(1)
|
m(1)
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_ANONYMOUS_PARAMETER
|
||||||
|
|
||||||
class C {
|
class C {
|
||||||
fun f() {}
|
fun f() {}
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
// FILE: KotlinFile.kt
|
// FILE: KotlinFile.kt
|
||||||
fun foo(javaClass: JavaClass<String>): String {
|
fun foo(javaClass: JavaClass<String>): String {
|
||||||
return javaClass.doSomething("", 1) { <!UNUSED_PARAMETER!>s<!>: String -> "" }
|
return javaClass.doSomething("", 1) { <!UNUSED_ANONYMOUS_PARAMETER!>s<!>: String -> "" }
|
||||||
}
|
}
|
||||||
|
|
||||||
// FILE: JavaClass.java
|
// FILE: JavaClass.java
|
||||||
|
|||||||
@@ -12,13 +12,13 @@ val test2: (String) -> Boolean =
|
|||||||
|
|
||||||
val test3: (String) -> Boolean =
|
val test3: (String) -> Boolean =
|
||||||
when {
|
when {
|
||||||
true -> { <!UNUSED_PARAMETER!>s<!> -> true }
|
true -> { <!UNUSED_ANONYMOUS_PARAMETER!>s<!> -> true }
|
||||||
else -> null!!
|
else -> null!!
|
||||||
}
|
}
|
||||||
|
|
||||||
val test4: (String) -> Boolean =
|
val test4: (String) -> Boolean =
|
||||||
when {
|
when {
|
||||||
true -> { <!EXPECTED_PARAMETERS_NUMBER_MISMATCH!><!UNUSED_PARAMETER!>s1<!>, <!CANNOT_INFER_PARAMETER_TYPE, UNUSED_PARAMETER!>s2<!><!> -> true }
|
true -> { <!EXPECTED_PARAMETERS_NUMBER_MISMATCH!><!UNUSED_ANONYMOUS_PARAMETER!>s1<!>, <!CANNOT_INFER_PARAMETER_TYPE, UNUSED_ANONYMOUS_PARAMETER!>s2<!><!> -> true }
|
||||||
else -> null!!
|
else -> null!!
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
// !DIAGNOSTICS: -UNUSED_ANONYMOUS_PARAMETER
|
||||||
// !CHECK_TYPE
|
// !CHECK_TYPE
|
||||||
|
|
||||||
fun test(d: dynamic) {
|
fun test(d: dynamic) {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// !DIAGNOSTICS: -UNUSED_PARAMETER, -UNREACHABLE_CODE
|
// !DIAGNOSTICS: -UNUSED_ANONYMOUS_PARAMETER -UNUSED_PARAMETER, -UNREACHABLE_CODE
|
||||||
|
|
||||||
val prop: String = <!CALL_TO_DEFINED_EXTERNALLY_FROM_NON_EXTERNAL_DECLARATION!>definedExternally<!>
|
val prop: String = <!CALL_TO_DEFINED_EXTERNALLY_FROM_NON_EXTERNAL_DECLARATION!>definedExternally<!>
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
// !DIAGNOSTICS: -UNUSED_ANONYMOUS_PARAMETER
|
||||||
import kotlin.properties.Delegates
|
import kotlin.properties.Delegates
|
||||||
|
|
||||||
class My {
|
class My {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
// !DIAGNOSTICS: -UNUSED_ANONYMOUS_PARAMETER
|
||||||
import kotlin.jvm.Volatile
|
import kotlin.jvm.Volatile
|
||||||
import kotlin.properties.Delegates
|
import kotlin.properties.Delegates
|
||||||
|
|
||||||
|
|||||||
Vendored
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
// !DIAGNOSTICS: -UNUSED_EXPRESSION -UNUSED_PARAMETER -UNUSED_VARIABLE
|
// !DIAGNOSTICS: -UNUSED_EXPRESSION -UNUSED_PARAMETER -UNUSED_ANONYMOUS_PARAMETER -UNUSED_VARIABLE
|
||||||
|
|
||||||
class GenericController<T> {
|
class GenericController<T> {
|
||||||
suspend fun yield(t: T) {}
|
suspend fun yield(t: T) {}
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
// !DIAGNOSTICS: -UNUSED_ANONYMOUS_PARAMETER
|
||||||
import kotlin.coroutines.experimental.*
|
import kotlin.coroutines.experimental.*
|
||||||
import kotlin.coroutines.experimental.intrinsics.*
|
import kotlin.coroutines.experimental.intrinsics.*
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
// !DIAGNOSTICS: -UNUSED_ANONYMOUS_PARAMETER
|
||||||
import kotlin.coroutines.experimental.*
|
import kotlin.coroutines.experimental.*
|
||||||
import kotlin.coroutines.experimental.intrinsics.*
|
import kotlin.coroutines.experimental.intrinsics.*
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
// !DIAGNOSTICS: -UNUSED_ANONYMOUS_PARAMETER
|
||||||
import kotlin.coroutines.experimental.*
|
import kotlin.coroutines.experimental.*
|
||||||
import kotlin.coroutines.experimental.intrinsics.*
|
import kotlin.coroutines.experimental.intrinsics.*
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -33,8 +33,8 @@ private val STRING = CompileTimeType<String>()
|
|||||||
private val ANY = CompileTimeType<Any>()
|
private val ANY = CompileTimeType<Any>()
|
||||||
|
|
||||||
|
|
||||||
private val emptyBinaryFun: Function2<BigInteger, BigInteger, BigInteger> = { <!UNUSED_PARAMETER!>a<!>, <!UNUSED_PARAMETER!>b<!> -> BigInteger("0") }
|
private val emptyBinaryFun: Function2<BigInteger, BigInteger, BigInteger> = { <!UNUSED_ANONYMOUS_PARAMETER!>a<!>, <!UNUSED_ANONYMOUS_PARAMETER!>b<!> -> BigInteger("0") }
|
||||||
private val emptyUnaryFun: Function1<Long, Long> = { <!UNUSED_PARAMETER!>a<!> -> 1.toLong() }
|
private val emptyUnaryFun: Function1<Long, Long> = { <!UNUSED_ANONYMOUS_PARAMETER!>a<!> -> 1.toLong() }
|
||||||
|
|
||||||
private val unaryOperations: HashMap<UnaryOperationKey<*>, Pair<Function1<Any?, Any>, Function1<Long, Long>>>
|
private val unaryOperations: HashMap<UnaryOperationKey<*>, Pair<Function1<Any?, Any>, Function1<Long, Long>>>
|
||||||
= hashMapOf<UnaryOperationKey<*>, Pair<Function1<Any?, Any>, Function1<Long, Long>>>(
|
= hashMapOf<UnaryOperationKey<*>, Pair<Function1<Any?, Any>, Function1<Long, Long>>>(
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@ class O : Function2<Int, String, Unit> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun test() {
|
fun test() {
|
||||||
val a = fun(<!UNUSED_PARAMETER!>o<!>: O) {
|
val a = fun(<!UNUSED_ANONYMOUS_PARAMETER!>o<!>: O) {
|
||||||
}
|
}
|
||||||
a <!TYPE_MISMATCH!>{}<!>
|
a <!TYPE_MISMATCH!>{}<!>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4048,6 +4048,12 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest {
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("unusedInAnonymous.kt")
|
||||||
|
public void testUnusedInAnonymous() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/controlFlowAnalysis/unusedInAnonymous.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("useUninitializedInLambda.kt")
|
@TestMetadata("useUninitializedInLambda.kt")
|
||||||
public void testUseUninitializedInLambda() throws Exception {
|
public void testUseUninitializedInLambda() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/controlFlowAnalysis/useUninitializedInLambda.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/controlFlowAnalysis/useUninitializedInLambda.kt");
|
||||||
|
|||||||
@@ -239,11 +239,16 @@ private class ElementAnnotator(private val element: PsiElement,
|
|||||||
|
|
||||||
AnnotationPresentationInfo(
|
AnnotationPresentationInfo(
|
||||||
ranges,
|
ranges,
|
||||||
textAttributes = if (factory == Errors.DEPRECATION) CodeInsightColors.DEPRECATED_ATTRIBUTES else null,
|
textAttributes = when (factory) {
|
||||||
highlightType = if (factory in Errors.UNUSED_ELEMENT_DIAGNOSTICS)
|
Errors.DEPRECATION -> CodeInsightColors.DEPRECATED_ATTRIBUTES
|
||||||
ProblemHighlightType.LIKE_UNUSED_SYMBOL
|
Errors.UNUSED_ANONYMOUS_PARAMETER -> CodeInsightColors.WEAK_WARNING_ATTRIBUTES
|
||||||
else
|
else -> null
|
||||||
null
|
},
|
||||||
|
highlightType = when (factory) {
|
||||||
|
in Errors.UNUSED_ELEMENT_DIAGNOSTICS -> ProblemHighlightType.LIKE_UNUSED_SYMBOL
|
||||||
|
Errors.UNUSED_ANONYMOUS_PARAMETER -> ProblemHighlightType.WEAK_WARNING
|
||||||
|
else -> null
|
||||||
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
Severity.INFO -> return // Do nothing
|
Severity.INFO -> return // Do nothing
|
||||||
@@ -278,14 +283,22 @@ private class AnnotationPresentationInfo(
|
|||||||
val ranges: List<TextRange>,
|
val ranges: List<TextRange>,
|
||||||
val nonDefaultMessage: String? = null,
|
val nonDefaultMessage: String? = null,
|
||||||
val highlightType: ProblemHighlightType? = null,
|
val highlightType: ProblemHighlightType? = null,
|
||||||
val textAttributes: TextAttributesKey? = null) {
|
val textAttributes: TextAttributesKey? = null
|
||||||
|
) {
|
||||||
|
|
||||||
fun create(diagnostic: Diagnostic, range: TextRange, holder: AnnotationHolder): Annotation {
|
fun create(diagnostic: Diagnostic, range: TextRange, holder: AnnotationHolder): Annotation {
|
||||||
val defaultMessage = nonDefaultMessage ?: getDefaultMessage(diagnostic)
|
val defaultMessage = nonDefaultMessage ?: getDefaultMessage(diagnostic)
|
||||||
|
|
||||||
val annotation = when (diagnostic.severity) {
|
val annotation = when (diagnostic.severity) {
|
||||||
Severity.ERROR -> holder.createErrorAnnotation(range, defaultMessage)
|
Severity.ERROR -> holder.createErrorAnnotation(range, defaultMessage)
|
||||||
Severity.WARNING -> holder.createWarningAnnotation(range, defaultMessage)
|
Severity.WARNING -> {
|
||||||
|
if (highlightType == ProblemHighlightType.WEAK_WARNING) {
|
||||||
|
holder.createWeakWarningAnnotation(range, defaultMessage)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
holder.createWarningAnnotation(range, defaultMessage)
|
||||||
|
}
|
||||||
|
}
|
||||||
else -> throw IllegalArgumentException("Only ERROR and WARNING diagnostics are supported")
|
else -> throw IllegalArgumentException("Only ERROR and WARNING diagnostics are supported")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -284,8 +284,8 @@ class QuickFixRegistrar : QuickFixContributor {
|
|||||||
TOO_MANY_ARGUMENTS.registerFactory(ChangeFunctionSignatureFix)
|
TOO_MANY_ARGUMENTS.registerFactory(ChangeFunctionSignatureFix)
|
||||||
NO_VALUE_FOR_PARAMETER.registerFactory(ChangeFunctionSignatureFix)
|
NO_VALUE_FOR_PARAMETER.registerFactory(ChangeFunctionSignatureFix)
|
||||||
UNUSED_PARAMETER.registerFactory(RemoveUnusedFunctionParameterFix)
|
UNUSED_PARAMETER.registerFactory(RemoveUnusedFunctionParameterFix)
|
||||||
UNUSED_PARAMETER.registerFactory(RenameToUnderscoreFix.Factory)
|
UNUSED_ANONYMOUS_PARAMETER.registerFactory(RenameToUnderscoreFix.Factory)
|
||||||
UNUSED_PARAMETER.registerFactory(RemoveSingleLambdaParameterFix)
|
UNUSED_ANONYMOUS_PARAMETER.registerFactory(RemoveSingleLambdaParameterFix)
|
||||||
EXPECTED_PARAMETERS_NUMBER_MISMATCH.registerFactory(ChangeFunctionLiteralSignatureFix)
|
EXPECTED_PARAMETERS_NUMBER_MISMATCH.registerFactory(ChangeFunctionLiteralSignatureFix)
|
||||||
|
|
||||||
EXPECTED_PARAMETER_TYPE_MISMATCH.registerFactory(ChangeTypeFix)
|
EXPECTED_PARAMETER_TYPE_MISMATCH.registerFactory(ChangeTypeFix)
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ class RenameToUnderscoreFix(element: KtCallableDeclaration) : KotlinQuickFixActi
|
|||||||
companion object Factory : KotlinSingleIntentionActionFactory() {
|
companion object Factory : KotlinSingleIntentionActionFactory() {
|
||||||
override fun createAction(diagnostic: Diagnostic): IntentionAction? {
|
override fun createAction(diagnostic: Diagnostic): IntentionAction? {
|
||||||
val declaration: KtCallableDeclaration? = when (diagnostic.factory) {
|
val declaration: KtCallableDeclaration? = when (diagnostic.factory) {
|
||||||
Errors.UNUSED_PARAMETER -> {
|
Errors.UNUSED_ANONYMOUS_PARAMETER -> {
|
||||||
val parameter = diagnostic.psiElement as? KtParameter
|
val parameter = diagnostic.psiElement as? KtParameter
|
||||||
val owner = parameter?.parent?.parent
|
val owner = parameter?.parent?.parent
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -3,6 +3,6 @@ fun foo1() : (Int) -> Int = { x: Int -> x }
|
|||||||
fun foo() {
|
fun foo() {
|
||||||
val h : (Int) -> Int = foo1();
|
val h : (Int) -> Int = foo1();
|
||||||
h(1)
|
h(1)
|
||||||
val m : (Int) -> Int = {<warning descr="[UNUSED_PARAMETER] Parameter 'a' is never used">a</warning> : Int -> 1}//foo1()
|
val m : (Int) -> Int = {a : Int -> 1}//foo1()
|
||||||
m(1)
|
m(1)
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
// !DIAGNOSTICS: -UNUSED_PARAMETER,-UNUSED_VARIABLE
|
// !DIAGNOSTICS: -UNUSED_ANONYMOUS_PARAMETER,-UNUSED_VARIABLE
|
||||||
|
|
||||||
// FILE: Sam.java
|
// FILE: Sam.java
|
||||||
@SamWithReceiver
|
@SamWithReceiver
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
// !DIAGNOSTICS: -UNUSED_PARAMETER,-UNUSED_VARIABLE
|
// !DIAGNOSTICS: -UNUSED_ANONYMOUS_PARAMETER,-UNUSED_VARIABLE
|
||||||
|
|
||||||
// FILE: Sam.java
|
// FILE: Sam.java
|
||||||
@SamWithReceiver
|
@SamWithReceiver
|
||||||
|
|||||||
Vendored
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
// !DIAGNOSTICS: -UNUSED_PARAMETER,-UNUSED_VARIABLE
|
// !DIAGNOSTICS: -UNUSED_ANONYMOUS_PARAMETER,-UNUSED_VARIABLE
|
||||||
|
|
||||||
// FILE: Sam.java
|
// FILE: Sam.java
|
||||||
public interface Sam {
|
public interface Sam {
|
||||||
|
|||||||
Reference in New Issue
Block a user