From bf952198b5368d05fc25a0fac085ca029730cfa6 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Thu, 10 Jul 2014 19:02:46 +0400 Subject: [PATCH] Java to Kotlin converter: refactoring --- j2k/src/org/jetbrains/jet/j2k/Converter.kt | 11 ++++++ .../org/jetbrains/jet/j2k/MainMethodUtils.kt | 39 ------------------- j2k/src/org/jetbrains/jet/j2k/Utils.kt | 3 ++ j2k/src/org/jetbrains/jet/j2k/ast/File.kt | 11 +++--- 4 files changed, 19 insertions(+), 45 deletions(-) delete mode 100644 j2k/src/org/jetbrains/jet/j2k/MainMethodUtils.kt diff --git a/j2k/src/org/jetbrains/jet/j2k/Converter.kt b/j2k/src/org/jetbrains/jet/j2k/Converter.kt index 02f35dfdd83..0616226e592 100644 --- a/j2k/src/org/jetbrains/jet/j2k/Converter.kt +++ b/j2k/src/org/jetbrains/jet/j2k/Converter.kt @@ -23,6 +23,7 @@ import java.util.* import com.intellij.psi.CommonClassNames.* import org.jetbrains.jet.lang.types.expressions.OperatorConventions.* import com.intellij.openapi.project.Project +import com.intellij.psi.util.PsiMethodUtil public trait ConversionScope { public fun contains(element: PsiElement): Boolean @@ -100,6 +101,16 @@ public class Converter private(val project: Project, val settings: ConverterSett return File(convertedChildren, createMainFunction(javaFile)).assignPrototype(javaFile) } + private fun createMainFunction(file: PsiJavaFile): String? { + for (`class` in file.getClasses()) { + val mainMethod = PsiMethodUtil.findMainMethod(`class`) + if (mainMethod != null) { + return "fun main(args: Array) = ${`class`.getName()}.${mainMethod.getName()}(args)" + } + } + return null + } + fun convertAnonymousClassBody(anonymousClass: PsiAnonymousClass): AnonymousClassBody { return AnonymousClassBody(convertBody(anonymousClass, null), anonymousClass.getBaseClassType().resolve()?.isInterface() ?: false).assignPrototype(anonymousClass) } diff --git a/j2k/src/org/jetbrains/jet/j2k/MainMethodUtils.kt b/j2k/src/org/jetbrains/jet/j2k/MainMethodUtils.kt deleted file mode 100644 index fb24955b5ed..00000000000 --- a/j2k/src/org/jetbrains/jet/j2k/MainMethodUtils.kt +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright 2010-2013 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 - -import com.intellij.psi.PsiMethod -import com.intellij.psi.PsiClass -import com.intellij.psi.PsiJavaFile -import java.util.ArrayList -import com.intellij.psi.PsiAnonymousClass -import com.intellij.psi.PsiModifier -import com.intellij.psi.PsiType -import com.intellij.psi.PsiArrayType -import com.intellij.psi.util.PsiMethodUtil - -fun createMainFunction(file: PsiJavaFile): String { - for (`class` in file.getClasses()) { - val mainMethod = PsiMethodUtil.findMainMethod(`class`) - if (mainMethod != null) { - return "fun main(args: Array) = ${`class`.getName()}.${mainMethod.getName()}(args)" - } - } - return "" -} - -fun PsiMethod.isMainMethod(): Boolean = PsiMethodUtil.isMainMethod(this) \ No newline at end of file diff --git a/j2k/src/org/jetbrains/jet/j2k/Utils.kt b/j2k/src/org/jetbrains/jet/j2k/Utils.kt index c93b2f693e9..4d93f29f830 100644 --- a/j2k/src/org/jetbrains/jet/j2k/Utils.kt +++ b/j2k/src/org/jetbrains/jet/j2k/Utils.kt @@ -22,6 +22,7 @@ import com.intellij.psi.util.PsiUtil import com.intellij.psi.search.LocalSearchScope import com.intellij.psi.search.searches.ReferencesSearch import org.jetbrains.jet.j2k.ast.* +import com.intellij.psi.util.PsiMethodUtil fun quoteKeywords(packageName: String): String = packageName.split("\\.").map { Identifier.toKotlin(it) }.joinToString(".") @@ -133,3 +134,5 @@ fun PsiModifierListOwner.accessModifier(): String = when { hasModifierProperty(PsiModifier.PROTECTED) -> PsiModifier.PROTECTED else -> PsiModifier.PACKAGE_LOCAL } + +fun PsiMethod.isMainMethod(): Boolean = PsiMethodUtil.isMainMethod(this) diff --git a/j2k/src/org/jetbrains/jet/j2k/ast/File.kt b/j2k/src/org/jetbrains/jet/j2k/ast/File.kt index 01ec9127bab..bb86687a7bf 100644 --- a/j2k/src/org/jetbrains/jet/j2k/ast/File.kt +++ b/j2k/src/org/jetbrains/jet/j2k/ast/File.kt @@ -25,12 +25,11 @@ class PackageStatement(val packageName: String) : Element() { } } -class File( - val elements: List, - val mainFunction: String -) : Element() { - +class File(val elements: List, val mainFunction: String?) : Element() { override fun generateCode(builder: CodeBuilder) { - builder.append(elements, "\n").append(mainFunction) + builder.append(elements, "\n") + if (mainFunction != null) { + builder.append(mainFunction) + } } }