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(
|
result.add(new Function(
|
||||||
new IdentifierImpl("init"),
|
new IdentifierImpl("init"),
|
||||||
modifiers,
|
modifiers,
|
||||||
new ClassType(myName),
|
new ClassType(myName, typeParameters, false),
|
||||||
typeParameters,
|
typeParameters,
|
||||||
f.getParams(),
|
f.getParams(),
|
||||||
block
|
block
|
||||||
|
|||||||
@@ -11,9 +11,15 @@ import java.util.List;
|
|||||||
*/
|
*/
|
||||||
public class ClassType extends Type {
|
public class ClassType extends Type {
|
||||||
private final Identifier myType;
|
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;
|
myType = type;
|
||||||
myParameters = parameters;
|
myParameters = parameters;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,16 +10,16 @@ open public fun getName() : T? {
|
|||||||
return myName
|
return myName
|
||||||
}
|
}
|
||||||
class object {
|
class object {
|
||||||
open public fun init<T>(name : T?) : Identifier {
|
open public fun init<T>(name : T?) : Identifier<T> {
|
||||||
val __ = Identifier(name, false)
|
val __ = Identifier(name, false)
|
||||||
return __
|
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)
|
val __ = Identifier(name, false)
|
||||||
__.myNullable = isNullable
|
__.myNullable = isNullable
|
||||||
return __
|
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)
|
val __ = Identifier(name, hasDollar)
|
||||||
__.myNullable = isNullable
|
__.myNullable = isNullable
|
||||||
return __
|
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