Rewrite RedundantSamConstructorInspection to support more cases

- Now inspection does not rely on synthetic descriptors at all, instead
it uses `SamConversionOracle` and `SamConversionResolver` to detect
if the argument type support SAM conversion
- This transparently considers all language features like
`SAM conversions for kotlin functions`, `Functional interfaces` etc.
- In case of multiple SAM arguments, part of them can be converted only
when `SAM conversion per argument` is enabled
- Fix inspection and nj2k tests that were failing because of better
working inspection
- Rewrite automatically fixes multiple bugs that were present
- ^KT-36367 ^KT-36368 ^KT-36296 ^KT-36395 Fixed
This commit is contained in:
Roman Golyshev
2020-02-10 13:12:21 +03:00
committed by Roman Golyshev
parent 9b5110b9f3
commit 46ae6136cb
23 changed files with 248 additions and 65 deletions
@@ -103,6 +103,17 @@
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Redundant SAM-constructor</problem_class>
<description>Redundant SAM-constructor</description>
</problem>
<problem>
<file>otherGenericsInParams.kt</file>
<line>7</line>
<module>light_idea_test_case</module>
<entry_point TYPE="method" FQNAME="redundantSamConstructor.OtherGenericsInParamsKt void test()" />
<problem_class severity="WARNING" attribute_key="NOT_USED_ELEMENT_ATTRIBUTES">Redundant SAM constructor</problem_class>
<description>Redundant SAM-constructor</description>
<highlighted_element>Runnable</highlighted_element>
<offset>21</offset>
<length>8</length>
</problem>
<problem>
<file>otherGenericsInParams.kt</file>
<line>8</line>
@@ -111,6 +122,17 @@
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Redundant SAM-constructor</problem_class>
<description>Redundant SAM-constructor</description>
</problem>
<problem>
<file>otherGenericsInParams.kt</file>
<line>9</line>
<module>light_idea_test_case</module>
<entry_point TYPE="method" FQNAME="redundantSamConstructor.OtherGenericsInParamsKt void test()" />
<problem_class severity="WARNING" attribute_key="NOT_USED_ELEMENT_ATTRIBUTES">Redundant SAM constructor</problem_class>
<description>Redundant SAM-constructor</description>
<highlighted_element>Runnable</highlighted_element>
<offset>35</offset>
<length>8</length>
</problem>
<problem>
<file>otherGenericsInParams.kt</file>
<line>11</line>
@@ -4,9 +4,9 @@ import a.*
fun test() {
MyJavaClass.foo1({ }, 1)
MyJavaClass.foo1(Runnable { }, Runnable { })
MyJavaClass.foo1({ }, Runnable { })
MyJavaClass.foo2(1, { })
MyJavaClass.foo2(Runnable { }, Runnable { })
MyJavaClass.foo2(Runnable { }, { })
A<String>().foo({})
}