diff --git a/compiler/testData/diagnostics/tests/jdk-annotations/sql/DriverManager.kt b/compiler/testData/diagnostics/tests/jdk-annotations/sql/DriverManager.kt new file mode 100644 index 00000000000..8a4c17cca73 --- /dev/null +++ b/compiler/testData/diagnostics/tests/jdk-annotations/sql/DriverManager.kt @@ -0,0 +1,33 @@ +import java.sql.DriverManager + +fun getConnection(url: String?) { + DriverManager.getConnection(url) + DriverManager.getConnection(url!!) : java.sql.Connection +} + +fun getConnection(url: String?, props: java.util.Properties?) { + DriverManager.getConnection(url, props) + DriverManager.getConnection(url!!, props) : java.sql.Connection +} + +fun getConnection(url: String?, user: String?, password: String?) { + DriverManager.getConnection(url, user!!, password!!) + DriverManager.getConnection(url!!, user, password!!) + DriverManager.getConnection(url!!, user!!, password) + DriverManager.getConnection(url!!, user!!, password!!) : java.sql.Connection +} + +fun getDriver(url: String?) { + DriverManager.getDriver(url) + DriverManager.getDriver(url!!) : java.sql.Driver +} + +fun registerDriver(driver: java.sql.Driver?) { + DriverManager.registerDriver(driver) + DriverManager.registerDriver(driver!!) +} + +fun getDrivers() { + // todo fix to java.util.Enumeration bug in compiler fixed + DriverManager.getDrivers() : java.util.Enumeration<*> +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/jdk-annotations/sql/ResultSet.kt b/compiler/testData/diagnostics/tests/jdk-annotations/sql/ResultSet.kt new file mode 100644 index 00000000000..1be885f2a39 --- /dev/null +++ b/compiler/testData/diagnostics/tests/jdk-annotations/sql/ResultSet.kt @@ -0,0 +1,3 @@ +fun getMetaData(rs: java.sql.ResultSet) { + rs.getMetaData() : java.sql.ResultSetMetaData +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/jdk-annotations/sql/Statement.kt b/compiler/testData/diagnostics/tests/jdk-annotations/sql/Statement.kt new file mode 100644 index 00000000000..8012c3830a4 --- /dev/null +++ b/compiler/testData/diagnostics/tests/jdk-annotations/sql/Statement.kt @@ -0,0 +1,13 @@ +fun executeQuery(statement: java.sql.Statement, cmd: String?) { + statement.executeQuery(cmd) + statement.executeQuery(cmd!!) : java.sql.ResultSet +} + +fun executeQuery(statement: java.sql.PreparedStatement) { + statement.executeQuery() : java.sql.ResultSet +} + +fun executeUpdate(statement: java.sql.Statement, cmd: String?) { + statement.executeUpdate(cmd) + statement.executeUpdate(cmd!!) +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java index bca94575645..9e8ace0569f 100644 --- a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java @@ -13,18 +13,16 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.jetbrains.jet.checkers; -import junit.framework.Assert; import junit.framework.Test; import junit.framework.TestSuite; - -import java.io.File; import org.jetbrains.jet.JetTestUtils; import org.jetbrains.jet.test.InnerTestClasses; import org.jetbrains.jet.test.TestMetadata; -import org.jetbrains.jet.checkers.AbstractDiagnosticsTestWithEagerResolve; +import java.io.File; /** This class is generated by {@link org.jetbrains.jet.checkers.AbstractDiagnosticsTestWithEagerResolve}. DO NOT MODIFY MANUALLY */ @InnerTestClasses({JetDiagnosticsTestGenerated.Tests.class, JetDiagnosticsTestGenerated.Script.class}) @@ -2047,6 +2045,7 @@ public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEage } @TestMetadata("compiler/testData/diagnostics/tests/jdk-annotations") + @InnerTestClasses({Jdk_annotations.Sql.class}) public static class Jdk_annotations extends AbstractDiagnosticsTestWithEagerResolve { public void testAllFilesPresentInJdk_annotations() throws Exception { JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.checkers.AbstractDiagnosticsTestWithEagerResolve", new File("compiler/testData/diagnostics/tests/jdk-annotations"), "kt", true); @@ -2067,6 +2066,35 @@ public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEage doTest("compiler/testData/diagnostics/tests/jdk-annotations/ArrayListToArray.kt"); } + @TestMetadata("compiler/testData/diagnostics/tests/jdk-annotations/sql") + public static class Sql extends AbstractDiagnosticsTestWithEagerResolve { + public void testAllFilesPresentInSql() throws Exception { + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.checkers.AbstractDiagnosticsTestWithEagerResolve", new File("compiler/testData/diagnostics/tests/jdk-annotations/sql"), "kt", true); + } + + @TestMetadata("DriverManager.kt") + public void testDriverManager() throws Exception { + doTest("compiler/testData/diagnostics/tests/jdk-annotations/sql/DriverManager.kt"); + } + + @TestMetadata("ResultSet.kt") + public void testResultSet() throws Exception { + doTest("compiler/testData/diagnostics/tests/jdk-annotations/sql/ResultSet.kt"); + } + + @TestMetadata("Statement.kt") + public void testStatement() throws Exception { + doTest("compiler/testData/diagnostics/tests/jdk-annotations/sql/Statement.kt"); + } + + } + + public static Test innerSuite() { + TestSuite suite = new TestSuite("Jdk_annotations"); + suite.addTestSuite(Jdk_annotations.class); + suite.addTestSuite(Sql.class); + return suite; + } } @TestMetadata("compiler/testData/diagnostics/tests/library") @@ -3446,7 +3474,7 @@ public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEage suite.addTest(Inference.innerSuite()); suite.addTestSuite(Infos.class); suite.addTestSuite(J_k.class); - suite.addTestSuite(Jdk_annotations.class); + suite.addTest(Jdk_annotations.innerSuite()); suite.addTestSuite(Library.class); suite.addTestSuite(NullabilityAndAutoCasts.class); suite.addTestSuite(Objects.class); diff --git a/jdk-annotations/java/sql/annotations.xml b/jdk-annotations/java/sql/annotations.xml new file mode 100644 index 00000000000..ca22603b39f --- /dev/null +++ b/jdk-annotations/java/sql/annotations.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/libraries/kotlin-jdbc/src/main/kotlin/kotlin/jdbc/Connections.kt b/libraries/kotlin-jdbc/src/main/kotlin/kotlin/jdbc/Connections.kt index 641e528e2fd..7dae5d30f20 100644 --- a/libraries/kotlin-jdbc/src/main/kotlin/kotlin/jdbc/Connections.kt +++ b/libraries/kotlin-jdbc/src/main/kotlin/kotlin/jdbc/Connections.kt @@ -8,17 +8,17 @@ import java.util.Properties /** * create connection for the specified jdbc url with no credentials */ -fun getConnection(url : String) : Connection = DriverManager.getConnection(url)!! +fun getConnection(url : String) : Connection = DriverManager.getConnection(url) /** * create connection for the specified jdbc url and properties */ -fun getConnection(url : String, info : Map) : Connection = DriverManager.getConnection(url, info.toProperties())!! +fun getConnection(url : String, info : Map) : Connection = DriverManager.getConnection(url, info.toProperties()) /** * create connection for the specified jdbc url and credentials */ -fun getConnection(url : String, user : String, password : String) : Connection = DriverManager.getConnection(url, user, password)!! +fun getConnection(url : String, user : String, password : String) : Connection = DriverManager.getConnection(url, user, password) /** * Executes specified block with connection and close connection after this @@ -65,11 +65,7 @@ fun Connection.update(template : StringTemplate) : Int { fun Connection.query(sql: String, block: (ResultSet) -> T): T { return statement{ val rs = it.executeQuery(sql) - if (rs != null) { - block(rs) - } else { - throw IllegalStateException("No ResultSet returned executeQuery($sql) on $this") - } + block(rs) } } @@ -222,7 +218,7 @@ class PreparedStatementBuilder(val template : StringTemplate, val connection : C out.append(if (constantText) it else "?") constantText = !constantText } - return out.toString() ?: "" + return out.toString() } } diff --git a/libraries/kotlin-jdbc/src/main/kotlin/kotlin/jdbc/PreparedStatements.kt b/libraries/kotlin-jdbc/src/main/kotlin/kotlin/jdbc/PreparedStatements.kt index 77fdc972fed..4e3894804a2 100644 --- a/libraries/kotlin-jdbc/src/main/kotlin/kotlin/jdbc/PreparedStatements.kt +++ b/libraries/kotlin-jdbc/src/main/kotlin/kotlin/jdbc/PreparedStatements.kt @@ -17,11 +17,7 @@ fun PreparedStatement.update(): Int { fun PreparedStatement.query(block: (ResultSet) -> T): T { try { val resultSet = this.executeQuery() - if (resultSet == null) { - throw IllegalStateException("No ResultSet returned from $this") - } else { - return block(resultSet) - } + return block(resultSet) } finally { close() } diff --git a/libraries/kotlin-jdbc/src/main/kotlin/kotlin/jdbc/ResultSets.kt b/libraries/kotlin-jdbc/src/main/kotlin/kotlin/jdbc/ResultSets.kt index 877d5b341a7..f02a29661e6 100644 --- a/libraries/kotlin-jdbc/src/main/kotlin/kotlin/jdbc/ResultSets.kt +++ b/libraries/kotlin-jdbc/src/main/kotlin/kotlin/jdbc/ResultSets.kt @@ -47,7 +47,7 @@ fun ResultSet.map(fn : (ResultSet) -> T) : jet.Iterable { * Returns array with column names */ fun ResultSet.getColumnNames() : jet.Array { - val meta = getMetaData()!! + val meta = getMetaData() return jet.Array(meta.getColumnCount(), {meta.getColumnName(it + 1) ?: it.toString()}) }