KT-546 Enum constructor invocations
This commit is contained in:
@@ -305,11 +305,8 @@ public class Converter {
|
|||||||
modifiers.add(Modifier.OVERRIDE);
|
modifiers.add(Modifier.OVERRIDE);
|
||||||
if (method.getParent() instanceof PsiClass && ((PsiClass) method.getParent()).isInterface())
|
if (method.getParent() instanceof PsiClass && ((PsiClass) method.getParent()).isInterface())
|
||||||
modifiers.remove(Modifier.ABSTRACT);
|
modifiers.remove(Modifier.ABSTRACT);
|
||||||
if (method.getParent() instanceof PsiClass) {
|
if (isNotOpenMethod(method))
|
||||||
final PsiModifierList parentModifierList = ((PsiClass) method.getParent()).getModifierList();
|
modifiers.add(Modifier.NOT_OPEN);
|
||||||
if (parentModifierList != null && parentModifierList.hasExplicitModifier(Modifier.FINAL))
|
|
||||||
modifiers.add(Modifier.NOT_OPEN);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (method.isConstructor()) { // TODO: simplify
|
if (method.isConstructor()) { // TODO: simplify
|
||||||
boolean isPrimary = isConstructorPrimary(method);
|
boolean isPrimary = isConstructorPrimary(method);
|
||||||
@@ -333,6 +330,15 @@ public class Converter {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static boolean isNotOpenMethod(final PsiMethod method) {
|
||||||
|
if (method.getParent() instanceof PsiClass) {
|
||||||
|
final PsiModifierList parentModifierList = ((PsiClass) method.getParent()).getModifierList();
|
||||||
|
if ((parentModifierList != null && parentModifierList.hasExplicitModifier(Modifier.FINAL)) || ((PsiClass) method.getParent()).isEnum())
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
private static boolean isOverrideAnyMethodExceptMethodsFromObject(@NotNull PsiMethod method) {
|
private static boolean isOverrideAnyMethodExceptMethodsFromObject(@NotNull PsiMethod method) {
|
||||||
int counter = 0;
|
int counter = 0;
|
||||||
for (HierarchicalMethodSignature s : method.getHierarchicalMethodSignature().getSuperSignatures()) {
|
for (HierarchicalMethodSignature s : method.getHierarchicalMethodSignature().getSuperSignatures()) {
|
||||||
@@ -418,14 +424,14 @@ public class Converter {
|
|||||||
public static Type typeToType(PsiType type, boolean notNull) {
|
public static Type typeToType(PsiType type, boolean notNull) {
|
||||||
Type result = typeToType(type);
|
Type result = typeToType(type);
|
||||||
if (notNull)
|
if (notNull)
|
||||||
result.convertToNotNull();
|
result.convertedToNotNull();
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private static List<Type> typesToNotNullableTypeList(@NotNull PsiType[] types) {
|
private static List<Type> typesToNotNullableTypeList(@NotNull PsiType[] types) {
|
||||||
List<Type> result = new LinkedList<Type>(typesToTypeList(types));
|
List<Type> result = new LinkedList<Type>(typesToTypeList(types));
|
||||||
for (Type p : result) p.convertToNotNull();
|
for (Type p : result) p.convertedToNotNull();
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import java.util.Set;
|
|||||||
*/
|
*/
|
||||||
public class EnumConstant extends Field {
|
public class EnumConstant extends Field {
|
||||||
public EnumConstant(Identifier identifier, Set<String> modifiers, Type type, Element params) {
|
public EnumConstant(Identifier identifier, Set<String> modifiers, Type type, Element params) {
|
||||||
super(identifier, modifiers, type, params);
|
super(identifier, modifiers, type.convertedToNotNull(), params);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@@ -17,6 +17,6 @@ public class EnumConstant extends Field {
|
|||||||
public String toKotlin() {
|
public String toKotlin() {
|
||||||
if (myInitializer.toKotlin().isEmpty())
|
if (myInitializer.toKotlin().isEmpty())
|
||||||
return myIdentifier.toKotlin();
|
return myIdentifier.toKotlin();
|
||||||
return myIdentifier.toKotlin() + "(" + myInitializer.toKotlin() + ")";
|
return myIdentifier.toKotlin() + SPACE + COLON + SPACE + myType.toKotlin() + "(" + myInitializer.toKotlin() + ")";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import static org.jetbrains.jet.j2k.Converter.getDefaultInitializer;
|
|||||||
*/
|
*/
|
||||||
public class Field extends Member {
|
public class Field extends Member {
|
||||||
final Identifier myIdentifier;
|
final Identifier myIdentifier;
|
||||||
private final Type myType;
|
final Type myType;
|
||||||
final Element myInitializer;
|
final Element myInitializer;
|
||||||
|
|
||||||
public Field(Identifier identifier, Set<String> modifiers, Type type, Element initializer) {
|
public Field(Identifier identifier, Set<String> modifiers, Type type, Element initializer) {
|
||||||
|
|||||||
@@ -15,8 +15,9 @@ public abstract class Type extends Element {
|
|||||||
return Kind.TYPE;
|
return Kind.TYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void convertToNotNull() {
|
public Type convertedToNotNull() {
|
||||||
myNullable = false;
|
myNullable = false;
|
||||||
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isNullable() {
|
public boolean isNullable() {
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
package demo;
|
||||||
|
|
||||||
|
enum MyEnum {
|
||||||
|
RED(10),
|
||||||
|
BLUE(20);
|
||||||
|
|
||||||
|
private final int color;
|
||||||
|
|
||||||
|
private MyEnum(int _color) {
|
||||||
|
color = _color;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getColor() {
|
||||||
|
return color;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
namespace demo
|
||||||
|
enum class MyEnum(_color : Int) {
|
||||||
|
{
|
||||||
|
$color = _color
|
||||||
|
}
|
||||||
|
RED : MyEnum(10)
|
||||||
|
BLUE : MyEnum(20)
|
||||||
|
private val color : Int = 0
|
||||||
|
public fun getColor() : Int {
|
||||||
|
return color
|
||||||
|
}
|
||||||
|
public fun name() : String { return "" }
|
||||||
|
public fun order() : Int { return 0 }
|
||||||
|
}
|
||||||
@@ -1,14 +1,16 @@
|
|||||||
enum Color(c: Int) {
|
enum class Color(c : Int) {
|
||||||
|
{
|
||||||
|
$code = c
|
||||||
|
}
|
||||||
WHITE : Color(21)
|
WHITE : Color(21)
|
||||||
BLACK : Color(22)
|
BLACK : Color(22)
|
||||||
RED : Color(23)
|
RED : Color(23)
|
||||||
YELLOW : Color(24)
|
YELLOW : Color(24)
|
||||||
BLUE : Color(25)
|
BLUE : Color(25)
|
||||||
private var code : Int
|
private var code : Int = 0
|
||||||
{
|
public fun getCode() : Int {
|
||||||
$code = c
|
|
||||||
}
|
|
||||||
open public fun getCode() : Int {
|
|
||||||
return code
|
return code
|
||||||
}
|
}
|
||||||
|
public fun name() : String { return "" }
|
||||||
|
public fun order() : Int { return 0 }
|
||||||
}
|
}
|
||||||
@@ -1,3 +1,5 @@
|
|||||||
|
package demo;
|
||||||
|
|
||||||
enum Color {
|
enum Color {
|
||||||
private int code;
|
private int code;
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
|
namespace demo
|
||||||
enum class Color(c : Int) {
|
enum class Color(c : Int) {
|
||||||
{
|
{
|
||||||
$code = c
|
$code = c
|
||||||
}
|
}
|
||||||
private var code : Int = 0
|
private var code : Int = 0
|
||||||
open public fun getCode() : Int {
|
public fun getCode() : Int {
|
||||||
return code
|
return code
|
||||||
}
|
}
|
||||||
public fun name() : String { return "" }
|
public fun name() : String { return "" }
|
||||||
|
|||||||
Reference in New Issue
Block a user