[FE 1.0] Report warning on leaking anonymous object type from private inline lambda
^KT-33917 ^KT-56490 Fixed
This commit is contained in:
committed by
Space Team
parent
4c7f8ba196
commit
3c42521ce7
+6
@@ -17788,6 +17788,12 @@ public class DiagnosisCompilerTestFE10TestdataTestGenerated extends AbstractDiag
|
|||||||
runTest("compiler/testData/diagnostics/tests/inline/returnedAnonymousObjects.kt");
|
runTest("compiler/testData/diagnostics/tests/inline/returnedAnonymousObjects.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("returnedAnonymousObjects_2.kt")
|
||||||
|
public void testReturnedAnonymousObjects_2() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/inline/returnedAnonymousObjects_2.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("returns.kt")
|
@TestMetadata("returns.kt")
|
||||||
public void testReturns() throws Exception {
|
public void testReturns() throws Exception {
|
||||||
|
|||||||
+6
@@ -17794,6 +17794,12 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirDiagnosti
|
|||||||
runTest("compiler/testData/diagnostics/tests/inline/returnedAnonymousObjects.kt");
|
runTest("compiler/testData/diagnostics/tests/inline/returnedAnonymousObjects.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("returnedAnonymousObjects_2.kt")
|
||||||
|
public void testReturnedAnonymousObjects_2() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/inline/returnedAnonymousObjects_2.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("returns.kt")
|
@TestMetadata("returns.kt")
|
||||||
public void testReturns() throws Exception {
|
public void testReturns() throws Exception {
|
||||||
|
|||||||
+6
@@ -17788,6 +17788,12 @@ public class FirOldFrontendDiagnosticsWithLightTreeTestGenerated extends Abstrac
|
|||||||
runTest("compiler/testData/diagnostics/tests/inline/returnedAnonymousObjects.kt");
|
runTest("compiler/testData/diagnostics/tests/inline/returnedAnonymousObjects.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("returnedAnonymousObjects_2.kt")
|
||||||
|
public void testReturnedAnonymousObjects_2() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/inline/returnedAnonymousObjects_2.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("returns.kt")
|
@TestMetadata("returns.kt")
|
||||||
public void testReturns() throws Exception {
|
public void testReturns() throws Exception {
|
||||||
|
|||||||
+20
-12
@@ -5,31 +5,39 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.resolve.checkers
|
package org.jetbrains.kotlin.resolve.checkers
|
||||||
|
|
||||||
import org.jetbrains.kotlin.config.LanguageFeature
|
import com.intellij.psi.PsiElement
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||||
|
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
|
||||||
|
import org.jetbrains.kotlin.descriptors.SimpleFunctionDescriptor
|
||||||
import org.jetbrains.kotlin.diagnostics.Errors
|
import org.jetbrains.kotlin.diagnostics.Errors
|
||||||
import org.jetbrains.kotlin.psi.KtDeclaration
|
import org.jetbrains.kotlin.psi.KtDeclaration
|
||||||
import org.jetbrains.kotlin.psi.KtNamedFunction
|
import org.jetbrains.kotlin.psi.KtNamedFunction
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||||
import org.jetbrains.kotlin.types.typeUtil.isAnyOrNullableAny
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
|
|
||||||
object PrivateInlineFunctionsReturningAnonymousObjectsChecker : DeclarationChecker {
|
object PrivateInlineFunctionsReturningAnonymousObjectsChecker : DeclarationChecker {
|
||||||
override fun check(declaration: KtDeclaration, descriptor: DeclarationDescriptor, context: DeclarationCheckerContext) {
|
override fun check(declaration: KtDeclaration, descriptor: DeclarationDescriptor, context: DeclarationCheckerContext) {
|
||||||
if (context.languageVersionSettings.supportsFeature(LanguageFeature.ApproximateAnonymousReturnTypesInPrivateInlineFunctions))
|
|
||||||
return
|
|
||||||
|
|
||||||
if (descriptor !is SimpleFunctionDescriptor || !descriptor.isInline || !DescriptorVisibilities.isPrivate(descriptor.visibility) || declaration !is KtNamedFunction)
|
if (descriptor !is SimpleFunctionDescriptor || !descriptor.isInline || !DescriptorVisibilities.isPrivate(descriptor.visibility) || declaration !is KtNamedFunction)
|
||||||
return
|
return
|
||||||
|
|
||||||
val returnTypeConstructor = descriptor.returnType?.constructor ?: return
|
|
||||||
|
|
||||||
if (returnTypeConstructor.supertypes.singleOrNull { it.isAnyOrNullableAny() } == null) return
|
|
||||||
|
|
||||||
val nameIdentifier = declaration.nameIdentifier ?: return
|
val nameIdentifier = declaration.nameIdentifier ?: return
|
||||||
val returnTypeDeclarationDescriptor = returnTypeConstructor.declarationDescriptor ?: return
|
val returnType = descriptor.returnType ?: return
|
||||||
|
|
||||||
|
checkTypeAndArguments(returnType, nameIdentifier, context)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun checkTypeAndArguments(type: KotlinType, reportOn: PsiElement, context: DeclarationCheckerContext) {
|
||||||
|
checkType(type, reportOn, context)
|
||||||
|
for (argument in type.arguments) {
|
||||||
|
checkTypeAndArguments(argument.type, reportOn, context)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun checkType(type: KotlinType, reportOn: PsiElement, context: DeclarationCheckerContext) {
|
||||||
|
val returnTypeConstructor = type.constructor
|
||||||
|
val returnTypeDeclarationDescriptor = returnTypeConstructor.declarationDescriptor ?: return
|
||||||
if (DescriptorUtils.isAnonymousObject(returnTypeDeclarationDescriptor)) {
|
if (DescriptorUtils.isAnonymousObject(returnTypeDeclarationDescriptor)) {
|
||||||
context.trace.report(Errors.PRIVATE_INLINE_FUNCTIONS_RETURNING_ANONYMOUS_OBJECTS.on(nameIdentifier))
|
context.trace.report(Errors.PRIVATE_INLINE_FUNCTIONS_RETURNING_ANONYMOUS_OBJECTS.on(reportOn))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -11,7 +11,7 @@ private inline fun foo2(crossinline f: () -> Int) = object : I1 {
|
|||||||
fun bar(): Int = f()
|
fun bar(): Int = f()
|
||||||
}
|
}
|
||||||
|
|
||||||
<!AMBIGUOUS_ANONYMOUS_TYPE_INFERRED!>private inline fun foo3(crossinline f: () -> Int)<!> = object : I1, I2 {
|
<!AMBIGUOUS_ANONYMOUS_TYPE_INFERRED!>private inline fun <!PRIVATE_INLINE_FUNCTIONS_RETURNING_ANONYMOUS_OBJECTS!>foo3<!>(crossinline f: () -> Int)<!> = object : I1, I2 {
|
||||||
fun bar(): Int = f()
|
fun bar(): Int = f()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,11 +7,11 @@ private inline fun <!PRIVATE_INLINE_FUNCTIONS_RETURNING_ANONYMOUS_OBJECTS!>foo1<
|
|||||||
interface I1
|
interface I1
|
||||||
interface I2
|
interface I2
|
||||||
|
|
||||||
private inline fun foo2(crossinline f: () -> Int) = object : I1 {
|
private inline fun <!PRIVATE_INLINE_FUNCTIONS_RETURNING_ANONYMOUS_OBJECTS!>foo2<!>(crossinline f: () -> Int) = object : I1 {
|
||||||
fun bar(): Int = f()
|
fun bar(): Int = f()
|
||||||
}
|
}
|
||||||
|
|
||||||
private inline fun foo3(crossinline f: () -> Int) = object : I1, I2 {
|
private inline fun <!PRIVATE_INLINE_FUNCTIONS_RETURNING_ANONYMOUS_OBJECTS!>foo3<!>(crossinline f: () -> Int) = object : I1, I2 {
|
||||||
fun bar(): Int = f()
|
fun bar(): Int = f()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+159
@@ -0,0 +1,159 @@
|
|||||||
|
// SKIP_TXT
|
||||||
|
// ISSUE: KT-33917
|
||||||
|
|
||||||
|
class Inv<T>(val value: T)
|
||||||
|
|
||||||
|
private inline fun foo10(crossinline f: () -> Int) = object {
|
||||||
|
fun bar(): Int = f()
|
||||||
|
}
|
||||||
|
|
||||||
|
private inline fun foo11(crossinline f: () -> Int) = Inv(object {
|
||||||
|
fun bar(): Int = f()
|
||||||
|
})
|
||||||
|
|
||||||
|
private inline fun foo12(crossinline f: () -> Int) = Inv(Inv(object {
|
||||||
|
fun bar(): Int = f()
|
||||||
|
}))
|
||||||
|
|
||||||
|
interface I1
|
||||||
|
interface I2
|
||||||
|
|
||||||
|
private inline fun foo20(crossinline f: () -> Int) = object : I1 {
|
||||||
|
fun bar(): Int = f()
|
||||||
|
}
|
||||||
|
|
||||||
|
private inline fun foo21(crossinline f: () -> Int) = Inv(object : I1 {
|
||||||
|
fun bar(): Int = f()
|
||||||
|
})
|
||||||
|
|
||||||
|
private inline fun foo22(crossinline f: () -> Int) = Inv(Inv(object : I1 {
|
||||||
|
fun bar(): Int = f()
|
||||||
|
}))
|
||||||
|
|
||||||
|
<!AMBIGUOUS_ANONYMOUS_TYPE_INFERRED!>private inline fun foo30(crossinline f: () -> Int)<!> = object : I1, I2 {
|
||||||
|
fun bar(): Int = f()
|
||||||
|
}
|
||||||
|
|
||||||
|
private inline fun foo31(crossinline f: () -> Int) = Inv(object : I1, I2 {
|
||||||
|
fun bar(): Int = f()
|
||||||
|
})
|
||||||
|
|
||||||
|
private inline fun foo32(crossinline f: () -> Int) = Inv(Inv(object : I1, I2 {
|
||||||
|
fun bar(): Int = f()
|
||||||
|
}))
|
||||||
|
|
||||||
|
private fun foo40(f: () -> Int) = object {
|
||||||
|
fun bar(): Int = f()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun foo41(f: () -> Int) = Inv(object {
|
||||||
|
fun bar(): Int = f()
|
||||||
|
})
|
||||||
|
|
||||||
|
private fun foo42(f: () -> Int) = Inv(Inv(object {
|
||||||
|
fun bar(): Int = f()
|
||||||
|
}))
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
fun test10(b: Boolean) {
|
||||||
|
var x = <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any")!>foo10 { 1 }<!>
|
||||||
|
if (b) {
|
||||||
|
x = <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any")!>foo10 { 2 }<!>
|
||||||
|
}
|
||||||
|
x.<!UNRESOLVED_REFERENCE!>bar<!>()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun test11(b: Boolean) {
|
||||||
|
var x = <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any")!>foo11 { 1 }.value<!>
|
||||||
|
if (b) {
|
||||||
|
x = <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any")!>foo11 { 2 }.value<!>
|
||||||
|
}
|
||||||
|
x.<!UNRESOLVED_REFERENCE!>bar<!>()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun test12(b: Boolean) {
|
||||||
|
var x = <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any")!>foo12 { 1 }.value.value<!>
|
||||||
|
if (b) {
|
||||||
|
x = <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any")!>foo12 { 2 }.value.value<!>
|
||||||
|
}
|
||||||
|
x.<!UNRESOLVED_REFERENCE!>bar<!>()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
fun test20(b: Boolean) {
|
||||||
|
var x = <!DEBUG_INFO_EXPRESSION_TYPE("I1")!>foo20 { 1 }<!>
|
||||||
|
if (b) {
|
||||||
|
x = <!DEBUG_INFO_EXPRESSION_TYPE("I1")!>foo20 { 2 }<!>
|
||||||
|
}
|
||||||
|
x.<!UNRESOLVED_REFERENCE!>bar<!>()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun test21(b: Boolean) {
|
||||||
|
var x = <!DEBUG_INFO_EXPRESSION_TYPE("I1")!>foo21 { 1 }.value<!>
|
||||||
|
if (b) {
|
||||||
|
x = <!DEBUG_INFO_EXPRESSION_TYPE("I1")!>foo21 { 2 }.value<!>
|
||||||
|
}
|
||||||
|
x.<!UNRESOLVED_REFERENCE!>bar<!>()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun test22(b: Boolean) {
|
||||||
|
var x = <!DEBUG_INFO_EXPRESSION_TYPE("I1")!>foo22 { 1 }.value.value<!>
|
||||||
|
if (b) {
|
||||||
|
x = <!DEBUG_INFO_EXPRESSION_TYPE("I1")!>foo22 { 2 }.value.value<!>
|
||||||
|
}
|
||||||
|
x.<!UNRESOLVED_REFERENCE!>bar<!>()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
fun test30(b: Boolean) {
|
||||||
|
var x = <!DEBUG_INFO_EXPRESSION_TYPE("I1")!>foo30 { 1 }<!>
|
||||||
|
if (b) {
|
||||||
|
x = <!DEBUG_INFO_EXPRESSION_TYPE("I1")!>foo30 { 2 }<!>
|
||||||
|
}
|
||||||
|
x.<!UNRESOLVED_REFERENCE!>bar<!>()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun test31(b: Boolean) {
|
||||||
|
var x = <!DEBUG_INFO_EXPRESSION_TYPE("I1")!>foo31 { 1 }.value<!>
|
||||||
|
if (b) {
|
||||||
|
x = <!DEBUG_INFO_EXPRESSION_TYPE("I1")!>foo31 { 2 }.value<!>
|
||||||
|
}
|
||||||
|
x.<!UNRESOLVED_REFERENCE!>bar<!>()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun test32(b: Boolean) {
|
||||||
|
var x = <!DEBUG_INFO_EXPRESSION_TYPE("I1")!>foo32 { 1 }.value.value<!>
|
||||||
|
if (b) {
|
||||||
|
x = <!DEBUG_INFO_EXPRESSION_TYPE("I1")!>foo32 { 2 }.value.value<!>
|
||||||
|
}
|
||||||
|
x.<!UNRESOLVED_REFERENCE!>bar<!>()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
fun test40(b: Boolean) {
|
||||||
|
var x = <!DEBUG_INFO_EXPRESSION_TYPE("<anonymous>")!>foo40 { 1 }<!>
|
||||||
|
if (b) {
|
||||||
|
x = <!DEBUG_INFO_EXPRESSION_TYPE("<anonymous>")!>foo40 { 2 }<!>
|
||||||
|
}
|
||||||
|
x.bar()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun test41(b: Boolean) {
|
||||||
|
var x = <!DEBUG_INFO_EXPRESSION_TYPE("<anonymous>")!>foo41 { 1 }.value<!>
|
||||||
|
if (b) {
|
||||||
|
x = <!DEBUG_INFO_EXPRESSION_TYPE("<anonymous>")!>foo41 { 2 }.value<!>
|
||||||
|
}
|
||||||
|
x.bar()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun test42(b: Boolean) {
|
||||||
|
var x = <!DEBUG_INFO_EXPRESSION_TYPE("<anonymous>")!>foo42 { 1 }.value.value<!>
|
||||||
|
if (b) {
|
||||||
|
x = <!DEBUG_INFO_EXPRESSION_TYPE("<anonymous>")!>foo42 { 2 }.value.value<!>
|
||||||
|
}
|
||||||
|
x.bar()
|
||||||
|
}
|
||||||
@@ -0,0 +1,159 @@
|
|||||||
|
// SKIP_TXT
|
||||||
|
// ISSUE: KT-33917
|
||||||
|
|
||||||
|
class Inv<T>(val value: T)
|
||||||
|
|
||||||
|
private inline fun foo10(crossinline f: () -> Int) = object {
|
||||||
|
fun bar(): Int = f()
|
||||||
|
}
|
||||||
|
|
||||||
|
private inline fun <!PRIVATE_INLINE_FUNCTIONS_RETURNING_ANONYMOUS_OBJECTS!>foo11<!>(crossinline f: () -> Int) = Inv(object {
|
||||||
|
fun bar(): Int = f()
|
||||||
|
})
|
||||||
|
|
||||||
|
private inline fun <!PRIVATE_INLINE_FUNCTIONS_RETURNING_ANONYMOUS_OBJECTS!>foo12<!>(crossinline f: () -> Int) = Inv(Inv(object {
|
||||||
|
fun bar(): Int = f()
|
||||||
|
}))
|
||||||
|
|
||||||
|
interface I1
|
||||||
|
interface I2
|
||||||
|
|
||||||
|
private inline fun foo20(crossinline f: () -> Int) = object : I1 {
|
||||||
|
fun bar(): Int = f()
|
||||||
|
}
|
||||||
|
|
||||||
|
private inline fun <!PRIVATE_INLINE_FUNCTIONS_RETURNING_ANONYMOUS_OBJECTS!>foo21<!>(crossinline f: () -> Int) = Inv(object : I1 {
|
||||||
|
fun bar(): Int = f()
|
||||||
|
})
|
||||||
|
|
||||||
|
private inline fun <!PRIVATE_INLINE_FUNCTIONS_RETURNING_ANONYMOUS_OBJECTS!>foo22<!>(crossinline f: () -> Int) = Inv(Inv(object : I1 {
|
||||||
|
fun bar(): Int = f()
|
||||||
|
}))
|
||||||
|
|
||||||
|
<!AMBIGUOUS_ANONYMOUS_TYPE_INFERRED!>private inline fun <!PRIVATE_INLINE_FUNCTIONS_RETURNING_ANONYMOUS_OBJECTS!>foo30<!>(crossinline f: () -> Int)<!> = object : I1, I2 {
|
||||||
|
fun bar(): Int = f()
|
||||||
|
}
|
||||||
|
|
||||||
|
private inline fun <!PRIVATE_INLINE_FUNCTIONS_RETURNING_ANONYMOUS_OBJECTS!>foo31<!>(crossinline f: () -> Int) = Inv(object : I1, I2 {
|
||||||
|
fun bar(): Int = f()
|
||||||
|
})
|
||||||
|
|
||||||
|
private inline fun <!PRIVATE_INLINE_FUNCTIONS_RETURNING_ANONYMOUS_OBJECTS!>foo32<!>(crossinline f: () -> Int) = Inv(Inv(object : I1, I2 {
|
||||||
|
fun bar(): Int = f()
|
||||||
|
}))
|
||||||
|
|
||||||
|
private fun foo40(f: () -> Int) = object {
|
||||||
|
fun bar(): Int = f()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun foo41(f: () -> Int) = Inv(object {
|
||||||
|
fun bar(): Int = f()
|
||||||
|
})
|
||||||
|
|
||||||
|
private fun foo42(f: () -> Int) = Inv(Inv(object {
|
||||||
|
fun bar(): Int = f()
|
||||||
|
}))
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
fun test10(b: Boolean) {
|
||||||
|
var x = <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any")!>foo10 { 1 }<!>
|
||||||
|
if (b) {
|
||||||
|
x = <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any")!>foo10 { 2 }<!>
|
||||||
|
}
|
||||||
|
x.<!UNRESOLVED_REFERENCE!>bar<!>()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun test11(b: Boolean) {
|
||||||
|
var x = <!DEBUG_INFO_EXPRESSION_TYPE("foo11.`<no name provided>`")!>foo11 { 1 }.value<!>
|
||||||
|
if (b) {
|
||||||
|
x = <!DEBUG_INFO_EXPRESSION_TYPE("foo11.`<no name provided>`")!>foo11 { 2 }.value<!>
|
||||||
|
}
|
||||||
|
x.bar()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun test12(b: Boolean) {
|
||||||
|
var x = <!DEBUG_INFO_EXPRESSION_TYPE("foo12.`<no name provided>`")!>foo12 { 1 }.value.value<!>
|
||||||
|
if (b) {
|
||||||
|
x = <!DEBUG_INFO_EXPRESSION_TYPE("foo12.`<no name provided>`")!>foo12 { 2 }.value.value<!>
|
||||||
|
}
|
||||||
|
x.bar()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
fun test20(b: Boolean) {
|
||||||
|
var x = <!DEBUG_INFO_EXPRESSION_TYPE("I1")!>foo20 { 1 }<!>
|
||||||
|
if (b) {
|
||||||
|
x = <!DEBUG_INFO_EXPRESSION_TYPE("I1")!>foo20 { 2 }<!>
|
||||||
|
}
|
||||||
|
x.<!UNRESOLVED_REFERENCE!>bar<!>()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun test21(b: Boolean) {
|
||||||
|
var x = <!DEBUG_INFO_EXPRESSION_TYPE("foo21.`<no name provided>`")!>foo21 { 1 }.value<!>
|
||||||
|
if (b) {
|
||||||
|
x = <!DEBUG_INFO_EXPRESSION_TYPE("foo21.`<no name provided>`")!>foo21 { 2 }.value<!>
|
||||||
|
}
|
||||||
|
x.bar()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun test22(b: Boolean) {
|
||||||
|
var x = <!DEBUG_INFO_EXPRESSION_TYPE("foo22.`<no name provided>`")!>foo22 { 1 }.value.value<!>
|
||||||
|
if (b) {
|
||||||
|
x = <!DEBUG_INFO_EXPRESSION_TYPE("foo22.`<no name provided>`")!>foo22 { 2 }.value.value<!>
|
||||||
|
}
|
||||||
|
x.bar()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
fun test30(b: Boolean) {
|
||||||
|
var x = <!DEBUG_INFO_EXPRESSION_TYPE("foo30.`<no name provided>`")!>foo30 { 1 }<!>
|
||||||
|
if (b) {
|
||||||
|
x = <!DEBUG_INFO_EXPRESSION_TYPE("foo30.`<no name provided>`")!>foo30 { 2 }<!>
|
||||||
|
}
|
||||||
|
x.bar()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun test31(b: Boolean) {
|
||||||
|
var x = <!DEBUG_INFO_EXPRESSION_TYPE("foo31.`<no name provided>`")!>foo31 { 1 }.value<!>
|
||||||
|
if (b) {
|
||||||
|
x = <!DEBUG_INFO_EXPRESSION_TYPE("foo31.`<no name provided>`")!>foo31 { 2 }.value<!>
|
||||||
|
}
|
||||||
|
x.bar()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun test32(b: Boolean) {
|
||||||
|
var x = <!DEBUG_INFO_EXPRESSION_TYPE("foo32.`<no name provided>`")!>foo32 { 1 }.value.value<!>
|
||||||
|
if (b) {
|
||||||
|
x = <!DEBUG_INFO_EXPRESSION_TYPE("foo32.`<no name provided>`")!>foo32 { 2 }.value.value<!>
|
||||||
|
}
|
||||||
|
x.bar()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
fun test40(b: Boolean) {
|
||||||
|
var x = <!DEBUG_INFO_EXPRESSION_TYPE("foo40.`<no name provided>`")!>foo40 { 1 }<!>
|
||||||
|
if (b) {
|
||||||
|
x = <!DEBUG_INFO_EXPRESSION_TYPE("foo40.`<no name provided>`")!>foo40 { 2 }<!>
|
||||||
|
}
|
||||||
|
x.bar()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun test41(b: Boolean) {
|
||||||
|
var x = <!DEBUG_INFO_EXPRESSION_TYPE("foo41.`<no name provided>`")!>foo41 { 1 }.value<!>
|
||||||
|
if (b) {
|
||||||
|
x = <!DEBUG_INFO_EXPRESSION_TYPE("foo41.`<no name provided>`")!>foo41 { 2 }.value<!>
|
||||||
|
}
|
||||||
|
x.bar()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun test42(b: Boolean) {
|
||||||
|
var x = <!DEBUG_INFO_EXPRESSION_TYPE("foo42.`<no name provided>`")!>foo42 { 1 }.value.value<!>
|
||||||
|
if (b) {
|
||||||
|
x = <!DEBUG_INFO_EXPRESSION_TYPE("foo42.`<no name provided>`")!>foo42 { 2 }.value.value<!>
|
||||||
|
}
|
||||||
|
x.bar()
|
||||||
|
}
|
||||||
Generated
+6
@@ -17794,6 +17794,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest {
|
|||||||
runTest("compiler/testData/diagnostics/tests/inline/returnedAnonymousObjects.kt");
|
runTest("compiler/testData/diagnostics/tests/inline/returnedAnonymousObjects.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("returnedAnonymousObjects_2.kt")
|
||||||
|
public void testReturnedAnonymousObjects_2() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/inline/returnedAnonymousObjects_2.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("returns.kt")
|
@TestMetadata("returns.kt")
|
||||||
public void testReturns() throws Exception {
|
public void testReturns() throws Exception {
|
||||||
|
|||||||
Reference in New Issue
Block a user