From 9e2e23c75764f3d7a61e664d4f6e02b6fec00c89 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Fri, 1 Jun 2012 20:31:10 +0200 Subject: [PATCH] modifiers are an enum --- src/org/jetbrains/jet/j2k/Converter.kt | 13 +++--- .../jetbrains/jet/j2k/ast/AnonymousClass.kt | 2 +- src/org/jetbrains/jet/j2k/ast/Class.kt | 24 +++++----- src/org/jetbrains/jet/j2k/ast/Constructor.kt | 2 +- src/org/jetbrains/jet/j2k/ast/Enum.kt | 2 +- src/org/jetbrains/jet/j2k/ast/EnumConstant.kt | 2 +- src/org/jetbrains/jet/j2k/ast/Field.kt | 23 ++++------ src/org/jetbrains/jet/j2k/ast/Function.kt | 27 +++++------ src/org/jetbrains/jet/j2k/ast/Initializer.kt | 2 +- .../jetbrains/jet/j2k/ast/LocalVariable.kt | 6 +-- src/org/jetbrains/jet/j2k/ast/Member.kt | 11 +++-- src/org/jetbrains/jet/j2k/ast/Modifier.java | 45 ------------------- src/org/jetbrains/jet/j2k/ast/Modifier.kt | 33 ++++++++++++++ src/org/jetbrains/jet/j2k/ast/Trait.kt | 2 +- src/org/jetbrains/jet/j2k/ast/Util.kt | 10 +++++ 15 files changed, 93 insertions(+), 111 deletions(-) delete mode 100644 src/org/jetbrains/jet/j2k/ast/Modifier.java create mode 100644 src/org/jetbrains/jet/j2k/ast/Modifier.kt diff --git a/src/org/jetbrains/jet/j2k/Converter.kt b/src/org/jetbrains/jet/j2k/Converter.kt index b9f36a8f79c..fc27dea2cef 100644 --- a/src/org/jetbrains/jet/j2k/Converter.kt +++ b/src/org/jetbrains/jet/j2k/Converter.kt @@ -130,7 +130,7 @@ public open class Converter() { } private fun classToClass(psiClass: PsiClass): Class { - val modifiers: Set = modifiersListToModifiersSet(psiClass.getModifierList()) + val modifiers: Set = modifiersListToModifiersSet(psiClass.getModifierList()) val fields: List = fieldsToFieldList(psiClass.getFields(), psiClass) val typeParameters: List = elementsToElementList(psiClass.getTypeParameters()) val implementsTypes: List = typesToNotNullableTypeList(psiClass.getImplementsListTypes()) @@ -186,7 +186,7 @@ public open class Converter() { } } } - members.add(Constructor(Identifier.EMPTY_IDENTIFIER, arrayList(), Collections.emptySet()!!, + members.add(Constructor(Identifier.EMPTY_IDENTIFIER, arrayList(), Collections.emptySet()!!, ClassType(name, Collections.emptyList()!!, false), Collections.emptyList()!!, ParameterList(createParametersFromFields(finalOrWithEmptyInitializer)), @@ -214,7 +214,7 @@ public open class Converter() { } private fun fieldToField(field: PsiField, psiClass: PsiClass?): Field { - val modifiers: Set = modifiersListToModifiersSet(field.getModifierList()) + val modifiers = modifiersListToModifiersSet(field.getModifierList()) val docComments = getDocComments(field) if (field is PsiEnumConstant) { return EnumConstant(Identifier(field.getName()!!), @@ -584,7 +584,7 @@ public open class Converter() { val parent = method.getParent() if (parent is PsiClass) { val parentModifierList: PsiModifierList? = parent.getModifierList() - if ((parentModifierList != null && parentModifierList.hasExplicitModifier(Modifier.FINAL)) || parent.isEnum()) { + if ((parentModifierList != null && parentModifierList.hasExplicitModifier(PsiModifier.FINAL)) || parent.isEnum()) { return true } @@ -677,8 +677,8 @@ public open class Converter() { return Identifier(identifier.getText()!!) } - public open fun modifiersListToModifiersSet(modifierList: PsiModifierList?): Set { - val modifiersSet: HashSet = hashSet() + public open fun modifiersListToModifiersSet(modifierList: PsiModifierList?): Set { + val modifiersSet: HashSet = hashSet() if (modifierList != null) { if (modifierList.hasExplicitModifier(PsiModifier.ABSTRACT)) modifiersSet.add(Modifier.ABSTRACT) @@ -704,6 +704,7 @@ public open class Converter() { return modifiersSet } + private fun isConversionNeeded(actual: PsiType?, expected: PsiType?): Boolean { if (actual == null || expected == null) { return false diff --git a/src/org/jetbrains/jet/j2k/ast/AnonymousClass.kt b/src/org/jetbrains/jet/j2k/ast/AnonymousClass.kt index e96ae0b36b5..65dd09b459d 100644 --- a/src/org/jetbrains/jet/j2k/ast/AnonymousClass.kt +++ b/src/org/jetbrains/jet/j2k/ast/AnonymousClass.kt @@ -9,7 +9,7 @@ public open class AnonymousClass(converter : Converter, members : List) : Class(converter, Identifier("anonClass"), arrayList(), - Collections.emptySet()!!, + Collections.emptySet()!!, Collections.emptyList()!!, Collections.emptyList()!!, Collections.emptyList()!!, diff --git a/src/org/jetbrains/jet/j2k/ast/Class.kt b/src/org/jetbrains/jet/j2k/ast/Class.kt index 4ccc1762d34..2c7babd6b2f 100644 --- a/src/org/jetbrains/jet/j2k/ast/Class.kt +++ b/src/org/jetbrains/jet/j2k/ast/Class.kt @@ -14,7 +14,7 @@ import java.util.ArrayList public open class Class(converter : Converter, val name : Identifier, val docComments: List, - modifiers : Set, + modifiers : Set, val typeParameters : List, val extendsTypes : List, val baseClassParams : List, @@ -60,7 +60,7 @@ public open class Class(converter : Converter, } private fun constructorToInit(f: Function): Function { - val modifiers : Set = HashSet(f.getModifiers()) + val modifiers : Set = HashSet(f.modifiers) modifiers.add(Modifier.STATIC) val statements : List = f.block?.statements ?: arrayList() statements.add(ReturnStatement(Identifier("__"))) @@ -93,8 +93,11 @@ public open class Class(converter : Converter, } open fun modifiersToKotlin() : String { - val modifierList : List = arrayList() - modifierList.add(accessModifier()) + val modifierList : List = arrayList() + val modifier = accessModifier() + if (modifier != null) { + modifierList.add(modifier) + } if (needAbstractModifier()) { modifierList.add(Modifier.ABSTRACT) } @@ -102,15 +105,10 @@ public open class Class(converter : Converter, if (needOpenModifier()) { modifierList.add(Modifier.OPEN) } - - if (modifierList.size() > 0) { - return modifierList.makeString(" ") + " " - } - - return "" + return modifierList.toKotlin() } - open fun needOpenModifier() = !myModifiers.contains(Modifier.FINAL) && !myModifiers.contains(Modifier.ABSTRACT) + open fun needOpenModifier() = !modifiers.contains(Modifier.FINAL) && !modifiers.contains(Modifier.ABSTRACT) open fun needAbstractModifier() = isAbstract() @@ -139,8 +137,8 @@ public open class Class(converter : Converter, open fun getMembers(members : List, converter : Converter) : List { if (converter.hasFlag(J2KConverterFlags.SKIP_NON_PUBLIC_MEMBERS)) { return members.filter { it is Comment || - (it as Member).accessModifier() == "public" || - (it as Member).accessModifier() == "protected" } + (it as Member).accessModifier() == Modifier.PUBLIC || + (it as Member).accessModifier() == Modifier.PROTECTED } } return members } diff --git a/src/org/jetbrains/jet/j2k/ast/Constructor.kt b/src/org/jetbrains/jet/j2k/ast/Constructor.kt index 2f376b20970..5fbeaf8ddce 100644 --- a/src/org/jetbrains/jet/j2k/ast/Constructor.kt +++ b/src/org/jetbrains/jet/j2k/ast/Constructor.kt @@ -6,7 +6,7 @@ import org.jetbrains.jet.j2k.ast.types.Type public open class Constructor(identifier : Identifier, docComments: List, - modifiers : Set, + modifiers : Set, `type` : Type, typeParameters : List, params : Element, diff --git a/src/org/jetbrains/jet/j2k/ast/Enum.kt b/src/org/jetbrains/jet/j2k/ast/Enum.kt index d67094380bc..090662bd925 100644 --- a/src/org/jetbrains/jet/j2k/ast/Enum.kt +++ b/src/org/jetbrains/jet/j2k/ast/Enum.kt @@ -8,7 +8,7 @@ import java.util.Set public open class Enum(converter : Converter, name : Identifier, docComments: List, - modifiers : Set, + modifiers : Set, typeParameters : List, extendsTypes : List, baseClassParams : List, diff --git a/src/org/jetbrains/jet/j2k/ast/EnumConstant.kt b/src/org/jetbrains/jet/j2k/ast/EnumConstant.kt index 4fc3bc589f4..d1b8d623832 100644 --- a/src/org/jetbrains/jet/j2k/ast/EnumConstant.kt +++ b/src/org/jetbrains/jet/j2k/ast/EnumConstant.kt @@ -6,7 +6,7 @@ import java.util.List public open class EnumConstant(identifier : Identifier, docComments: List, - modifiers : Set, + modifiers : Set, `type` : Type, params : Element) : Field(identifier, docComments, modifiers, `type`.convertedToNotNull(), params, 0) { diff --git a/src/org/jetbrains/jet/j2k/ast/Field.kt b/src/org/jetbrains/jet/j2k/ast/Field.kt index 858fc26da0a..402ca1bd6a0 100644 --- a/src/org/jetbrains/jet/j2k/ast/Field.kt +++ b/src/org/jetbrains/jet/j2k/ast/Field.kt @@ -8,34 +8,27 @@ import org.jetbrains.jet.j2k.Converter public open class Field(val identifier : Identifier, val docComments: List, - modifiers : Set, + modifiers : Set, val `type` : Type, val initializer : Element, val writingAccesses : Int) : Member(modifiers) { open fun modifiersToKotlin() : String { - val modifierList : List = arrayList() + val modifierList : List = arrayList() if (isAbstract()) { modifierList.add(Modifier.ABSTRACT) } - modifierList.add(accessModifier()) - modifierList.add(if (isVal()) "val" else "var") - if (modifierList.size() > 0) - { - return modifierList.makeString(" ") + " " + val modifier = accessModifier() + if (modifier != null) { + modifierList.add(modifier) } - return "" + return modifierList.toKotlin() + (if (isVal()) "val " else "var ") } - public open fun isVal() : Boolean { - return myModifiers.contains(Modifier.FINAL) - } - - public override fun isStatic() : Boolean { - return myModifiers.contains(Modifier.STATIC) - } + public open fun isVal() : Boolean = modifiers.contains(Modifier.FINAL) + public override fun isStatic() : Boolean = modifiers.contains(Modifier.STATIC) public override fun toKotlin() : String { val declaration : String = docComments.toKotlin("\n", "", "\n") + diff --git a/src/org/jetbrains/jet/j2k/ast/Function.kt b/src/org/jetbrains/jet/j2k/ast/Function.kt index ea6d18bf863..cfaae75e4ad 100644 --- a/src/org/jetbrains/jet/j2k/ast/Function.kt +++ b/src/org/jetbrains/jet/j2k/ast/Function.kt @@ -7,7 +7,7 @@ import org.jetbrains.jet.j2k.ast.types.Type public open class Function(val name : Identifier, val docComments: List, - modifiers : Set, + modifiers : Set, val `type` : Type, val typeParameters : List, val params : Element, @@ -32,9 +32,9 @@ public open class Function(val name : Identifier, } open fun modifiersToKotlin() : String { - val modifierList: List = arrayList() - val accessModifier : String = accessModifier() - if (!accessModifier.isEmpty()) { + val modifierList: List = arrayList() + val accessModifier = accessModifier() + if (accessModifier != null) { modifierList.add(accessModifier) } @@ -42,27 +42,22 @@ public open class Function(val name : Identifier, modifierList.add(Modifier.ABSTRACT) } - if (myModifiers.contains(Modifier.OVERRIDE)) { + if (modifiers.contains(Modifier.OVERRIDE)) { modifierList.add(Modifier.OVERRIDE) } - if (!myModifiers.contains(Modifier.ABSTRACT) && - !myModifiers.contains(Modifier.OVERRIDE) && - !myModifiers.contains(Modifier.FINAL) && - !myModifiers.contains(Modifier.PRIVATE)) - { + if (!modifiers.contains(Modifier.ABSTRACT) && + !modifiers.contains(Modifier.OVERRIDE) && + !modifiers.contains(Modifier.FINAL) && + !modifiers.contains(Modifier.PRIVATE)) { modifierList.add(Modifier.OPEN) } - if (myModifiers.contains(Modifier.NOT_OPEN)) { + if (modifiers.contains(Modifier.NOT_OPEN)) { modifierList.remove(Modifier.OPEN) } - if (modifierList.size() > 0) { - return modifierList.makeString(" ") + " " - } - - return "" + return modifierList.toKotlin() } public override fun toKotlin() : String { diff --git a/src/org/jetbrains/jet/j2k/ast/Initializer.kt b/src/org/jetbrains/jet/j2k/ast/Initializer.kt index ee2c6b8135a..f36a1f554d0 100644 --- a/src/org/jetbrains/jet/j2k/ast/Initializer.kt +++ b/src/org/jetbrains/jet/j2k/ast/Initializer.kt @@ -2,7 +2,7 @@ package org.jetbrains.jet.j2k.ast import java.util.Set -public open class Initializer(val block : Block, modifiers : Set) : Member(modifiers) { +public open class Initializer(val block : Block, modifiers : Set) : Member(modifiers) { public override fun toKotlin() : String { return block.toKotlin() } diff --git a/src/org/jetbrains/jet/j2k/ast/LocalVariable.kt b/src/org/jetbrains/jet/j2k/ast/LocalVariable.kt index 5a6ad3ad367..de762d2b249 100644 --- a/src/org/jetbrains/jet/j2k/ast/LocalVariable.kt +++ b/src/org/jetbrains/jet/j2k/ast/LocalVariable.kt @@ -4,13 +4,11 @@ import org.jetbrains.jet.j2k.ast.types.Type import java.util.Set public open class LocalVariable(val identifier: Identifier, - val modifiersSet: Set, + val modifiersSet: Set, val `type`: Type, val initializer: Expression): Expression() { - public open fun hasModifier(modifier: String): Boolean { - return modifiersSet.contains(modifier) - } + public open fun hasModifier(modifier: Modifier): Boolean = modifiersSet.contains(modifier) public override fun toKotlin(): String { if (initializer.isEmpty()) { diff --git a/src/org/jetbrains/jet/j2k/ast/Member.kt b/src/org/jetbrains/jet/j2k/ast/Member.kt index 809eed10c7a..bea7903977c 100644 --- a/src/org/jetbrains/jet/j2k/ast/Member.kt +++ b/src/org/jetbrains/jet/j2k/ast/Member.kt @@ -2,12 +2,11 @@ package org.jetbrains.jet.j2k.ast import java.util.Set -public abstract class Member(val myModifiers : Set) : Node() { - open fun accessModifier() : String { - return myModifiers.find { m -> m == Modifier.PUBLIC || m == Modifier.PROTECTED || m == Modifier.PRIVATE } ?: "" +public abstract class Member(val modifiers : Set) : Node() { + open fun accessModifier() : Modifier? { + return modifiers.find { m -> m == Modifier.PUBLIC || m == Modifier.PROTECTED || m == Modifier.PRIVATE } } - public open fun isAbstract() : Boolean = myModifiers.contains(Modifier.ABSTRACT) - public open fun isStatic() : Boolean = myModifiers.contains(Modifier.STATIC) - public open fun getModifiers() : Set = myModifiers + public open fun isAbstract() : Boolean = modifiers.contains(Modifier.ABSTRACT) + public open fun isStatic() : Boolean = modifiers.contains(Modifier.STATIC) } diff --git a/src/org/jetbrains/jet/j2k/ast/Modifier.java b/src/org/jetbrains/jet/j2k/ast/Modifier.java deleted file mode 100644 index 9e666fe5090..00000000000 --- a/src/org/jetbrains/jet/j2k/ast/Modifier.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright 2010-2012 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.jet.j2k.ast; - -import org.jetbrains.annotations.NotNull; - -/** - * @author ignatov - */ -public abstract class Modifier { - @NotNull - public static final String PUBLIC = "public"; - @NotNull - public static final String PROTECTED = "protected"; - @NotNull - public static final String PRIVATE = "private"; - @NotNull - public static final String INTERNAL = "internal"; - @NotNull - public static final String STATIC = "static"; - @NotNull - public static final String ABSTRACT = "abstract"; - @NotNull - public static final String FINAL = "final"; - @NotNull - public static final String OPEN = "open"; - @NotNull - public static final String NOT_OPEN = "not open"; - @NotNull - public static final String OVERRIDE = "override"; -} diff --git a/src/org/jetbrains/jet/j2k/ast/Modifier.kt b/src/org/jetbrains/jet/j2k/ast/Modifier.kt new file mode 100644 index 00000000000..a80e39cee43 --- /dev/null +++ b/src/org/jetbrains/jet/j2k/ast/Modifier.kt @@ -0,0 +1,33 @@ +package org.jetbrains.jet.j2k.ast + + +/* + * Copyright 2010-2012 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * @author ignatov + */ +public enum class Modifier(val name: String) { + PUBLIC: Modifier("public") + PROTECTED: Modifier("protected") + PRIVATE: Modifier("private") + INTERNAL: Modifier("internal") + STATIC: Modifier("static") + ABSTRACT: Modifier("abstract") + FINAL: Modifier("final") + OPEN: Modifier("open") + NOT_OPEN: Modifier("not open") + OVERRIDE: Modifier("override") +} diff --git a/src/org/jetbrains/jet/j2k/ast/Trait.kt b/src/org/jetbrains/jet/j2k/ast/Trait.kt index d3865f862af..7f330ee5960 100644 --- a/src/org/jetbrains/jet/j2k/ast/Trait.kt +++ b/src/org/jetbrains/jet/j2k/ast/Trait.kt @@ -8,7 +8,7 @@ import java.util.Set public open class Trait(converter : Converter, name : Identifier, docComments: List, - modifiers : Set, + modifiers : Set, typeParameters : List, extendsTypes : List, baseClassParams : List, diff --git a/src/org/jetbrains/jet/j2k/ast/Util.kt b/src/org/jetbrains/jet/j2k/ast/Util.kt index 9061acf5355..4e8b7656f06 100644 --- a/src/org/jetbrains/jet/j2k/ast/Util.kt +++ b/src/org/jetbrains/jet/j2k/ast/Util.kt @@ -1,6 +1,7 @@ package org.jetbrains.jet.j2k.ast import java.util.List +import java.util.Collection fun List.toKotlin(separator: String, prefix: String = "", suffix: String = ""): String { val result = StringBuilder() @@ -17,5 +18,14 @@ fun List.toKotlin(separator: String, prefix: String = "", suffix: Stri return result.toString()!! } +fun Collection.toKotlin(separator: String = " "): String { + val result = StringBuilder() + for(x in this) { + result.append(x.name) + result.append(separator) + } + return result.toString()!! +} + fun String.withPrefix(prefix: String) = if (isEmpty()) "" else prefix + this fun Expression.withPrefix(prefix: String) = if (isEmpty()) "" else prefix + toKotlin()