Type annotations required on functions

This commit is contained in:
Andrey Breslav
2011-06-15 21:21:19 +04:00
parent 317877d67a
commit 8786c6a667
20 changed files with 62 additions and 58 deletions
@@ -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>}
+1 -1
View File
@@ -8,7 +8,7 @@ namespace toplevelObjectDeclarations {
object A : <error>Foo</error> {
val x : Int = 2
fun test() {
fun test() : Int {
return x + foo()
}
}
+37 -37
View File
@@ -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 -1
View File
@@ -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"
+3 -3
View File
@@ -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()
}
+1 -1
View File
@@ -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 -1
View File
@@ -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"));