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