Added test for obsolete bug and removed workaround in code.
This commit is contained in:
@@ -0,0 +1,19 @@
|
|||||||
|
trait A
|
||||||
|
trait B
|
||||||
|
|
||||||
|
fun <R: A> R.f() {
|
||||||
|
}
|
||||||
|
|
||||||
|
fun <R: B> R.f() {
|
||||||
|
}
|
||||||
|
|
||||||
|
class AImpl: A
|
||||||
|
class BImpl: B
|
||||||
|
|
||||||
|
class C: A, B
|
||||||
|
|
||||||
|
fun main(args: Array<String>) {
|
||||||
|
AImpl().f()
|
||||||
|
BImpl().f()
|
||||||
|
C().<!CANNOT_COMPLETE_RESOLVE!>f<!>()
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
package
|
||||||
|
|
||||||
|
internal fun main(/*0*/ args: kotlin.Array<kotlin.String>): kotlin.Unit
|
||||||
|
internal fun </*0*/ R : A> R.f(): kotlin.Unit
|
||||||
|
internal fun </*0*/ R : B> R.f(): 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 final class AImpl : A {
|
||||||
|
public constructor AImpl()
|
||||||
|
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 final class BImpl : B {
|
||||||
|
public constructor BImpl()
|
||||||
|
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 final class C : A, B {
|
||||||
|
public constructor C()
|
||||||
|
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
|
||||||
|
}
|
||||||
@@ -8437,6 +8437,12 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest {
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("kt2493.kt")
|
||||||
|
public void testKt2493() throws Exception {
|
||||||
|
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/overload/kt2493.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("kt7068.kt")
|
@TestMetadata("kt7068.kt")
|
||||||
public void testKt7068() throws Exception {
|
public void testKt7068() throws Exception {
|
||||||
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/overload/kt7068.kt");
|
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/overload/kt7068.kt");
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ fun <T> Connection.use(block : (Connection) -> T) : T {
|
|||||||
fun <T> Connection.statement(block: (Statement) -> T): T {
|
fun <T> Connection.statement(block: (Statement) -> T): T {
|
||||||
val statement = createStatement()
|
val statement = createStatement()
|
||||||
if (statement != null) {
|
if (statement != null) {
|
||||||
return statement.useSql(block)
|
return statement.use(block)
|
||||||
} else {
|
} else {
|
||||||
throw IllegalStateException("No Statement returned from $this")
|
throw IllegalStateException("No Statement returned from $this")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import kotlin.template.StringTemplate
|
|||||||
/**
|
/**
|
||||||
* Processes a connection from the pool using the given function block
|
* Processes a connection from the pool using the given function block
|
||||||
*/
|
*/
|
||||||
fun <T> DataSource.useDataSource(block : (Connection) -> T): T { // TODO rename to "use" when KT-2493 is fixed
|
fun <T> DataSource.use(block : (Connection) -> T): T {
|
||||||
val connection = getConnection()
|
val connection = getConnection()
|
||||||
if (connection != null) {
|
if (connection != null) {
|
||||||
try {
|
try {
|
||||||
@@ -24,33 +24,33 @@ fun <T> DataSource.useDataSource(block : (Connection) -> T): T { // TODO rename
|
|||||||
* Helper method to process a statement on this collection
|
* Helper method to process a statement on this collection
|
||||||
*/
|
*/
|
||||||
fun <T> DataSource.statement(block: (Statement) -> T): T {
|
fun <T> DataSource.statement(block: (Statement) -> T): T {
|
||||||
return useDataSource{ it.statement(block) }
|
return use { it.statement(block) }
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Perform an SQL update on the connection
|
* Perform an SQL update on the connection
|
||||||
*/
|
*/
|
||||||
fun DataSource.update(sql: String): Int {
|
fun DataSource.update(sql: String): Int {
|
||||||
return useDataSource{ it.update(sql) }
|
return use { it.update(sql) }
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Perform a query on the connection and processes the result set with a function
|
* Perform a query on the connection and processes the result set with a function
|
||||||
*/
|
*/
|
||||||
fun <T> DataSource.query(sql: String, block: (ResultSet) -> T): T {
|
fun <T> DataSource.query(sql: String, block: (ResultSet) -> T): T {
|
||||||
return useDataSource{ it.query(sql, block) }
|
return use { it.query(sql, block) }
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Performs the update using the given SQL using a [[StringTemplate]]
|
* Performs the update using the given SQL using a [[StringTemplate]]
|
||||||
*/
|
*/
|
||||||
fun DataSource.update(template : StringTemplate) : Int {
|
fun DataSource.update(template : StringTemplate) : Int {
|
||||||
return useDataSource{ it.update(template) }
|
return use { it.update(template) }
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Perform a query on the connection using the SQL from the [[StringTemplate]] and processes the result set with a function
|
* Perform a query on the connection using the SQL from the [[StringTemplate]] and processes the result set with a function
|
||||||
*/
|
*/
|
||||||
fun <T> DataSource.query(template : StringTemplate, resultBlock : (ResultSet) -> T) : T {
|
fun <T> DataSource.query(template : StringTemplate, resultBlock : (ResultSet) -> T) : T {
|
||||||
return useDataSource{ it.query(template, resultBlock) }
|
return use { it.query(template, resultBlock) }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import java.sql.Statement
|
|||||||
/**
|
/**
|
||||||
* Uses the statement with the given block then closes the statement
|
* Uses the statement with the given block then closes the statement
|
||||||
*/
|
*/
|
||||||
fun <T, S : Statement> S.useSql(block : (S) -> T) : T { // TODO rename to "use" when KT-2493 is fixed
|
fun <T, S : Statement> S.use(block : (S) -> T) : T {
|
||||||
try {
|
try {
|
||||||
return block(this)
|
return block(this)
|
||||||
} finally {
|
} finally {
|
||||||
|
|||||||
Reference in New Issue
Block a user