KT-638 Add correctly support for generic init functions

This commit is contained in:
ignatov
2011-12-26 16:54:04 +04:00
parent d03337dc0e
commit 891f844fda
5 changed files with 83 additions and 6 deletions
+1 -1
View File
@@ -111,7 +111,7 @@ public class Class extends Member {
result.add(new Function(
new IdentifierImpl("init"),
modifiers,
new ClassType(myName),
new ClassType(myName, typeParameters, false),
typeParameters,
f.getParams(),
block
+8 -2
View File
@@ -11,9 +11,15 @@ import java.util.List;
*/
public class ClassType extends Type {
private final Identifier myType;
private final List<Type> myParameters;
private final List<? extends Element> myParameters;
public ClassType(Identifier type, List<Type> parameters) {
public ClassType(Identifier type, List<? extends Element> parameters, boolean nullable) {
myType = type;
myParameters = parameters;
myNullable = nullable;
}
public ClassType(Identifier type, List<? extends Element> parameters) {
myType = type;
myParameters = parameters;
}
@@ -10,16 +10,16 @@ open public fun getName() : T? {
return myName
}
class object {
open public fun init<T>(name : T?) : Identifier {
open public fun init<T>(name : T?) : Identifier<T> {
val __ = Identifier(name, false)
return __
}
open public fun init<T>(name : T?, isNullable : Boolean) : Identifier {
open public fun init<T>(name : T?, isNullable : Boolean) : Identifier<T> {
val __ = Identifier(name, false)
__.myNullable = isNullable
return __
}
open public fun init<T>(name : T?, hasDollar : Boolean, isNullable : Boolean) : Identifier {
open public fun init<T>(name : T?, hasDollar : Boolean, isNullable : Boolean) : Identifier<T> {
val __ = Identifier(name, hasDollar)
__.myNullable = isNullable
return __
+33
View File
@@ -0,0 +1,33 @@
public class Identifier<T> {
private final T myName;
private boolean myHasDollar;
private boolean myNullable = true;
public Identifier(T name) {
myName = name;
}
public Identifier(T name, boolean isNullable) {
myName = name;
myNullable = isNullable;
}
public Identifier(T name, boolean hasDollar, boolean isNullable) {
myName = name;
myHasDollar = hasDollar;
myNullable = isNullable;
}
@Override
public T getName() {
return myName;
}
}
public class User {
public static void main(String[] args) {
Identifier<?> i1 = new Identifier<String>("name", false, true);
Identifier i2 = new Identifier<String>("name", false);
Identifier i3 = new Identifier<String>("name");
}
}
+38
View File
@@ -0,0 +1,38 @@
public open class Identifier<T>(_myName : T?, _myHasDollar : Boolean) {
{
myName = _myName
myHasDollar = _myHasDollar
}
private val myName : T? = null
private var myHasDollar : Boolean = false
private var myNullable : Boolean = true
open public fun getName() : T? {
return myName
}
class object {
open public fun init<T>(name : T?) : Identifier<T> {
val __ = Identifier(name, false)
return __
}
open public fun init<T>(name : T?, isNullable : Boolean) : Identifier<T> {
val __ = Identifier(name, false)
__.myNullable = isNullable
return __
}
open public fun init<T>(name : T?, hasDollar : Boolean, isNullable : Boolean) : Identifier<T> {
val __ = Identifier(name, hasDollar)
__.myNullable = isNullable
return __
}
}
}
public open class User() {
class object {
open public fun main(args : Array<String?>?) : Unit {
var i1 : Identifier<*>? = Identifier.init<String?>("name", false, true)
var i2 : Identifier<*>? = Identifier.init<String?>("name", false)
var i3 : Identifier<*>? = Identifier.init<String?>("name")
}
}
}
fun main(args : Array<String?>?) = User.main(args)