KT-544 fixed: "Create generic init functions for generic classes"
This commit is contained in:
@@ -98,11 +98,19 @@ public class Class extends Member {
|
||||
statements.add(new ReturnStatement(new IdentifierImpl("__"))); // TODO: move to one place, find other __ usages
|
||||
final Block block = new Block(statements);
|
||||
|
||||
final List<Element> typeParameters = new LinkedList<Element>();
|
||||
if (f.getTypeParameters().size() == 0)
|
||||
typeParameters.addAll(myTypeParameters);
|
||||
else {
|
||||
typeParameters.addAll(myTypeParameters);
|
||||
typeParameters.addAll(f.getTypeParameters());
|
||||
}
|
||||
|
||||
result.add(new Function(
|
||||
new IdentifierImpl("init"),
|
||||
modifiers,
|
||||
new ClassType(myName),
|
||||
f.getTypeParameters(),
|
||||
typeParameters,
|
||||
f.getParams(),
|
||||
block
|
||||
));
|
||||
|
||||
@@ -8,6 +8,7 @@ import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.j2k.Converter;
|
||||
import org.jetbrains.jet.j2k.ast.*;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import static org.jetbrains.jet.j2k.Converter.*;
|
||||
@@ -207,9 +208,14 @@ public class ExpressionVisitor extends StatementVisitor {
|
||||
);
|
||||
}
|
||||
// is constructor secondary
|
||||
final List<Type> typeParameters = expression.getClassReference() != null ? typesToTypeList(expression.getClassReference().getTypeParameters()) : Collections.<Type>emptyList();
|
||||
return new CallChainExpression(
|
||||
new IdentifierImpl(constructor.getName(), false),
|
||||
new MethodCallExpression(new IdentifierImpl("init"), elementToElement(expression.getArgumentList()), false, typesToTypeList(expression.getTypeArguments())));
|
||||
new MethodCallExpression(
|
||||
new IdentifierImpl("init"),
|
||||
elementToElement(expression.getArgumentList()),
|
||||
false,
|
||||
typeParameters));
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
@@ -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() {
|
||||
Identifier<?> i1 = new Identifier<String>("name", false, true);
|
||||
Identifier i2 = new Identifier<String>("name", false);
|
||||
Identifier i3 = new Identifier<String>("name");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
public open class Identifier<T>(myName : T?, myHasDollar : Boolean) {
|
||||
private val myName : T?
|
||||
private var myHasDollar : Boolean
|
||||
private var myNullable : Boolean = true
|
||||
open public fun getName() : T? {
|
||||
return myName
|
||||
}
|
||||
class object {
|
||||
open public fun init<T>(name : T?) : Identifier {
|
||||
val __ = Identifier(name, false)
|
||||
return __
|
||||
}
|
||||
open public fun init<T>(name : T?, isNullable : Boolean) : Identifier {
|
||||
val __ = Identifier(name, false)
|
||||
__.myNullable = isNullable
|
||||
return __
|
||||
}
|
||||
open public fun init<T>(name : T?, hasDollar : Boolean, isNullable : Boolean) : Identifier {
|
||||
val __ = Identifier(name, hasDollar)
|
||||
__.myNullable = isNullable
|
||||
return __
|
||||
}
|
||||
}
|
||||
{
|
||||
$myName = myName
|
||||
$myHasDollar = myHasDollar
|
||||
}
|
||||
}
|
||||
public open class User() {
|
||||
class object {
|
||||
open public fun main() : 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")
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user