Migrating to Kotlin M4: Most compilation errors outside AST fixed

This commit is contained in:
Andrey Breslav
2013-01-19 08:57:52 -08:00
committed by Pavel V. Talanov
parent 0f6533bf7b
commit b828aaf733
42 changed files with 93 additions and 139 deletions
+45 -45
View File
@@ -21,10 +21,10 @@ import java.text.MessageFormat
import com.intellij.psi.util.PsiUtil import com.intellij.psi.util.PsiUtil
public open class Converter() { public open class Converter() {
private var classIdentifiers: Set<String> = hashSet() private var classIdentifiers: MutableSet<String> = Sets.newHashSet()!!
private val dispatcher: Dispatcher = Dispatcher(this) private val dispatcher: Dispatcher = Dispatcher(this)
private var methodReturnType: PsiType? = null private var methodReturnType: PsiType? = null
private val flags: Set<J2KConverterFlags?>? = Sets.newHashSet() private val flags: MutableSet<J2KConverterFlags?>? = Sets.newHashSet()
public open fun addFlag(flag: J2KConverterFlags): Boolean { public open fun addFlag(flag: J2KConverterFlags): Boolean {
return flags?.add(flag)!! return flags?.add(flag)!!
} }
@@ -32,7 +32,7 @@ public open class Converter() {
return flags?.contains(flag)!! return flags?.contains(flag)!!
} }
public open fun setClassIdentifiers(identifiers: Set<String>) { public open fun setClassIdentifiers(identifiers: MutableSet<String>) {
classIdentifiers = identifiers classIdentifiers = identifiers
} }
@@ -74,10 +74,10 @@ public open class Converter() {
private fun fileToFile(javaFile: PsiJavaFile, additionalImports: List<String>): File { private fun fileToFile(javaFile: PsiJavaFile, additionalImports: List<String>): File {
val importList: PsiImportList? = javaFile.getImportList() val importList: PsiImportList? = javaFile.getImportList()
val imports: List<Import> = (if (importList == null) val imports: MutableList<Import> = (if (importList == null)
arrayList() arrayList()
else else
importsToImportList(importList.getAllImportStatements())) ArrayList(importsToImportList(importList.getAllImportStatements())))
for (i : String in additionalImports) for (i : String in additionalImports)
imports.add(Import(i)) imports.add(Import(i))
@@ -97,8 +97,8 @@ public open class Converter() {
return AnonymousClass(this, getMembers(anonymousClass)) return AnonymousClass(this, getMembers(anonymousClass))
} }
private fun getMembers(psiClass: PsiClass): List<Node> { private fun getMembers(psiClass: PsiClass): MutableList<Node> {
val members: List<Node> = arrayList() val members = ArrayList<Node>()
val lbraceOffset = psiClass.getLBrace()?.getTextRange()?.getStartOffset() ?: 0 val lbraceOffset = psiClass.getLBrace()?.getTextRange()?.getStartOffset() ?: 0
for (e : PsiElement? in psiClass.getChildren()) { for (e : PsiElement? in psiClass.getChildren()) {
val isDocComment = e?.getTextRange()?.getStartOffset() ?: 0 < lbraceOffset val isDocComment = e?.getTextRange()?.getStartOffset() ?: 0 < lbraceOffset
@@ -110,7 +110,7 @@ public open class Converter() {
} }
private fun getDocComments(element: PsiElement): List<Node> { private fun getDocComments(element: PsiElement): List<Node> {
val comments: List<Node> = arrayList() val comments = ArrayList<Node>()
val textOffset = element.getTextOffset() val textOffset = element.getTextOffset()
for (e : PsiElement? in element.getChildren()) { for (e : PsiElement? in element.getChildren()) {
if (e is PsiComment && e.getTextRange()?.getStartOffset() ?: 0 < textOffset) { if (e is PsiComment && e.getTextRange()?.getStartOffset() ?: 0 < textOffset) {
@@ -136,8 +136,8 @@ public open class Converter() {
val implementsTypes: List<Type> = typesToNotNullableTypeList(psiClass.getImplementsListTypes()) val implementsTypes: List<Type> = typesToNotNullableTypeList(psiClass.getImplementsListTypes())
val extendsTypes: List<Type> = typesToNotNullableTypeList(psiClass.getExtendsListTypes()) val extendsTypes: List<Type> = typesToNotNullableTypeList(psiClass.getExtendsListTypes())
val name: Identifier = Identifier(psiClass.getName()!!) val name: Identifier = Identifier(psiClass.getName()!!)
val baseClassParams: List<Expression> = arrayList() val baseClassParams= ArrayList<Expression>()
val members: List<Node> = getMembers(psiClass) val members = getMembers(psiClass)
val docComments = getDocComments(psiClass) val docComments = getDocComments(psiClass)
val visitor: SuperVisitor = SuperVisitor() val visitor: SuperVisitor = SuperVisitor()
psiClass.accept(visitor) psiClass.accept(visitor)
@@ -150,7 +150,7 @@ public open class Converter() {
if (!psiClass.isEnum() && !psiClass.isInterface() && psiClass.getConstructors().size > 1 && if (!psiClass.isEnum() && !psiClass.isInterface() && psiClass.getConstructors().size > 1 &&
getPrimaryConstructorForThisCase(psiClass) == null) { getPrimaryConstructorForThisCase(psiClass) == null) {
val finalOrWithEmptyInitializer: List<Field> = getFinalOrWithEmptyInitializer(fields) val finalOrWithEmptyInitializer: List<Field> = getFinalOrWithEmptyInitializer(fields)
val initializers: Map<String, String> = HashMap<String, String>() val initializers = HashMap<String, String>()
for (m in members) { for (m in members) {
if (m is Constructor) { if (m is Constructor) {
if (!m.isPrimary) { if (!m.isPrimary) {
@@ -158,7 +158,7 @@ public open class Converter() {
val init: String = getDefaultInitializer(fo) val init: String = getDefaultInitializer(fo)
initializers.put(fo.identifier.toKotlin(), init) initializers.put(fo.identifier.toKotlin(), init)
} }
val newStatements: List<Element> = arrayList() val newStatements = ArrayList<Element>()
for (s in m.block!!.statements) { for (s in m.block!!.statements) {
var isRemoved: Boolean = false var isRemoved: Boolean = false
if (s is AssignmentExpression) { if (s is AssignmentExpression) {
@@ -209,7 +209,7 @@ public open class Converter() {
return Initializer(blockToBlock(i.getBody(), true), modifiersListToModifiersSet(i.getModifierList())) return Initializer(blockToBlock(i.getBody(), true), modifiersListToModifiersSet(i.getModifierList()))
} }
private fun fieldsToFieldList(fields: Array<PsiField?>, psiClass: PsiClass): List<Field> { private fun fieldsToFieldList(fields: Array<PsiField>, psiClass: PsiClass): List<Field> {
return fields.map { fieldToField(it!!, psiClass) } return fields.map { fieldToField(it!!, psiClass) }
} }
@@ -283,7 +283,7 @@ public open class Converter() {
} }
private fun createFunctionParameters(method: PsiMethod): ParameterList { private fun createFunctionParameters(method: PsiMethod): ParameterList {
val result: List<Parameter> = arrayList() val result = ArrayList<Parameter>()
for (parameter : PsiParameter? in method.getParameterList().getParameters()) { for (parameter : PsiParameter? in method.getParameterList().getParameters()) {
result.add(Parameter(Identifier(parameter?.getName()!!), result.add(Parameter(Identifier(parameter?.getName()!!),
typeToType(parameter?.getType(), typeToType(parameter?.getType(),
@@ -332,11 +332,11 @@ public open class Converter() {
return blockToBlock(block, true) return blockToBlock(block, true)
} }
public open fun statementsToStatementList(statements: Array<PsiElement?>): List<Element> { public open fun statementsToStatementList(statements: Array<PsiElement>): List<Element> {
return statements.filterNot { it is PsiWhiteSpace }.map { statementToStatement(it) } return statements.filterNot { it is PsiWhiteSpace }.map { statementToStatement(it) }
} }
public open fun statementsToStatementList(statements: List<PsiElement?>): List<Element> { public open fun statementsToStatementList(statements: List<PsiElement>): List<Element> {
return statements.filterNot { it is PsiWhiteSpace }.map { statementToStatement(it) } return statements.filterNot { it is PsiWhiteSpace }.map { statementToStatement(it) }
} }
@@ -349,8 +349,8 @@ public open class Converter() {
return statementVisitor.getResult() return statementVisitor.getResult()
} }
public open fun expressionsToExpressionList(expressions: Array<PsiExpression?>): List<Expression> { public open fun expressionsToExpressionList(expressions: Array<PsiExpression>): List<Expression> {
val result: List<Expression> = arrayList() val result = ArrayList<Expression>()
for (e : PsiExpression? in expressions) for (e : PsiExpression? in expressions)
result.add(expressionToExpression(e)) result.add(expressionToExpression(e))
return result return result
@@ -375,7 +375,7 @@ public open class Converter() {
} }
public open fun elementsToElementList(elements: Array<out PsiElement?>): List<Element> { public open fun elementsToElementList(elements: Array<out PsiElement?>): List<Element> {
val result: List<Element> = arrayList() val result = ArrayList<Element>()
for(element in elements) { for(element in elements) {
result.add(elementToElement(element)) result.add(elementToElement(element))
} }
@@ -398,7 +398,7 @@ public open class Converter() {
return typeVisitor.getResult() return typeVisitor.getResult()
} }
public open fun typesToTypeList(types: Array<PsiType?>): List<Type> { public open fun typesToTypeList(types: Array<PsiType>): List<Type> {
return types.map { typeToType(it) } return types.map { typeToType(it) }
} }
@@ -412,14 +412,14 @@ public open class Converter() {
} }
private fun typesToNotNullableTypeList(types: Array<out PsiType?>): List<Type> { private fun typesToNotNullableTypeList(types: Array<out PsiType?>): List<Type> {
val result: List<Type> = arrayList() val result = ArrayList<Type>()
for(aType in types) { for(aType in types) {
result.add(typeToType(aType).convertedToNotNull()) result.add(typeToType(aType).convertedToNotNull())
} }
return result return result
} }
public open fun parametersToParameterList(parameters: Array<PsiParameter?>): List<Parameter?> { public open fun parametersToParameterList(parameters: Array<PsiParameter>): List<Parameter?> {
return parameters.map { parameterToParameter(it!!) } return parameters.map { parameterToParameter(it!!) }
} }
@@ -431,13 +431,13 @@ public open class Converter() {
public open fun argumentsToExpressionList(expression: PsiCallExpression): List<Expression> { public open fun argumentsToExpressionList(expression: PsiCallExpression): List<Expression> {
val argumentList: PsiExpressionList? = expression.getArgumentList() val argumentList: PsiExpressionList? = expression.getArgumentList()
val arguments: Array<PsiExpression?> = (if (argumentList != null) val arguments: Array<PsiExpression> = (if (argumentList != null)
argumentList.getExpressions() argumentList.getExpressions()
else else
PsiExpression.EMPTY_ARRAY) PsiExpression.EMPTY_ARRAY)
val result: List<Expression> = ArrayList<Expression>() val result = ArrayList<Expression>()
val resolved: PsiMethod? = expression.resolveMethod() val resolved: PsiMethod? = expression.resolveMethod()
val expectedTypes: List<PsiType?> = ArrayList<PsiType?>() val expectedTypes = ArrayList<PsiType?>()
if (resolved != null) { if (resolved != null) {
for (p : PsiParameter? in resolved.getParameterList().getParameters()) for (p : PsiParameter? in resolved.getParameterList().getParameters())
expectedTypes.add(p?.getType()) expectedTypes.add(p?.getType())
@@ -503,7 +503,7 @@ public open class Converter() {
} }
private fun getFinalOrWithEmptyInitializer(fields: List<out Field>): List<Field> { private fun getFinalOrWithEmptyInitializer(fields: List<out Field>): List<Field> {
val result: List<Field> = arrayList() val result = ArrayList<Field>()
for (f : Field in fields) for (f : Field in fields)
if (f.isVal() || f.initializer.toKotlin().isEmpty()) { if (f.isVal() || f.initializer.toKotlin().isEmpty()) {
result.add(f) result.add(f)
@@ -517,7 +517,7 @@ public open class Converter() {
} }
private fun createInitStatementsFromFields(fields: List<out Field>): List<Element> { private fun createInitStatementsFromFields(fields: List<out Field>): List<Element> {
val result: List<Element> = arrayList() val result = ArrayList<Element>()
for (f : Field in fields) { for (f : Field in fields) {
val identifierToKotlin: String? = f.identifier.toKotlin() val identifierToKotlin: String? = f.identifier.toKotlin()
result.add(DummyStringExpression(identifierToKotlin + " = " + "_" + identifierToKotlin)) result.add(DummyStringExpression(identifierToKotlin + " = " + "_" + identifierToKotlin))
@@ -612,7 +612,7 @@ public open class Converter() {
} }
private fun isInheritFromObject(method: PsiMethod): Boolean { private fun isInheritFromObject(method: PsiMethod): Boolean {
var superSignatures: List<HierarchicalMethodSignature?>? = method.getHierarchicalMethodSignature().getSuperSignatures() var superSignatures: List<HierarchicalMethodSignature?> = method.getHierarchicalMethodSignature().getSuperSignatures()!!
for (s : HierarchicalMethodSignature? in superSignatures) { for (s : HierarchicalMethodSignature? in superSignatures) {
var containingClass: PsiClass? = s?.getMethod()?.getContainingClass() var containingClass: PsiClass? = s?.getMethod()?.getContainingClass()
var qualifiedName: String? = (if (containingClass != null) var qualifiedName: String? = (if (containingClass != null)
@@ -644,8 +644,8 @@ public open class Converter() {
return false return false
} }
private fun importsToImportList(imports: Array<PsiImportStatementBase?>): List<Import> { private fun importsToImportList(imports: Array<PsiImportStatementBase>): List<Import> {
val result: List<Import> = arrayList() val result = ArrayList<Import>()
for (i : PsiImportStatementBase? in imports) { for (i : PsiImportStatementBase? in imports) {
if (i == null) continue if (i == null) continue
val anImport: Import = importToImport(i) val anImport: Import = importToImport(i)
@@ -677,7 +677,7 @@ public open class Converter() {
return Identifier(identifier.getText()!!) return Identifier(identifier.getText()!!)
} }
public open fun modifiersListToModifiersSet(modifierList: PsiModifierList?): Set<Modifier> { public open fun modifiersListToModifiersSet(modifierList: PsiModifierList?): MutableSet<Modifier> {
val modifiersSet: HashSet<Modifier> = hashSet() val modifiersSet: HashSet<Modifier> = hashSet()
if (modifierList != null) { if (modifierList != null) {
if (modifierList.hasExplicitModifier(PsiModifier.ABSTRACT)) if (modifierList.hasExplicitModifier(PsiModifier.ABSTRACT))
@@ -710,7 +710,7 @@ public open class Converter() {
return false return false
} }
val typeMap: Map<String, String> = HashMap<String, String>() val typeMap = HashMap<String, String>()
typeMap.put(JAVA_LANG_BYTE, "byte") typeMap.put(JAVA_LANG_BYTE, "byte")
typeMap.put(JAVA_LANG_SHORT, "short") typeMap.put(JAVA_LANG_SHORT, "short")
typeMap.put(JAVA_LANG_INTEGER, "int") typeMap.put(JAVA_LANG_INTEGER, "int")
@@ -727,8 +727,8 @@ public open class Converter() {
} }
} }
public open fun createMainFunction(file: PsiFile): String { public fun createMainFunction(file: PsiFile): String {
val classNamesWithMains: List<Pair<String?, PsiMethod?>?> = arrayList() val classNamesWithMains = ArrayList<Pair<String?, PsiMethod?>?>()
for (c : PsiClass? in (file as PsiJavaFile).getClasses()) { for (c : PsiClass? in (file as PsiJavaFile).getClasses()) {
var main: PsiMethod? = findMainMethod(c) var main: PsiMethod? = findMainMethod(c)
if (main != null) { if (main != null) {
@@ -747,7 +747,7 @@ public open fun createMainFunction(file: PsiFile): String {
private fun findMainMethod(aClass: PsiClass?): PsiMethod? { private fun findMainMethod(aClass: PsiClass?): PsiMethod? {
if (isMainClass(aClass)) { if (isMainClass(aClass)) {
val mainMethods: Array<PsiMethod?>? = aClass?.findMethodsByName("main", false) val mainMethods: Array<PsiMethod>? = aClass?.findMethodsByName("main", false)
if (mainMethods != null) { if (mainMethods != null) {
return findMainMethod(mainMethods) return findMainMethod(mainMethods)
} }
@@ -766,11 +766,11 @@ private fun isMainClass(psiClass: PsiClass?): Boolean {
} }
private fun findMainMethod(mainMethods: Array<PsiMethod?>): PsiMethod? { private fun findMainMethod(mainMethods: Array<PsiMethod>): PsiMethod? {
return mainMethods.find { isMainMethod(it) } return mainMethods.find { isMainMethod(it) }
} }
public open fun isMainMethod(method: PsiMethod?): Boolean { public fun isMainMethod(method: PsiMethod?): Boolean {
if (method == null || method.getContainingClass() == null) if (method == null || method.getContainingClass() == null)
return false return false
@@ -783,7 +783,7 @@ public open fun isMainMethod(method: PsiMethod?): Boolean {
if (!method.hasModifierProperty(PsiModifier.PUBLIC)) if (!method.hasModifierProperty(PsiModifier.PUBLIC))
return false return false
val parameters: Array<PsiParameter?>? = method.getParameterList().getParameters() val parameters: Array<PsiParameter>? = method.getParameterList().getParameters()
if (parameters?.size!! != 1) if (parameters?.size!! != 1)
return false return false
@@ -795,12 +795,12 @@ public open fun isMainMethod(method: PsiMethod?): Boolean {
return componentType?.equalsToText("java.lang.String")!! return componentType?.equalsToText("java.lang.String")!!
} }
public open fun countWritingAccesses(element: PsiElement?, container: PsiElement?): Int { public fun countWritingAccesses(element: PsiElement?, container: PsiElement?): Int {
var counter: Int = 0 var counter: Int = 0
if (container != null) { if (container != null) {
val visitor: ReferenceCollector = ReferenceCollector() val visitor: ReferenceCollector = ReferenceCollector()
container.accept(visitor) container.accept(visitor)
for (e : PsiReferenceExpression? in visitor.getCollectedReferences()) for (e : PsiReferenceExpression in visitor.getCollectedReferences())
if (e?.isReferenceTo(element)!! && PsiUtil.isAccessedForWriting(e)) { if (e?.isReferenceTo(element)!! && PsiUtil.isAccessedForWriting(e)) {
counter++ counter++
} }
@@ -810,7 +810,7 @@ public open fun countWritingAccesses(element: PsiElement?, container: PsiElement
} }
open class ReferenceCollector(): JavaRecursiveElementVisitor() { open class ReferenceCollector(): JavaRecursiveElementVisitor() {
private val myCollectedReferences: List<PsiReferenceExpression> = arrayList() private val myCollectedReferences = ArrayList<PsiReferenceExpression>()
public open fun getCollectedReferences(): List<PsiReferenceExpression> { public open fun getCollectedReferences(): List<PsiReferenceExpression> {
return myCollectedReferences return myCollectedReferences
@@ -824,14 +824,14 @@ open class ReferenceCollector(): JavaRecursiveElementVisitor() {
} }
} }
public open fun isReadOnly(element: PsiElement?, container: PsiElement?): Boolean { public fun isReadOnly(element: PsiElement?, container: PsiElement?): Boolean {
return countWritingAccesses(element, container) == 0 return countWritingAccesses(element, container) == 0
} }
public open fun isAnnotatedAsNotNull(modifierList: PsiModifierList?): Boolean { public fun isAnnotatedAsNotNull(modifierList: PsiModifierList?): Boolean {
if (modifierList != null) { if (modifierList != null) {
val annotations: Array<PsiAnnotation?>? = modifierList.getAnnotations() val annotations: Array<PsiAnnotation> = modifierList.getAnnotations()
for (a : PsiAnnotation? in annotations) { for (a : PsiAnnotation in annotations) {
val qualifiedName: String? = a?.getQualifiedName() val qualifiedName: String? = a?.getQualifiedName()
if (qualifiedName != null && Converter.NOT_NULL_ANNOTATIONS.contains(qualifiedName)) { if (qualifiedName != null && Converter.NOT_NULL_ANNOTATIONS.contains(qualifiedName)) {
return true return true
@@ -15,7 +15,8 @@
*/ */
package org.jetbrains.jet.j2k; package org.jetbrains.jet.j2k;
import com.intellij.core.JavaCoreEnvironment; import com.intellij.core.JavaCoreApplicationEnvironment;
import com.intellij.core.JavaCoreProjectEnvironment;
import com.intellij.lang.java.JavaLanguage; import com.intellij.lang.java.JavaLanguage;
import com.intellij.openapi.Disposable; import com.intellij.openapi.Disposable;
import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.util.text.StringUtil;
@@ -45,31 +46,33 @@ public class JavaToKotlinTranslator {
@Nullable @Nullable
private static PsiFile createFile(@NotNull String text) { private static PsiFile createFile(@NotNull String text) {
JavaCoreEnvironment javaCoreEnvironment = setUpJavaCoreEnvironment(); JavaCoreProjectEnvironment javaCoreEnvironment = setUpJavaCoreEnvironment();
return PsiFileFactory.getInstance(javaCoreEnvironment.getProject()).createFileFromText( return PsiFileFactory.getInstance(javaCoreEnvironment.getProject()).createFileFromText(
"test.java", JavaLanguage.INSTANCE, text "test.java", JavaLanguage.INSTANCE, text
); );
} }
@Nullable @Nullable
static PsiFile createFile(@NotNull JavaCoreEnvironment javaCoreEnvironment, @NotNull String text) { static PsiFile createFile(@NotNull JavaCoreProjectEnvironment javaCoreEnvironment, @NotNull String text) {
return PsiFileFactory.getInstance(javaCoreEnvironment.getProject()).createFileFromText( return PsiFileFactory.getInstance(javaCoreEnvironment.getProject()).createFileFromText(
"test.java", JavaLanguage.INSTANCE, text "test.java", JavaLanguage.INSTANCE, text
); );
} }
@NotNull @NotNull
static JavaCoreEnvironment setUpJavaCoreEnvironment() { static JavaCoreProjectEnvironment setUpJavaCoreEnvironment() {
JavaCoreEnvironment javaCoreEnvironment = new JavaCoreEnvironment(new Disposable() { Disposable parentDisposable = new Disposable() {
@Override @Override
public void dispose() { public void dispose() {
} }
}); };
JavaCoreApplicationEnvironment applicationEnvironment = new JavaCoreApplicationEnvironment(parentDisposable);
JavaCoreProjectEnvironment javaCoreEnvironment = new JavaCoreProjectEnvironment(parentDisposable, applicationEnvironment);
javaCoreEnvironment.addToClasspath(findRtJar()); javaCoreEnvironment.addJarToClassPath(findRtJar());
File annotations = findAnnotations(); File annotations = findAnnotations();
if (annotations != null && annotations.exists()) { if (annotations != null && annotations.exists()) {
javaCoreEnvironment.addToClasspath(annotations); javaCoreEnvironment.addJarToClassPath(annotations);
} }
return javaCoreEnvironment; return javaCoreEnvironment;
} }
@@ -3,7 +3,6 @@ package org.jetbrains.jet.j2k.ast
import org.jetbrains.jet.j2k.Converter import org.jetbrains.jet.j2k.Converter
import org.jetbrains.jet.j2k.ast.types.Type import org.jetbrains.jet.j2k.ast.types.Type
import java.util.Collections import java.util.Collections
import java.util.List
public open class AnonymousClass(converter : Converter, members : List<Node>) public open class AnonymousClass(converter : Converter, members : List<Node>)
: Class(converter, : Class(converter,
@@ -48,10 +48,10 @@ public open class ArrayInitializerExpression(val `type` : Type, val initializers
class object { class object {
private open fun getConversion(afterReplace : String) : String { private open fun getConversion(afterReplace : String) : String {
if (afterReplace.contains("double").sure()) if (afterReplace.contains("double")!!)
return "." + OperatorConventions.DOUBLE + "()" return "." + OperatorConventions.DOUBLE + "()"
if (afterReplace.contains("float").sure()) if (afterReplace.contains("float")!!)
return "." + OperatorConventions.FLOAT + "()" return "." + OperatorConventions.FLOAT + "()"
return "" return ""
@@ -1,7 +1,6 @@
package org.jetbrains.jet.j2k.ast package org.jetbrains.jet.j2k.ast
import org.jetbrains.jet.j2k.ast.types.ArrayType import org.jetbrains.jet.j2k.ast.types.ArrayType
import java.util.List
import org.jetbrains.jet.j2k.ast.types.Type import org.jetbrains.jet.j2k.ast.types.Type
public open class ArrayWithoutInitializationExpression(val `type` : Type, val expressions : List<Expression>) : Expression() { public open class ArrayWithoutInitializationExpression(val `type` : Type, val expressions : List<Expression>) : Expression() {
-1
View File
@@ -1,7 +1,6 @@
package org.jetbrains.jet.j2k.ast package org.jetbrains.jet.j2k.ast
import java.util.LinkedList import java.util.LinkedList
import java.util.List
public open class Block(val statements: List<Element>, val notEmpty: Boolean = false): Statement() { public open class Block(val statements: List<Element>, val notEmpty: Boolean = false): Statement() {
public override fun isEmpty(): Boolean { public override fun isEmpty(): Boolean {
@@ -1,8 +1,5 @@
package org.jetbrains.jet.j2k.ast package org.jetbrains.jet.j2k.ast
import a.h.id
public open class CallChainExpression(val expression : Expression, val identifier : Expression) : Expression() { public open class CallChainExpression(val expression : Expression, val identifier : Expression) : Expression() {
public override fun isNullable() : Boolean { public override fun isNullable() : Boolean {
if (!expression.isEmpty() && expression.isNullable()) return true if (!expression.isEmpty() && expression.isNullable()) return true
+2 -4
View File
@@ -7,8 +7,6 @@ import org.jetbrains.jet.j2k.ast.types.ClassType
import org.jetbrains.jet.j2k.ast.types.Type import org.jetbrains.jet.j2k.ast.types.Type
import java.util.HashSet import java.util.HashSet
import java.util.LinkedList import java.util.LinkedList
import java.util.List
import java.util.Set
import java.util.ArrayList import java.util.ArrayList
public open class Class(converter : Converter, public open class Class(converter : Converter,
@@ -60,12 +58,12 @@ public open class Class(converter : Converter,
} }
private fun constructorToInit(f: Function): Function { private fun constructorToInit(f: Function): Function {
val modifiers : Set<Modifier> = HashSet<Modifier>(f.modifiers) val modifiers = HashSet<Modifier>(f.modifiers)
modifiers.add(Modifier.STATIC) modifiers.add(Modifier.STATIC)
val statements : List<Element> = f.block?.statements ?: arrayList() val statements : List<Element> = f.block?.statements ?: arrayList()
statements.add(ReturnStatement(Identifier("__"))) statements.add(ReturnStatement(Identifier("__")))
val block = Block(statements) val block = Block(statements)
val constructorTypeParameters : List<Element> = arrayList() val constructorTypeParameters = ArrayList<Element>()
constructorTypeParameters.addAll(typeParameters) constructorTypeParameters.addAll(typeParameters)
constructorTypeParameters.addAll(f.typeParameters) constructorTypeParameters.addAll(f.typeParameters)
return Function(Identifier("init"), arrayList(), modifiers, ClassType(name, constructorTypeParameters, false), return Function(Identifier("init"), arrayList(), modifiers, ClassType(name, constructorTypeParameters, false),
@@ -1,7 +1,5 @@
package org.jetbrains.jet.j2k.ast package org.jetbrains.jet.j2k.ast
import java.util.List
import java.util.Set
import org.jetbrains.jet.j2k.ast.types.Type import org.jetbrains.jet.j2k.ast.types.Type
public open class Constructor(identifier : Identifier, public open class Constructor(identifier : Identifier,
-2
View File
@@ -2,8 +2,6 @@ package org.jetbrains.jet.j2k.ast
import org.jetbrains.jet.j2k.Converter import org.jetbrains.jet.j2k.Converter
import org.jetbrains.jet.j2k.ast.types.Type import org.jetbrains.jet.j2k.ast.types.Type
import java.util.List
import java.util.Set
public open class Enum(converter : Converter, public open class Enum(converter : Converter,
name : Identifier, name : Identifier,
@@ -1,8 +1,6 @@
package org.jetbrains.jet.j2k.ast package org.jetbrains.jet.j2k.ast
import org.jetbrains.jet.j2k.ast.types.Type import org.jetbrains.jet.j2k.ast.types.Type
import java.util.Set
import java.util.List
public open class EnumConstant(identifier : Identifier, public open class EnumConstant(identifier : Identifier,
docComments: List<Node>, docComments: List<Node>,
@@ -1,7 +1,6 @@
package org.jetbrains.jet.j2k.ast package org.jetbrains.jet.j2k.ast
import org.jetbrains.jet.j2k.ast.types.Type import org.jetbrains.jet.j2k.ast.types.Type
import java.util.List
public open class ExpressionList(val expressions: List<Expression>): Expression() { public open class ExpressionList(val expressions: List<Expression>): Expression() {
public override fun toKotlin(): String = expressions.map { it.toKotlin() }.makeString(", ") public override fun toKotlin(): String = expressions.map { it.toKotlin() }.makeString(", ")
-2
View File
@@ -2,8 +2,6 @@ package org.jetbrains.jet.j2k.ast
import org.jetbrains.jet.j2k.ast.types.Type import org.jetbrains.jet.j2k.ast.types.Type
import java.util.LinkedList import java.util.LinkedList
import java.util.List
import java.util.Set
import org.jetbrains.jet.j2k.Converter import org.jetbrains.jet.j2k.Converter
public open class Field(val identifier : Identifier, public open class Field(val identifier : Identifier,
+2 -4
View File
@@ -1,10 +1,8 @@
package org.jetbrains.jet.j2k.ast package org.jetbrains.jet.j2k.ast
import java.util.List
public open class File(val packageName: String, public open class File(val packageName: String,
val imports: List<Import>, val imports: MutableList<Import>,
val body: List<Node>, val body: MutableList<Node>,
val mainFunction: String): Node() { val mainFunction: String): Node() {
public override fun toKotlin(): String { public override fun toKotlin(): String {
@@ -1,8 +1,6 @@
package org.jetbrains.jet.j2k.ast package org.jetbrains.jet.j2k.ast
import java.util.LinkedList import java.util.LinkedList
import java.util.List
import java.util.Set
import org.jetbrains.jet.j2k.ast.types.Type import org.jetbrains.jet.j2k.ast.types.Type
public open class Function(val name : Identifier, public open class Function(val name : Identifier,
@@ -1,6 +1,5 @@
package org.jetbrains.jet.j2k.ast package org.jetbrains.jet.j2k.ast
import java.util.Set
public open class Identifier(val name: String, public open class Identifier(val name: String,
@@ -1,6 +1,5 @@
package org.jetbrains.jet.j2k.ast package org.jetbrains.jet.j2k.ast
import java.util.Set
public open class Initializer(val block : Block, modifiers : Set<Modifier>) : Member(modifiers) { public open class Initializer(val block : Block, modifiers : Set<Modifier>) : Member(modifiers) {
public override fun toKotlin() : String { public override fun toKotlin() : String {
@@ -1,7 +1,6 @@
package org.jetbrains.jet.j2k.ast package org.jetbrains.jet.j2k.ast
import org.jetbrains.jet.j2k.ast.types.Type import org.jetbrains.jet.j2k.ast.types.Type
import java.util.Set
public open class LocalVariable(val identifier: Identifier, public open class LocalVariable(val identifier: Identifier,
val modifiersSet: Set<Modifier>, val modifiersSet: Set<Modifier>,
-2
View File
@@ -1,7 +1,5 @@
package org.jetbrains.jet.j2k.ast package org.jetbrains.jet.j2k.ast
import java.util.Set
public abstract class Member(val modifiers : Set<Modifier>) : Node() { public abstract class Member(val modifiers : Set<Modifier>) : Node() {
open fun accessModifier() : Modifier? { open fun accessModifier() : Modifier? {
return modifiers.find { m -> m == Modifier.PUBLIC || m == Modifier.PROTECTED || m == Modifier.PRIVATE } return modifiers.find { m -> m == Modifier.PUBLIC || m == Modifier.PROTECTED || m == Modifier.PRIVATE }
@@ -1,7 +1,6 @@
package org.jetbrains.jet.j2k.ast package org.jetbrains.jet.j2k.ast
import org.jetbrains.jet.j2k.ast.types.Type import org.jetbrains.jet.j2k.ast.types.Type
import java.util.List
public open class MethodCallExpression(val methodCall: Expression, public open class MethodCallExpression(val methodCall: Expression,
val arguments: List<Expression>, val arguments: List<Expression>,
@@ -1,18 +1,17 @@
package org.jetbrains.jet.j2k.ast package org.jetbrains.jet.j2k.ast
import org.jetbrains.annotations.Nullable import org.jetbrains.annotations.Nullable
import java.util.List
public open class NewClassExpression(val name: Element, public open class NewClassExpression(val name: Element,
val arguments: List<Expression>, val arguments: List<Expression>,
val qualifier: Expression = Expression.EMPTY_EXPRESSION, val qualifier: Expression = Expression.EMPTY_EXPRESSION,
val anonymousClass: AnonymousClass? = null): Expression() { val anonymousClass: AnonymousClass? = null): Expression() {
public override fun toKotlin(): String { public override fun toKotlin(): String {
val callOperator: String? = (if (qualifier.isNullable().sure()) val callOperator: String? = (if (qualifier.isNullable()!!)
"?." "?."
else else
".") ".")
val qualifier: String? = (if (qualifier.isEmpty().sure()) val qualifier: String? = (if (qualifier.isEmpty()!!)
"" ""
else else
qualifier.toKotlin() + callOperator) qualifier.toKotlin() + callOperator)
-1
View File
@@ -1,6 +1,5 @@
package org.jetbrains.jet.j2k.ast package org.jetbrains.jet.j2k.ast
import java.util.Set
public abstract class Node() { public abstract class Node() {
public abstract fun toKotlin(): String public abstract fun toKotlin(): String
@@ -1,6 +1,5 @@
package org.jetbrains.jet.j2k.ast package org.jetbrains.jet.j2k.ast
import java.util.List
public open class ParameterList(val parameters : List<Parameter>) : Expression() { public open class ParameterList(val parameters : List<Parameter>) : Expression() {
public override fun toKotlin() = parameters.map { it.toKotlin() }.makeString(", ") public override fun toKotlin() = parameters.map { it.toKotlin() }.makeString(", ")
@@ -1,6 +1,5 @@
package org.jetbrains.jet.j2k.ast package org.jetbrains.jet.j2k.ast
import java.util.List
public open class PolyadicExpression(val expressions: List<Expression>, val token: String): Expression() { public open class PolyadicExpression(val expressions: List<Expression>, val token: String): Expression() {
public override fun toKotlin(): String { public override fun toKotlin(): String {
@@ -1,7 +1,6 @@
package org.jetbrains.jet.j2k.ast package org.jetbrains.jet.j2k.ast
import org.jetbrains.jet.j2k.ast.types.Type import org.jetbrains.jet.j2k.ast.types.Type
import java.util.List
public open class ReferenceElement(val reference : Identifier, val types : List<Type>) : Element() { public open class ReferenceElement(val reference : Identifier, val types : List<Type>) : Element() {
public override fun toKotlin() = reference.toKotlin() + types.toKotlin(", ", "<", ">") public override fun toKotlin() = reference.toKotlin() + types.toKotlin(", ", "<", ">")
@@ -1,6 +1,5 @@
package org.jetbrains.jet.j2k.ast package org.jetbrains.jet.j2k.ast
import java.util.List
public abstract class Statement(): Element() { public abstract class Statement(): Element() {
class object { class object {
-2
View File
@@ -2,8 +2,6 @@ package org.jetbrains.jet.j2k.ast
import org.jetbrains.jet.j2k.Converter import org.jetbrains.jet.j2k.Converter
import org.jetbrains.jet.j2k.ast.types.Type import org.jetbrains.jet.j2k.ast.types.Type
import java.util.List
import java.util.Set
public open class Trait(converter : Converter, public open class Trait(converter : Converter,
name : Identifier, name : Identifier,
@@ -1,7 +1,6 @@
package org.jetbrains.jet.j2k.ast package org.jetbrains.jet.j2k.ast
import org.jetbrains.jet.j2k.ast.types.Type import org.jetbrains.jet.j2k.ast.types.Type
import java.util.List
public open class TypeParameter(val name : Identifier, val extendsTypes : List<Type>) : Element() { public open class TypeParameter(val name : Identifier, val extendsTypes : List<Type>) : Element() {
public open fun hasWhere() : Boolean = extendsTypes.size() > 1 public open fun hasWhere() : Boolean = extendsTypes.size() > 1
+3 -6
View File
@@ -1,9 +1,6 @@
package org.jetbrains.jet.j2k.ast package org.jetbrains.jet.j2k.ast
import java.util.List fun List<Node>.toKotlin(separator: String, prefix: String = "", suffix: String = ""): String {
import java.util.Collection
fun List<out Node>.toKotlin(separator: String, prefix: String = "", suffix: String = ""): String {
val result = StringBuilder() val result = StringBuilder()
if (size() > 0) { if (size() > 0) {
result.append(prefix) result.append(prefix)
@@ -15,7 +12,7 @@ fun List<out Node>.toKotlin(separator: String, prefix: String = "", suffix: Stri
} }
result.append(suffix) result.append(suffix)
} }
return result.toString()!! return result.toString()
} }
fun Collection<Modifier>.toKotlin(separator: String = " "): String { fun Collection<Modifier>.toKotlin(separator: String = " "): String {
@@ -24,7 +21,7 @@ fun Collection<Modifier>.toKotlin(separator: String = " "): String {
result.append(x.name) result.append(x.name)
result.append(separator) result.append(separator)
} }
return result.toString()!! return result.toString()
} }
fun String.withPrefix(prefix: String) = if (isEmpty()) "" else prefix + this fun String.withPrefix(prefix: String) = if (isEmpty()) "" else prefix + this
@@ -3,12 +3,12 @@ package org.jetbrains.jet.j2k.ast.types
import org.jetbrains.jet.j2k.ast.Element import org.jetbrains.jet.j2k.ast.Element
import org.jetbrains.jet.j2k.ast.Identifier import org.jetbrains.jet.j2k.ast.Identifier
import java.util.Collections import java.util.Collections
import java.util.List import java.util.ArrayList
public open class ClassType(val `type` : Identifier, val parameters : List<out Element>, nullable : Boolean) : Type(nullable) { public open class ClassType(val `type` : Identifier, val parameters : List<out Element>, nullable : Boolean) : Type(nullable) {
public override fun toKotlin() : String { public override fun toKotlin() : String {
// TODO change to map() when KT-2051 is fixed // TODO change to map() when KT-2051 is fixed
val parametersToKotlin: List<String> = arrayList() val parametersToKotlin = ArrayList<String>()
for(val param in parameters) { for(val param in parameters) {
parametersToKotlin.add(param.toKotlin()) parametersToKotlin.add(param.toKotlin())
} }
@@ -3,10 +3,9 @@ package org.jetbrains.jet.j2k.visitors
import com.intellij.psi.JavaRecursiveElementVisitor import com.intellij.psi.JavaRecursiveElementVisitor
import com.intellij.psi.PsiClass import com.intellij.psi.PsiClass
import java.util.HashSet import java.util.HashSet
import java.util.Set
public open class ClassVisitor(): JavaRecursiveElementVisitor() { public open class ClassVisitor(): JavaRecursiveElementVisitor() {
private val myClassIdentifiers: Set<String> = HashSet<String>() private val myClassIdentifiers = HashSet<String>()
public open fun getClassIdentifiers(): Set<String> { public open fun getClassIdentifiers(): Set<String> {
return HashSet<String>(myClassIdentifiers) return HashSet<String>(myClassIdentifiers)
@@ -4,7 +4,6 @@ import com.intellij.psi.*
import org.jetbrains.jet.j2k.Converter import org.jetbrains.jet.j2k.Converter
import org.jetbrains.jet.j2k.ast.* import org.jetbrains.jet.j2k.ast.*
import org.jetbrains.jet.j2k.ast.types.Type import org.jetbrains.jet.j2k.ast.types.Type
import java.util.List
import org.jetbrains.jet.j2k.isAnnotatedAsNotNull import org.jetbrains.jet.j2k.isAnnotatedAsNotNull
import org.jetbrains.jet.j2k.isDefinitelyNotNull import org.jetbrains.jet.j2k.isDefinitelyNotNull
@@ -10,7 +10,6 @@ import org.jetbrains.jet.j2k.ast.types.Type
import org.jetbrains.jet.lang.types.expressions.OperatorConventions import org.jetbrains.jet.lang.types.expressions.OperatorConventions
import java.util.ArrayList import java.util.ArrayList
import java.util.Collections import java.util.Collections
import java.util.List
import com.intellij.psi.CommonClassNames.* import com.intellij.psi.CommonClassNames.*
import com.intellij.psi.util.PsiTreeUtil import com.intellij.psi.util.PsiTreeUtil
@@ -160,10 +159,10 @@ public open class ExpressionVisitor(converter: Converter): StatementVisitor(conv
var classReference: PsiJavaCodeReferenceElement? = expression?.getClassOrAnonymousClassReference() var classReference: PsiJavaCodeReferenceElement? = expression?.getClassOrAnonymousClassReference()
val isNotConvertedClass: Boolean = classReference != null && !getConverter().getClassIdentifiers().contains(classReference?.getQualifiedName()) val isNotConvertedClass: Boolean = classReference != null && !getConverter().getClassIdentifiers().contains(classReference?.getQualifiedName())
var argumentList: PsiExpressionList? = expression?.getArgumentList() var argumentList: PsiExpressionList? = expression?.getArgumentList()
var arguments: Array<PsiExpression?> = (if (argumentList != null) var arguments: Array<PsiExpression> = (if (argumentList != null)
argumentList?.getExpressions()!! argumentList?.getExpressions()!!
else else
array<PsiExpression?>()) array<PsiExpression>())
if (constructor == null || Converter.isConstructorPrimary(constructor) || isNotConvertedClass) if (constructor == null || Converter.isConstructorPrimary(constructor) || isNotConvertedClass)
{ {
return NewClassExpression(getConverter().elementToElement(classReference), return NewClassExpression(getConverter().elementToElement(classReference),
@@ -288,8 +287,8 @@ public open class ExpressionVisitor(converter: Converter): StatementVisitor(conv
} }
public override fun visitPolyadicExpression(expression: PsiPolyadicExpression?): Unit { public override fun visitPolyadicExpression(expression: PsiPolyadicExpression?): Unit {
var parameters: List<Expression> = ArrayList<Expression>() var parameters = ArrayList<Expression>()
for (operand : PsiExpression? in expression?.getOperands()) { for (operand : PsiExpression in expression?.getOperands()!!) {
parameters.add(getConverter().expressionToExpression(operand, expression?.getType())) parameters.add(getConverter().expressionToExpression(operand, expression?.getType()))
} }
myResult = PolyadicExpression(parameters, getOperatorString(expression?.getOperationTokenType()!!)) myResult = PolyadicExpression(parameters, getOperatorString(expression?.getOperationTokenType()!!))
@@ -17,7 +17,7 @@ public open class ExpressionVisitorForDirectObjectInheritors(converter: Converte
myResult = MethodCallExpression.build(Identifier("this", false), "identityEquals", getConverter().argumentsToExpressionList(expression!!)) myResult = MethodCallExpression.build(Identifier("this", false), "identityEquals", getConverter().argumentsToExpressionList(expression!!))
} }
else if (superMethodInvocation(methodExpression, "toString")) { else if (superMethodInvocation(methodExpression, "toString")) {
myResult = DummyStringExpression(String.format("getJavaClass<%s>.getName() + '@' + Integer.toHexString(hashCode())", myResult = DummyStringExpression(java.lang.String.format("getJavaClass<%s>.getName() + '@' + Integer.toHexString(hashCode())",
ExpressionVisitor.getClassName(methodExpression))!!) ExpressionVisitor.getClassName(methodExpression))!!)
} }
else { else {
@@ -8,8 +8,8 @@ import org.jetbrains.jet.j2k.ast.*
import java.util.Arrays import java.util.Arrays
import java.util.Collections import java.util.Collections
import java.util.LinkedList import java.util.LinkedList
import java.util.List
import org.jetbrains.jet.j2k.countWritingAccesses import org.jetbrains.jet.j2k.countWritingAccesses
import java.util.ArrayList
public open class StatementVisitor(converter: Converter): ElementVisitor(converter) { public open class StatementVisitor(converter: Converter): ElementVisitor(converter) {
public override fun visitAssertStatement(statement: PsiAssertStatement?): Unit { public override fun visitAssertStatement(statement: PsiAssertStatement?): Unit {
@@ -97,7 +97,7 @@ public open class StatementVisitor(converter: Converter): ElementVisitor(convert
getConverter().statementToStatement(body)) getConverter().statementToStatement(body))
} }
else { else {
var forStatements: List<Element> = arrayList() var forStatements = ArrayList<Element>()
forStatements.add(getConverter().statementToStatement(initialization)) forStatements.add(getConverter().statementToStatement(initialization))
forStatements.add(WhileStatement(getConverter().expressionToExpression(condition), forStatements.add(WhileStatement(getConverter().expressionToExpression(condition),
Block(arrayList(getConverter().statementToStatement(body), Block(arrayList(getConverter().statementToStatement(body),
@@ -126,7 +126,7 @@ public open class StatementVisitor(converter: Converter): ElementVisitor(convert
} }
public override fun visitSwitchLabelStatement(statement: PsiSwitchLabelStatement?): Unit { public override fun visitSwitchLabelStatement(statement: PsiSwitchLabelStatement?): Unit {
myResult = (if (statement?.isDefaultCase().sure()) myResult = (if (statement?.isDefaultCase()!!)
DefaultSwitchLabelStatement() DefaultSwitchLabelStatement()
else else
SwitchLabelStatement(getConverter().expressionToExpression(statement?.getCaseValue()))) SwitchLabelStatement(getConverter().expressionToExpression(statement?.getCaseValue())))
@@ -138,14 +138,14 @@ public open class StatementVisitor(converter: Converter): ElementVisitor(convert
} }
private open fun switchBodyToCases(body: PsiCodeBlock?): List<CaseContainer> { private open fun switchBodyToCases(body: PsiCodeBlock?): List<CaseContainer> {
val cases: List<List<PsiElement?>> = splitToCases(body) val cases: List<List<PsiElement>> = splitToCases(body)
val allSwitchStatements: List<PsiElement?> = arrayList() val allSwitchStatements = ArrayList<PsiElement>()
if (body != null) { if (body != null) {
// TODO Arrays.asList() // TODO Arrays.asList()
for(s in body.getStatements()) allSwitchStatements.add(s) for(s in body.getStatements()) allSwitchStatements.add(s)
} }
val result: List<CaseContainer> = arrayList() val result = ArrayList<CaseContainer>()
var pendingLabels: List<Element> = arrayList() var pendingLabels = ArrayList<Element>()
var i: Int = 0 var i: Int = 0
for (ls in cases) { for (ls in cases) {
// TODO assert {(ls?.size()).sure() > 0} // TODO assert {(ls?.size()).sure() > 0}
@@ -154,9 +154,9 @@ public open class StatementVisitor(converter: Converter): ElementVisitor(convert
// TODO assert("not a right index") {allSwitchStatements?.get(i) == label} // TODO assert("not a right index") {allSwitchStatements?.get(i) == label}
if (ls.size() > 1) { if (ls.size() > 1) {
pendingLabels.add(getConverter().statementToStatement(label)) pendingLabels.add(getConverter().statementToStatement(label))
val slice: List<PsiElement?> = ls.subList(1, (ls.size())) val slice: List<PsiElement> = ls.subList(1, (ls.size()))
if (!containsBreak(slice)) { if (!containsBreak(slice)) {
val statements = getConverter().statementsToStatementList(slice) val statements = ArrayList(getConverter().statementsToStatementList(slice))
statements.addAll(getConverter().statementsToStatementList(getAllToNextBreak(allSwitchStatements, i + ls.size()))) statements.addAll(getConverter().statementsToStatementList(getAllToNextBreak(allSwitchStatements, i + ls.size())))
result.add(CaseContainer(pendingLabels, statements)) result.add(CaseContainer(pendingLabels, statements))
pendingLabels = arrayList() pendingLabels = arrayList()
@@ -184,7 +184,7 @@ public open class StatementVisitor(converter: Converter): ElementVisitor(convert
} }
public override fun visitTryStatement(statement: PsiTryStatement?): Unit { public override fun visitTryStatement(statement: PsiTryStatement?): Unit {
val catches: List<CatchStatement> = arrayList() val catches = ArrayList<CatchStatement>()
val catchBlocks = statement?.getCatchBlocks()!! val catchBlocks = statement?.getCatchBlocks()!!
val catchBlockParameters = statement?.getCatchBlockParameters()!! val catchBlockParameters = statement?.getCatchBlockParameters()!!
for (i in 0..catchBlocks.size - 1) { for (i in 0..catchBlocks.size - 1) {
@@ -222,8 +222,8 @@ public open class StatementVisitor(converter: Converter): ElementVisitor(convert
private fun containsBreak(slice: List<PsiElement?>) = slice.any { it is PsiBreakStatement } private fun containsBreak(slice: List<PsiElement?>) = slice.any { it is PsiBreakStatement }
private open fun getAllToNextBreak(allStatements: List<PsiElement?>, start: Int): List<PsiElement?> { private open fun getAllToNextBreak(allStatements: List<PsiElement>, start: Int): List<PsiElement> {
val result: List<PsiElement?> = arrayList() val result = ArrayList<PsiElement>()
for (i in start..allStatements.size() - 1) { for (i in start..allStatements.size() - 1) {
val s = allStatements.get(i) val s = allStatements.get(i)
if (s is PsiBreakStatement || s is PsiReturnStatement) { if (s is PsiBreakStatement || s is PsiReturnStatement) {
@@ -238,9 +238,9 @@ public open class StatementVisitor(converter: Converter): ElementVisitor(convert
return result return result
} }
private open fun splitToCases(body: PsiCodeBlock?): List<List<PsiElement?>> { private open fun splitToCases(body: PsiCodeBlock?): List<List<PsiElement>> {
val cases: List<List<PsiElement?>> = arrayList() val cases = ArrayList<List<PsiElement>>()
var currentCaseStatements: List<PsiElement?> = arrayList() var currentCaseStatements = ArrayList<PsiElement>()
var isFirst: Boolean = true var isFirst: Boolean = true
if (body != null) { if (body != null) {
for (s in body.getChildren()) { for (s in body.getChildren()) {
@@ -2,14 +2,13 @@ package org.jetbrains.jet.j2k.visitors
import com.intellij.psi.* import com.intellij.psi.*
import org.jetbrains.annotations.Nullable import org.jetbrains.annotations.Nullable
import java.util.Set
import java.util.LinkedHashSet import java.util.LinkedHashSet
public open class ThisVisitor(): JavaRecursiveElementVisitor() { public open class ThisVisitor(): JavaRecursiveElementVisitor() {
private val myResolvedConstructors: Set<PsiMethod> = LinkedHashSet<PsiMethod>() private val myResolvedConstructors = LinkedHashSet<PsiMethod>()
public override fun visitReferenceExpression(expression: PsiReferenceExpression?): Unit { public override fun visitReferenceExpression(expression: PsiReferenceExpression?): Unit {
for (r : PsiReference? in expression?.getReferences()) { for (r : PsiReference? in expression?.getReferences()!!) {
if (r?.getCanonicalText() == "this") { if (r?.getCanonicalText() == "this") {
val res: PsiElement? = r?.resolve() val res: PsiElement? = r?.resolve()
if (res is PsiMethod && res.isConstructor()) { if (res is PsiMethod && res.isConstructor()) {
@@ -7,7 +7,6 @@ import org.jetbrains.jet.j2k.J2KConverterFlags
import org.jetbrains.jet.j2k.ast.* import org.jetbrains.jet.j2k.ast.*
import org.jetbrains.jet.j2k.ast.types.* import org.jetbrains.jet.j2k.ast.types.*
import java.util.LinkedList import java.util.LinkedList
import java.util.List
import com.intellij.openapi.util.text.StringUtil import com.intellij.openapi.util.text.StringUtil
public open class TypeVisitor(private val myConverter : Converter) : PsiTypeVisitor<Type>() { public open class TypeVisitor(private val myConverter : Converter) : PsiTypeVisitor<Type>() {
@@ -79,7 +78,7 @@ public open class TypeVisitor(private val myConverter : Converter) : PsiTypeVisi
} }
private fun createRawTypesForResolvedReference(classType : PsiClassType) : List<Type> { private fun createRawTypesForResolvedReference(classType : PsiClassType) : List<Type> {
val typeParams : List<Type> = LinkedList<Type>() val typeParams = LinkedList<Type>()
if (classType is PsiClassReferenceType) { if (classType is PsiClassReferenceType) {
val reference : PsiJavaCodeReferenceElement? = (classType as PsiClassReferenceType).getReference() val reference : PsiJavaCodeReferenceElement? = (classType as PsiClassReferenceType).getReference()
val resolve : PsiElement? = reference?.resolve() val resolve : PsiElement? = reference?.resolve()
@@ -1,5 +1,4 @@
package demo package demo
import java.util.Iterator
open class Test() : java.lang.Iterable<String?> { open class Test() : java.lang.Iterable<String?> {
public override fun iterator() : java.util.Iterator<String?>? { public override fun iterator() : java.util.Iterator<String?>? {
return null return null
@@ -1,5 +1,4 @@
package test package test
import java.util.List
open class User() { open class User() {
open fun main() : Unit { open fun main() : Unit {
var list : List<Any?>? = java.util.LinkedList() var list : List<Any?>? = java.util.LinkedList()
@@ -1,4 +1,3 @@
import java.util.List
import java.util.LinkedList import java.util.LinkedList
open class User() { open class User() {
open fun main() : Unit { open fun main() : Unit {
@@ -1,5 +1,4 @@
package org.test package org.test
import java.util.List
import java.util.LinkedList import java.util.LinkedList
open class Member() { open class Member() {
} }
@@ -1,5 +1,4 @@
package demo package demo
import java.util.List
import java.util.LinkedList import java.util.LinkedList
open class Test() { open class Test() {
open fun main() : Unit { open fun main() : Unit {