From 242daa8e17775170152c007e417dbd2ddde0c2ff Mon Sep 17 00:00:00 2001 From: Sergey Ignatov Date: Wed, 23 Nov 2011 14:12:04 +0400 Subject: [PATCH] KT-595 Don't create open functions in open classes --- src/org/jetbrains/jet/j2k/Converter.java | 5 +++++ src/org/jetbrains/jet/j2k/ast/Function.java | 3 +++ src/org/jetbrains/jet/j2k/ast/Modifier.java | 1 + test/org/jetbrains/jet/j2k/JavaToKotlinConverterTest.java | 2 +- testData/ast/arrayType/method/methodArrayArgs.kt | 2 +- testData/ast/class/class/classWithEmptyMethods.kt | 6 +++--- testData/ast/class/class/oneStaticFieldOneNonStatic.kt | 2 +- testData/ast/class/class/oneStaticMethod.kt | 2 +- testData/ast/class/class/oneStaticMethodOneNonStatic.kt | 4 ++-- testData/ast/class/class/twoStaticMethod.kt | 4 ++-- testData/ast/function/file/functionInFinalClass.jav | 5 +++++ testData/ast/function/file/functionInFinalClass.kt | 5 +++++ testData/ast/function/method/abstractMethod.kt | 2 +- testData/ast/function/method/classGenericParam.kt | 2 +- testData/ast/function/method/emptyVoidMethod.kt | 2 +- testData/ast/function/method/internal.kt | 2 +- testData/ast/function/method/main.kt | 2 +- testData/ast/function/method/methodClassType.kt | 2 +- testData/ast/function/method/methodPrimitiveType.kt | 2 +- testData/ast/function/method/methodPrimitiveType2.kt | 2 +- testData/ast/function/method/methodWithReturnStatement.kt | 2 +- testData/ast/function/method/open.kt | 2 +- testData/ast/function/method/ownGenericParam.kt | 2 +- testData/ast/function/method/ownSeveralGenericParams.kt | 2 +- testData/ast/function/method/private.kt | 2 +- testData/ast/function/method/protected.kt | 2 +- testData/ast/function/method/public.kt | 2 +- testData/ast/inProjectionType/method/methodParams.kt | 2 +- testData/ast/outProjectionType/method/methodParams.kt | 2 +- testData/ast/starProjectionType/method/methodParams.kt | 2 +- .../method/methodDoubleParametrizationWithTwoBounds.kt | 2 +- testData/ast/typeParameters/method/where.kt | 2 +- testData/ast/varArg/method/ellipsisTypeSeveralParams.kt | 2 +- testData/ast/varArg/method/ellipsisTypeSingleParams.kt | 2 +- 34 files changed, 52 insertions(+), 33 deletions(-) create mode 100644 testData/ast/function/file/functionInFinalClass.jav create mode 100644 testData/ast/function/file/functionInFinalClass.kt diff --git a/src/org/jetbrains/jet/j2k/Converter.java b/src/org/jetbrains/jet/j2k/Converter.java index 0cd3dbf7dcb..bfbdb2cece4 100644 --- a/src/org/jetbrains/jet/j2k/Converter.java +++ b/src/org/jetbrains/jet/j2k/Converter.java @@ -274,6 +274,11 @@ public class Converter { modifiers.add(Modifier.OVERRIDE); if (method.getParent() instanceof PsiClass && ((PsiClass) method.getParent()).isInterface()) modifiers.remove(Modifier.ABSTRACT); + if (method.getParent() instanceof PsiClass) { + final PsiModifierList parentModifierList = ((PsiClass) method.getParent()).getModifierList(); + if (parentModifierList != null && parentModifierList.hasExplicitModifier(Modifier.FINAL)) + modifiers.add(Modifier.NOT_OPEN); + } if (method.isConstructor()) { // TODO: simplify boolean isPrimary = isConstructorPrimary(method); diff --git a/src/org/jetbrains/jet/j2k/ast/Function.java b/src/org/jetbrains/jet/j2k/ast/Function.java index 8bf2649aaa6..36545c0948b 100644 --- a/src/org/jetbrains/jet/j2k/ast/Function.java +++ b/src/org/jetbrains/jet/j2k/ast/Function.java @@ -78,6 +78,9 @@ public class Function extends Member { if (!myModifiers.contains(Modifier.OVERRIDE) && !myModifiers.contains(Modifier.FINAL)) modifierList.add(Modifier.OPEN); + if (myModifiers.contains(Modifier.NOT_OPEN)) + modifierList.remove(Modifier.OPEN); + modifierList.add(accessModifier()); if (modifierList.size() > 0) diff --git a/src/org/jetbrains/jet/j2k/ast/Modifier.java b/src/org/jetbrains/jet/j2k/ast/Modifier.java index 31a85df152a..92920946ae2 100644 --- a/src/org/jetbrains/jet/j2k/ast/Modifier.java +++ b/src/org/jetbrains/jet/j2k/ast/Modifier.java @@ -12,5 +12,6 @@ public abstract class Modifier { public static final String ABSTRACT = "abstract"; public static final String FINAL = "final"; public static final String OPEN = "open"; + public static final String NOT_OPEN = "not open"; public static final String OVERRIDE = "override"; } diff --git a/test/org/jetbrains/jet/j2k/JavaToKotlinConverterTest.java b/test/org/jetbrains/jet/j2k/JavaToKotlinConverterTest.java index e33825f9fdd..2a205a86981 100644 --- a/test/org/jetbrains/jet/j2k/JavaToKotlinConverterTest.java +++ b/test/org/jetbrains/jet/j2k/JavaToKotlinConverterTest.java @@ -114,7 +114,7 @@ public class JavaToKotlinConverterTest extends LightDaemonAnalyzerTestCase { static String statementToKotlin(String text) throws Exception { String result = methodToKotlin("void main() {" + text + "}"); int pos = result.lastIndexOf("}"); - result = result.substring(0, pos).replaceFirst("open fun main\\(\\) : Unit \\{", ""); + result = result.substring(0, pos).replaceFirst("fun main\\(\\) : Unit \\{", ""); return prettify(result); } diff --git a/testData/ast/arrayType/method/methodArrayArgs.kt b/testData/ast/arrayType/method/methodArrayArgs.kt index 0eadd674755..b095e2dd099 100644 --- a/testData/ast/arrayType/method/methodArrayArgs.kt +++ b/testData/ast/arrayType/method/methodArrayArgs.kt @@ -1,2 +1,2 @@ -open fun fromArrayToCollection(a : Array?) : Unit { +fun fromArrayToCollection(a : Array?) : Unit { } \ No newline at end of file diff --git a/testData/ast/class/class/classWithEmptyMethods.kt b/testData/ast/class/class/classWithEmptyMethods.kt index d92d545ffa0..18ced74776d 100644 --- a/testData/ast/class/class/classWithEmptyMethods.kt +++ b/testData/ast/class/class/classWithEmptyMethods.kt @@ -1,8 +1,8 @@ class T() { -open fun main() : Unit { +fun main() : Unit { } -open fun i() : Int { +fun i() : Int { } -open fun s() : String? { +fun s() : String? { } } \ No newline at end of file diff --git a/testData/ast/class/class/oneStaticFieldOneNonStatic.kt b/testData/ast/class/class/oneStaticFieldOneNonStatic.kt index fe55d4cafd3..7be6598f76a 100644 --- a/testData/ast/class/class/oneStaticFieldOneNonStatic.kt +++ b/testData/ast/class/class/oneStaticFieldOneNonStatic.kt @@ -1,5 +1,5 @@ class S() { -open fun sB() : Boolean { +fun sB() : Boolean { return true } class object { diff --git a/testData/ast/class/class/oneStaticMethod.kt b/testData/ast/class/class/oneStaticMethod.kt index 6906f476300..beb564521e3 100644 --- a/testData/ast/class/class/oneStaticMethod.kt +++ b/testData/ast/class/class/oneStaticMethod.kt @@ -1,6 +1,6 @@ class S() { class object { -open fun staticF() : Boolean { +fun staticF() : Boolean { return true } } diff --git a/testData/ast/class/class/oneStaticMethodOneNonStatic.kt b/testData/ast/class/class/oneStaticMethodOneNonStatic.kt index 382ea95f5b0..cb96091ed53 100644 --- a/testData/ast/class/class/oneStaticMethodOneNonStatic.kt +++ b/testData/ast/class/class/oneStaticMethodOneNonStatic.kt @@ -1,9 +1,9 @@ class S() { -open fun sB() : Boolean { +fun sB() : Boolean { return true } class object { -open fun sI() : Int { +fun sI() : Int { return 1 } } diff --git a/testData/ast/class/class/twoStaticMethod.kt b/testData/ast/class/class/twoStaticMethod.kt index 0500e4be576..87bd397e519 100644 --- a/testData/ast/class/class/twoStaticMethod.kt +++ b/testData/ast/class/class/twoStaticMethod.kt @@ -1,9 +1,9 @@ class S() { class object { -open fun sB() : Boolean { +fun sB() : Boolean { return true } -open fun sI() : Int { +fun sI() : Int { return 1 } } diff --git a/testData/ast/function/file/functionInFinalClass.jav b/testData/ast/function/file/functionInFinalClass.jav new file mode 100644 index 00000000000..e8417401a9a --- /dev/null +++ b/testData/ast/function/file/functionInFinalClass.jav @@ -0,0 +1,5 @@ +package demo; + +final class Final { + void test() {} +} \ No newline at end of file diff --git a/testData/ast/function/file/functionInFinalClass.kt b/testData/ast/function/file/functionInFinalClass.kt new file mode 100644 index 00000000000..507b84ba7d4 --- /dev/null +++ b/testData/ast/function/file/functionInFinalClass.kt @@ -0,0 +1,5 @@ +namespace demo +class Final() { +fun test() : Unit { +} +} \ No newline at end of file diff --git a/testData/ast/function/method/abstractMethod.kt b/testData/ast/function/method/abstractMethod.kt index f5e9004be67..8163dfad9bb 100644 --- a/testData/ast/function/method/abstractMethod.kt +++ b/testData/ast/function/method/abstractMethod.kt @@ -1 +1 @@ -abstract open fun getNoofGears() : Int \ No newline at end of file +abstract fun getNoofGears() : Int \ No newline at end of file diff --git a/testData/ast/function/method/classGenericParam.kt b/testData/ast/function/method/classGenericParam.kt index a232b7e30fe..b9ea1d49799 100644 --- a/testData/ast/function/method/classGenericParam.kt +++ b/testData/ast/function/method/classGenericParam.kt @@ -1,2 +1,2 @@ -open fun getT() : T? { +fun getT() : T? { } \ No newline at end of file diff --git a/testData/ast/function/method/emptyVoidMethod.kt b/testData/ast/function/method/emptyVoidMethod.kt index 25bd4ab1d8e..ae299eb173a 100644 --- a/testData/ast/function/method/emptyVoidMethod.kt +++ b/testData/ast/function/method/emptyVoidMethod.kt @@ -1,2 +1,2 @@ -open fun main() : Unit { +fun main() : Unit { } \ No newline at end of file diff --git a/testData/ast/function/method/internal.kt b/testData/ast/function/method/internal.kt index 86f2b8d992f..5b3e9634f3f 100644 --- a/testData/ast/function/method/internal.kt +++ b/testData/ast/function/method/internal.kt @@ -1,2 +1,2 @@ -open fun test() : Unit { +fun test() : Unit { } \ No newline at end of file diff --git a/testData/ast/function/method/main.kt b/testData/ast/function/method/main.kt index 8d173e36a09..164c099f986 100644 --- a/testData/ast/function/method/main.kt +++ b/testData/ast/function/method/main.kt @@ -1,4 +1,4 @@ class object { -open public fun main(args : Array?) : Unit { +public fun main(args : Array?) : Unit { } } \ No newline at end of file diff --git a/testData/ast/function/method/methodClassType.kt b/testData/ast/function/method/methodClassType.kt index ef426384d58..196c45b6bf8 100644 --- a/testData/ast/function/method/methodClassType.kt +++ b/testData/ast/function/method/methodClassType.kt @@ -1,2 +1,2 @@ -open fun main() : String? { +fun main() : String? { } \ No newline at end of file diff --git a/testData/ast/function/method/methodPrimitiveType.kt b/testData/ast/function/method/methodPrimitiveType.kt index 6f5f11b4c16..c6ef43f8a14 100644 --- a/testData/ast/function/method/methodPrimitiveType.kt +++ b/testData/ast/function/method/methodPrimitiveType.kt @@ -1,2 +1,2 @@ -open fun main() : Int { +fun main() : Int { } \ No newline at end of file diff --git a/testData/ast/function/method/methodPrimitiveType2.kt b/testData/ast/function/method/methodPrimitiveType2.kt index d40b67fb1a4..c978e93e7aa 100644 --- a/testData/ast/function/method/methodPrimitiveType2.kt +++ b/testData/ast/function/method/methodPrimitiveType2.kt @@ -1,2 +1,2 @@ -open fun main() : Boolean { +fun main() : Boolean { } \ No newline at end of file diff --git a/testData/ast/function/method/methodWithReturnStatement.kt b/testData/ast/function/method/methodWithReturnStatement.kt index c11bfd3dc43..acfbd1010d8 100644 --- a/testData/ast/function/method/methodWithReturnStatement.kt +++ b/testData/ast/function/method/methodWithReturnStatement.kt @@ -1,3 +1,3 @@ -open fun isTrue() : Boolean { +fun isTrue() : Boolean { return true } \ No newline at end of file diff --git a/testData/ast/function/method/open.kt b/testData/ast/function/method/open.kt index db906a336d7..e6cf12b2b3f 100644 --- a/testData/ast/function/method/open.kt +++ b/testData/ast/function/method/open.kt @@ -1,3 +1,3 @@ -open fun getString() : String? { +fun getString() : String? { return "" } \ No newline at end of file diff --git a/testData/ast/function/method/ownGenericParam.kt b/testData/ast/function/method/ownGenericParam.kt index d2ab8c63c57..e5533fdcb5f 100644 --- a/testData/ast/function/method/ownGenericParam.kt +++ b/testData/ast/function/method/ownGenericParam.kt @@ -1,2 +1,2 @@ -open fun putU(u : U?) : Unit { +fun putU(u : U?) : Unit { } \ No newline at end of file diff --git a/testData/ast/function/method/ownSeveralGenericParams.kt b/testData/ast/function/method/ownSeveralGenericParams.kt index 58e046f0576..19fb6188681 100644 --- a/testData/ast/function/method/ownSeveralGenericParams.kt +++ b/testData/ast/function/method/ownSeveralGenericParams.kt @@ -1,2 +1,2 @@ -open fun putUVW(u : U?, v : V?, w : W?) : Unit { +fun putUVW(u : U?, v : V?, w : W?) : Unit { } \ No newline at end of file diff --git a/testData/ast/function/method/private.kt b/testData/ast/function/method/private.kt index f40bc043813..45e5e8bab00 100644 --- a/testData/ast/function/method/private.kt +++ b/testData/ast/function/method/private.kt @@ -1,2 +1,2 @@ -open private fun test() : Unit { +private fun test() : Unit { } \ No newline at end of file diff --git a/testData/ast/function/method/protected.kt b/testData/ast/function/method/protected.kt index 597abfa9954..dbbc30b447b 100644 --- a/testData/ast/function/method/protected.kt +++ b/testData/ast/function/method/protected.kt @@ -1,2 +1,2 @@ -open protected fun test() : Unit { +protected fun test() : Unit { } \ No newline at end of file diff --git a/testData/ast/function/method/public.kt b/testData/ast/function/method/public.kt index 8f596ec1552..d835330ec86 100644 --- a/testData/ast/function/method/public.kt +++ b/testData/ast/function/method/public.kt @@ -1,2 +1,2 @@ -open public fun test() : Unit { +public fun test() : Unit { } \ No newline at end of file diff --git a/testData/ast/inProjectionType/method/methodParams.kt b/testData/ast/inProjectionType/method/methodParams.kt index 51fa30eb158..6888dcd5c36 100644 --- a/testData/ast/inProjectionType/method/methodParams.kt +++ b/testData/ast/inProjectionType/method/methodParams.kt @@ -1,2 +1,2 @@ -open fun popAll(dst : Collection?) : Unit { +fun popAll(dst : Collection?) : Unit { } \ No newline at end of file diff --git a/testData/ast/outProjectionType/method/methodParams.kt b/testData/ast/outProjectionType/method/methodParams.kt index 895538b7d7f..373c01e629f 100644 --- a/testData/ast/outProjectionType/method/methodParams.kt +++ b/testData/ast/outProjectionType/method/methodParams.kt @@ -1,2 +1,2 @@ -open fun pushAll(src : Collection?) : Unit { +fun pushAll(src : Collection?) : Unit { } \ No newline at end of file diff --git a/testData/ast/starProjectionType/method/methodParams.kt b/testData/ast/starProjectionType/method/methodParams.kt index 4e2b7104724..01ea4c15302 100644 --- a/testData/ast/starProjectionType/method/methodParams.kt +++ b/testData/ast/starProjectionType/method/methodParams.kt @@ -1,2 +1,2 @@ -open fun wtf(w : Collection<*>?) : Unit { +fun wtf(w : Collection<*>?) : Unit { } \ No newline at end of file diff --git a/testData/ast/typeParameters/method/methodDoubleParametrizationWithTwoBounds.kt b/testData/ast/typeParameters/method/methodDoubleParametrizationWithTwoBounds.kt index d29c4d690fb..21f892b7d8d 100644 --- a/testData/ast/typeParameters/method/methodDoubleParametrizationWithTwoBounds.kt +++ b/testData/ast/typeParameters/method/methodDoubleParametrizationWithTwoBounds.kt @@ -1,2 +1,2 @@ -open fun max(coll : Collection?) : T? where T : Comparable?, K : Collection? { +fun max(coll : Collection?) : T? where T : Comparable?, K : Collection? { } \ No newline at end of file diff --git a/testData/ast/typeParameters/method/where.kt b/testData/ast/typeParameters/method/where.kt index 732410c49ba..6a1ccaeeec6 100644 --- a/testData/ast/typeParameters/method/where.kt +++ b/testData/ast/typeParameters/method/where.kt @@ -1,2 +1,2 @@ -open fun max(coll : Collection?) : T? where T : Comparable? { +fun max(coll : Collection?) : T? where T : Comparable? { } \ No newline at end of file diff --git a/testData/ast/varArg/method/ellipsisTypeSeveralParams.kt b/testData/ast/varArg/method/ellipsisTypeSeveralParams.kt index b69052b794a..78207eee74b 100644 --- a/testData/ast/varArg/method/ellipsisTypeSeveralParams.kt +++ b/testData/ast/varArg/method/ellipsisTypeSeveralParams.kt @@ -1 +1 @@ -open fun format(pattern : String?, vararg arguments : Any?) : String? \ No newline at end of file +fun format(pattern : String?, vararg arguments : Any?) : String? \ No newline at end of file diff --git a/testData/ast/varArg/method/ellipsisTypeSingleParams.kt b/testData/ast/varArg/method/ellipsisTypeSingleParams.kt index 3dc3d147740..5219629e1e3 100644 --- a/testData/ast/varArg/method/ellipsisTypeSingleParams.kt +++ b/testData/ast/varArg/method/ellipsisTypeSingleParams.kt @@ -1,2 +1,2 @@ -open fun pushAll(vararg objs : Any?) : Unit { +fun pushAll(vararg objs : Any?) : Unit { } \ No newline at end of file