Type annotations required on functions
This commit is contained in:
@@ -576,6 +576,7 @@ public class JetControlFlowProcessor {
|
||||
IElementType operationType = expression.getOperationSign().getReferencedNameElementType();
|
||||
if (operationType == JetTokens.COLON || operationType == JetTokens.AS_KEYWORD || operationType == JetTokens.AS_SAFE) {
|
||||
value(expression.getLeft(), false, false);
|
||||
builder.read(expression);
|
||||
}
|
||||
else {
|
||||
visitJetElement(expression);
|
||||
|
||||
@@ -187,6 +187,9 @@ public class ClassDescriptorResolver {
|
||||
if (returnTypeRef != null) {
|
||||
returnType = typeResolver.resolveType(innerScope, returnTypeRef);
|
||||
}
|
||||
else if (function.hasBlockBody()) {
|
||||
returnType = JetStandardClasses.getUnitType();
|
||||
}
|
||||
else {
|
||||
final JetExpression bodyExpression = function.getBodyExpression();
|
||||
if (bodyExpression != null) {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<error>fun none()</error>
|
||||
fun none()
|
||||
|
||||
fun unitEmptyInfer() {}
|
||||
fun unitEmpty() : Unit {}
|
||||
@@ -12,7 +12,7 @@ fun unitShortNull() : Unit = null
|
||||
fun intEmpty() : Int <error>{}</error>
|
||||
fun intShortInfer() = 1
|
||||
fun intShort() : Int = 1
|
||||
fun intBlockInfer() {1}
|
||||
//fun intBlockInfer() {1}
|
||||
fun intBlock() : Int {1}
|
||||
|
||||
fun blockReturnUnitMismatch() : Int {<error>return</error>}
|
||||
|
||||
@@ -8,7 +8,7 @@ namespace toplevelObjectDeclarations {
|
||||
object A : <error>Foo</error> {
|
||||
val x : Int = 2
|
||||
|
||||
fun test() {
|
||||
fun test() : Int {
|
||||
return x + foo()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,59 +1,59 @@
|
||||
fun t1() {
|
||||
return
|
||||
fun t1() : Int{
|
||||
return 0
|
||||
<error>1</error>
|
||||
}
|
||||
|
||||
fun t1a() {
|
||||
return
|
||||
fun t1a() : Int {
|
||||
<error>return</error>
|
||||
<error>1</error>
|
||||
}
|
||||
|
||||
fun t1b() {
|
||||
return
|
||||
<error>return 1</error>
|
||||
<error>1</error>
|
||||
}
|
||||
|
||||
fun t1c() {
|
||||
fun t1b() : Int {
|
||||
return 1
|
||||
<error>return 1</error>
|
||||
<error>1</error>
|
||||
}
|
||||
|
||||
fun t1c() : Int {
|
||||
return 1
|
||||
<error>return</error>
|
||||
<error>1</error>
|
||||
}
|
||||
|
||||
fun t2() {
|
||||
fun t2() : Int {
|
||||
if (1 > 2)
|
||||
return
|
||||
else return
|
||||
return 1
|
||||
else return 1
|
||||
<error>1</error>
|
||||
}
|
||||
|
||||
fun t2a() {
|
||||
fun t2a() : Int {
|
||||
if (1 > 2) {
|
||||
return
|
||||
return 1
|
||||
<error>1</error>
|
||||
} else { return
|
||||
} else { return 1
|
||||
<error>2</error>
|
||||
}
|
||||
<error>1</error>
|
||||
}
|
||||
|
||||
fun t3() {
|
||||
fun t3() : Any {
|
||||
if (1 > 2)
|
||||
return 2
|
||||
else return ""
|
||||
<error>1</error>
|
||||
}
|
||||
|
||||
fun t4(a : Boolean) {
|
||||
fun t4(a : Boolean) : Int {
|
||||
do {
|
||||
return
|
||||
return 1
|
||||
}
|
||||
while (<error>a</error>)
|
||||
<error>1</error>
|
||||
}
|
||||
|
||||
fun t4break(a : Boolean) {
|
||||
fun t4break(a : Boolean) : Int {
|
||||
do {
|
||||
break
|
||||
}
|
||||
@@ -61,24 +61,24 @@ fun t4break(a : Boolean) {
|
||||
1
|
||||
}
|
||||
|
||||
fun t5() {
|
||||
fun t5() : Int {
|
||||
do {
|
||||
return
|
||||
return 1
|
||||
<error>2</error>
|
||||
}
|
||||
while (<error>1 > 2</error>)
|
||||
<error>1</error>
|
||||
}
|
||||
|
||||
fun t6() {
|
||||
fun t6() : Int {
|
||||
while (1 > 2) {
|
||||
return
|
||||
return 1
|
||||
<error>2</error>
|
||||
}
|
||||
1
|
||||
}
|
||||
|
||||
fun t6break() {
|
||||
fun t6break() : Int {
|
||||
while (1 > 2) {
|
||||
break
|
||||
<error>2</error>
|
||||
@@ -86,25 +86,25 @@ fun t6break() {
|
||||
1
|
||||
}
|
||||
|
||||
fun t7(b : Int) {
|
||||
fun t7(b : Int) : Int {
|
||||
for (i in 1..b) {
|
||||
return
|
||||
return 1
|
||||
<error>2</error>
|
||||
}
|
||||
1
|
||||
}
|
||||
|
||||
fun t7break(b : Int) {
|
||||
fun t7break(b : Int) : Int {
|
||||
for (i in 1..b) {
|
||||
return
|
||||
return 1
|
||||
<error>2</error>
|
||||
}
|
||||
1
|
||||
}
|
||||
|
||||
fun t7() {
|
||||
fun t7() : Int {
|
||||
try {
|
||||
return
|
||||
return 1
|
||||
<error>2</error>
|
||||
}
|
||||
catch (e : Any) {
|
||||
@@ -113,13 +113,13 @@ fun t7() {
|
||||
1 // this is OK, like in Java
|
||||
}
|
||||
|
||||
fun t8() {
|
||||
fun t8() : Int {
|
||||
try {
|
||||
return
|
||||
return 1
|
||||
<error>2</error>
|
||||
}
|
||||
catch (e : Any) {
|
||||
return
|
||||
return 1
|
||||
<error>2</error>
|
||||
}
|
||||
<error>1</error>
|
||||
@@ -130,12 +130,12 @@ fun blockAndAndMismatch() : Boolean {
|
||||
<error>true</error>
|
||||
}
|
||||
|
||||
fun tf() {
|
||||
try {<error>return</error>} finally{return}
|
||||
fun tf() : Int {
|
||||
try {<error>return 1</error>} finally{return 1}
|
||||
<error>1</error>
|
||||
}
|
||||
|
||||
fun failtest(a : Int) {
|
||||
fun failtest(a : Int) : Int {
|
||||
<error>if (fail() || true) {
|
||||
|
||||
}</error>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
fun foo() {
|
||||
fun foo() : Int {
|
||||
val s = ""
|
||||
val x = 1
|
||||
when (x) {
|
||||
|
||||
@@ -8,7 +8,7 @@ class Outer() {
|
||||
public val foo: InnerBase? = InnerDerived()
|
||||
}
|
||||
|
||||
fun box() {
|
||||
fun box() : String {
|
||||
val o = Outer()
|
||||
return if (o.foo === null) "fail" else "OK"
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ class Bar(): Foo {
|
||||
fun test(): String = xyzzy()
|
||||
}
|
||||
|
||||
fun box() {
|
||||
fun box() : String {
|
||||
val bar = Bar()
|
||||
val f = bar.test()
|
||||
return if (f == "xyzzy") "OK" else "fail"
|
||||
|
||||
@@ -13,7 +13,7 @@ class World() {
|
||||
val foo = Item()
|
||||
}
|
||||
|
||||
fun box() {
|
||||
fun box() : String {
|
||||
val w = World()
|
||||
if (w.items.size() != 1) return "fail"
|
||||
return "OK"
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
class Outer(val foo: StringBuilder) {
|
||||
class Inner() {
|
||||
fun len() {
|
||||
fun len() : Int {
|
||||
return foo.length()
|
||||
}
|
||||
}
|
||||
|
||||
fun test() {
|
||||
fun test() : Inner {
|
||||
return Inner()
|
||||
}
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
fun box() : String {
|
||||
val sb = StringBuilder("xyzzy")
|
||||
val o = Outer(sb)
|
||||
val i = o.test()
|
||||
|
||||
@@ -2,7 +2,7 @@ class SimpleClass() {
|
||||
fun foo() = 610
|
||||
}
|
||||
|
||||
fun test() {
|
||||
fun test() : Int {
|
||||
val c = SimpleClass()
|
||||
return c.foo()
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ class Outer() {
|
||||
public val x = Inner()
|
||||
}
|
||||
|
||||
fun box() {
|
||||
fun box() : String {
|
||||
val o = Outer()
|
||||
return if (o === o.x.outer) "OK" else "fail"
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@ class Outer() {
|
||||
public val x = InnerDerived()
|
||||
}
|
||||
|
||||
fun box() {
|
||||
fun box() : String {
|
||||
val o = Outer()
|
||||
return if (o.x.name != "xyzzy") "fail" else "OK"
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
class SimpleClass {
|
||||
fun foo() {
|
||||
fun foo() : Int {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
fun f() {
|
||||
fun f() : String? {
|
||||
val x = StringBuilder();
|
||||
g(x);
|
||||
return x.toString();
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
class Wrapper<T>() {
|
||||
fun castToSelf(wrapper: Any) = wrapper as? Wrapper<T>
|
||||
fun castToSelf(wrapper: Any) : Wrapper<T>? = wrapper as? Wrapper<T>
|
||||
}
|
||||
|
||||
fun foo() {
|
||||
fun foo() : Wrapper<Int>? {
|
||||
val wrapper = Wrapper<Int>()
|
||||
return wrapper.castToSelf(Wrapper<String>())
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ class Wrapper<T>() {
|
||||
fun isSameWrapper(wrapper: Any) = wrapper is Wrapper<T>
|
||||
}
|
||||
|
||||
fun foo() {
|
||||
fun foo() : Boolean {
|
||||
val wrapper = Wrapper<Int>()
|
||||
return wrapper.isSameWrapper(Wrapper<String>())
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
class Wrapper<T>() {
|
||||
}
|
||||
|
||||
fun foo() {
|
||||
fun foo() : Boolean {
|
||||
val wrapper = Wrapper<Int>()
|
||||
return wrapper is Wrapper<String>
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
class Point() {
|
||||
}
|
||||
|
||||
fun foo() {
|
||||
fun foo() : typeinfo.TypeInfo<Point> {
|
||||
val p = Point();
|
||||
return typeof(p);
|
||||
}
|
||||
|
||||
@@ -261,7 +261,7 @@ public class NamespaceGenTest extends CodegenTestCase {
|
||||
}
|
||||
|
||||
public void testStringPlusEq() throws Exception {
|
||||
loadText("fun foo(s: String) { val result = s; result += s; return result; } ");
|
||||
loadText("fun foo(s: String) : String { val result = s; result += s; return result; } ");
|
||||
System.out.println(generateToText());
|
||||
final Method main = generateFunction();
|
||||
assertEquals("JarJar", main.invoke(null, "Jar"));
|
||||
|
||||
Reference in New Issue
Block a user