KT-638 Add correctly support for generic init functions
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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 __
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
Reference in New Issue
Block a user