1*af87fb4bSXin Li /* 2*af87fb4bSXin Li * Copyright 2020 Google LLC 3*af87fb4bSXin Li * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. 4*af87fb4bSXin Li * 5*af87fb4bSXin Li * Licensed under the Apache License, Version 2.0 (the "License"); 6*af87fb4bSXin Li * you may not use this file except in compliance with the License. 7*af87fb4bSXin Li * You may obtain a copy of the License at 8*af87fb4bSXin Li * 9*af87fb4bSXin Li * http://www.apache.org/licenses/LICENSE-2.0 10*af87fb4bSXin Li * 11*af87fb4bSXin Li * Unless required by applicable law or agreed to in writing, software 12*af87fb4bSXin Li * distributed under the License is distributed on an "AS IS" BASIS, 13*af87fb4bSXin Li * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*af87fb4bSXin Li * See the License for the specific language governing permissions and 15*af87fb4bSXin Li * limitations under the License. 16*af87fb4bSXin Li */ 17*af87fb4bSXin Li 18*af87fb4bSXin Li // TEST PROCESSOR: JavaModifierProcessor 19*af87fb4bSXin Li // EXPECTED: 20*af87fb4bSXin Li // C: ABSTRACT PUBLIC : ABSTRACT PUBLIC 21*af87fb4bSXin Li // C.staticStr: PRIVATE : PRIVATE 22*af87fb4bSXin Li // C.s1: FINAL JAVA_TRANSIENT : FINAL JAVA_TRANSIENT 23*af87fb4bSXin Li // C.i1: JAVA_STATIC JAVA_VOLATILE PROTECTED : JAVA_STATIC JAVA_VOLATILE PROTECTED 24*af87fb4bSXin Li // C.NestedC: JAVA_STATIC PUBLIC : JAVA_STATIC PUBLIC 25*af87fb4bSXin Li // NestedC.<init>: FINAL PUBLIC : FINAL PUBLIC 26*af87fb4bSXin Li // C.InnerC: PUBLIC : PUBLIC 27*af87fb4bSXin Li // InnerC.<init>: FINAL PUBLIC : FINAL PUBLIC 28*af87fb4bSXin Li // C.intFun: JAVA_DEFAULT JAVA_SYNCHRONIZED : JAVA_DEFAULT JAVA_SYNCHRONIZED 29*af87fb4bSXin Li // C.foo: ABSTRACT JAVA_STRICT : ABSTRACT JAVA_STRICT 30*af87fb4bSXin Li // C.<init>: FINAL PUBLIC : FINAL PUBLIC 31*af87fb4bSXin Li // OuterJavaClass: PUBLIC : PUBLIC 32*af87fb4bSXin Li // OuterJavaClass.staticPublicField: JAVA_STATIC PUBLIC : JAVA_STATIC PUBLIC 33*af87fb4bSXin Li // OuterJavaClass.staticPackageProtectedField: JAVA_STATIC : JAVA_STATIC 34*af87fb4bSXin Li // OuterJavaClass.staticProtectedField: JAVA_STATIC PROTECTED : JAVA_STATIC PROTECTED 35*af87fb4bSXin Li // OuterJavaClass.staticPrivateField: JAVA_STATIC PRIVATE : JAVA_STATIC PRIVATE 36*af87fb4bSXin Li // OuterJavaClass.InnerJavaClass: PUBLIC : PUBLIC 37*af87fb4bSXin Li // InnerJavaClass.<init>: FINAL PUBLIC : FINAL PUBLIC 38*af87fb4bSXin Li // OuterJavaClass.NestedJavaClass: JAVA_STATIC PUBLIC : JAVA_STATIC PUBLIC 39*af87fb4bSXin Li // NestedJavaClass.<init>: FINAL PUBLIC : FINAL PUBLIC 40*af87fb4bSXin Li // OuterJavaClass.staticPublicMethod: JAVA_STATIC PUBLIC : JAVA_STATIC PUBLIC 41*af87fb4bSXin Li // OuterJavaClass.staticPackageProtectedMethod: JAVA_STATIC : JAVA_STATIC 42*af87fb4bSXin Li // OuterJavaClass.staticProtectedMethod: JAVA_STATIC PROTECTED : JAVA_STATIC PROTECTED 43*af87fb4bSXin Li // OuterJavaClass.staticPrivateMethod: JAVA_STATIC PRIVATE : JAVA_STATIC PRIVATE 44*af87fb4bSXin Li // OuterJavaClass.<init>: FINAL PUBLIC : FINAL PUBLIC 45*af87fb4bSXin Li // OuterKotlinClass: OPEN : PUBLIC 46*af87fb4bSXin Li // OuterKotlinClass.InnerKotlinClass: INNER : FINAL PUBLIC 47*af87fb4bSXin Li // InnerKotlinClass.<init>: FINAL PUBLIC : FINAL PUBLIC 48*af87fb4bSXin Li // OuterKotlinClass.NestedKotlinClass: OPEN : PUBLIC 49*af87fb4bSXin Li // NestedKotlinClass.<init>: FINAL PUBLIC : FINAL PUBLIC 50*af87fb4bSXin Li // OuterKotlinClass.Companion: : FINAL JAVA_STATIC PUBLIC 51*af87fb4bSXin Li // Companion.companionMethod: : FINAL PUBLIC 52*af87fb4bSXin Li // Companion.companionField: CONST : FINAL PUBLIC 53*af87fb4bSXin Li // Companion.privateCompanionMethod: PRIVATE : FINAL PRIVATE 54*af87fb4bSXin Li // Companion.privateCompanionField: PRIVATE : FINAL PRIVATE 55*af87fb4bSXin Li // Companion.jvmStaticCompanionMethod: : FINAL JAVA_STATIC PUBLIC 56*af87fb4bSXin Li // Companion.jvmStaticCompanionField: : FINAL JAVA_STATIC PUBLIC 57*af87fb4bSXin Li // Companion.customJvmStaticCompanionMethod: : FINAL PUBLIC 58*af87fb4bSXin Li // Companion.customJvmStaticCompanionField: : FINAL PUBLIC 59*af87fb4bSXin Li // Companion.<init>: FINAL PUBLIC : FINAL PUBLIC 60*af87fb4bSXin Li // OuterKotlinClass.transientProperty: : FINAL JAVA_TRANSIENT PUBLIC 61*af87fb4bSXin Li // OuterKotlinClass.volatileProperty: : FINAL JAVA_VOLATILE PUBLIC 62*af87fb4bSXin Li // OuterKotlinClass.strictfpFun: : FINAL JAVA_STRICT PUBLIC 63*af87fb4bSXin Li // OuterKotlinClass.synchronizedFun: : FINAL JAVA_SYNCHRONIZED PUBLIC 64*af87fb4bSXin Li // OuterKotlinClass.<init>: FINAL PUBLIC : FINAL PUBLIC 65*af87fb4bSXin Li // DependencyOuterJavaClass: OPEN PUBLIC : PUBLIC 66*af87fb4bSXin Li // DependencyOuterJavaClass.DependencyNestedJavaClass: OPEN PUBLIC : PUBLIC 67*af87fb4bSXin Li // DependencyNestedJavaClass.<init>: FINAL PUBLIC : FINAL PUBLIC 68*af87fb4bSXin Li // DependencyOuterJavaClass.DependencyInnerJavaClass: INNER OPEN PUBLIC : PUBLIC 69*af87fb4bSXin Li // DependencyInnerJavaClass.<init>: FINAL PUBLIC : FINAL PUBLIC 70*af87fb4bSXin Li // DependencyOuterJavaClass.synchronizedFun: JAVA_SYNCHRONIZED OPEN : JAVA_SYNCHRONIZED 71*af87fb4bSXin Li // DependencyOuterJavaClass.strictfpFun: JAVA_STRICT OPEN : JAVA_STRICT 72*af87fb4bSXin Li // DependencyOuterJavaClass.transientField: FINAL JAVA_TRANSIENT : FINAL JAVA_TRANSIENT 73*af87fb4bSXin Li // DependencyOuterJavaClass.volatileField: FINAL JAVA_VOLATILE : FINAL JAVA_VOLATILE 74*af87fb4bSXin Li // DependencyOuterJavaClass.staticPublicMethod: JAVA_STATIC PUBLIC : JAVA_STATIC PUBLIC 75*af87fb4bSXin Li // DependencyOuterJavaClass.staticPackageProtectedMethod: JAVA_STATIC : JAVA_STATIC 76*af87fb4bSXin Li // DependencyOuterJavaClass.staticProtectedMethod: JAVA_STATIC PROTECTED : JAVA_STATIC PROTECTED 77*af87fb4bSXin Li // DependencyOuterJavaClass.staticPrivateMethod: JAVA_STATIC PRIVATE : JAVA_STATIC PRIVATE 78*af87fb4bSXin Li // DependencyOuterJavaClass.staticPublicField: FINAL JAVA_STATIC PUBLIC : FINAL JAVA_STATIC PUBLIC 79*af87fb4bSXin Li // DependencyOuterJavaClass.staticPackageProtectedField: FINAL JAVA_STATIC : FINAL JAVA_STATIC 80*af87fb4bSXin Li // DependencyOuterJavaClass.staticProtectedField: FINAL JAVA_STATIC PROTECTED : FINAL JAVA_STATIC PROTECTED 81*af87fb4bSXin Li // DependencyOuterJavaClass.staticPrivateField: FINAL JAVA_STATIC PRIVATE : FINAL JAVA_STATIC PRIVATE 82*af87fb4bSXin Li // DependencyOuterJavaClass.<init>: FINAL PUBLIC : FINAL PUBLIC 83*af87fb4bSXin Li // DependencyOuterKotlinClass: OPEN PUBLIC : PUBLIC 84*af87fb4bSXin Li // DependencyOuterKotlinClass.transientProperty: FINAL PUBLIC : FINAL JAVA_TRANSIENT PUBLIC 85*af87fb4bSXin Li // DependencyOuterKotlinClass.volatileProperty: FINAL PUBLIC : FINAL JAVA_VOLATILE PUBLIC 86*af87fb4bSXin Li // DependencyOuterKotlinClass.strictfpFun: FINAL PUBLIC : FINAL JAVA_STRICT PUBLIC 87*af87fb4bSXin Li // DependencyOuterKotlinClass.synchronizedFun: FINAL PUBLIC : FINAL JAVA_SYNCHRONIZED PUBLIC 88*af87fb4bSXin Li // DependencyOuterKotlinClass.Companion: FINAL PUBLIC : FINAL PUBLIC 89*af87fb4bSXin Li // Companion.companionField: FINAL PUBLIC : FINAL PUBLIC 90*af87fb4bSXin Li // Companion.customJvmStaticCompanionField: FINAL PUBLIC : FINAL PUBLIC 91*af87fb4bSXin Li // Companion.jvmStaticCompanionField: FINAL PUBLIC : FINAL PUBLIC 92*af87fb4bSXin Li // Companion.privateCompanionField: FINAL PUBLIC : FINAL PUBLIC 93*af87fb4bSXin Li // Companion.companionMethod: FINAL PUBLIC : FINAL PUBLIC 94*af87fb4bSXin Li // Companion.customJvmStaticCompanionMethod: FINAL PUBLIC : FINAL PUBLIC 95*af87fb4bSXin Li // Companion.jvmStaticCompanionMethod: FINAL PUBLIC : FINAL PUBLIC 96*af87fb4bSXin Li // Companion.privateCompanionMethod: FINAL PRIVATE : FINAL PRIVATE 97*af87fb4bSXin Li // Companion.<init>: FINAL PRIVATE : FINAL PRIVATE 98*af87fb4bSXin Li // DependencyOuterKotlinClass.DependencyInnerKotlinClass: FINAL INNER PUBLIC : FINAL PUBLIC 99*af87fb4bSXin Li // DependencyInnerKotlinClass.<init>: FINAL PUBLIC : FINAL PUBLIC 100*af87fb4bSXin Li // DependencyOuterKotlinClass.DependencyNestedKotlinClass: OPEN PUBLIC : PUBLIC 101*af87fb4bSXin Li // DependencyNestedKotlinClass.<init>: FINAL PUBLIC : FINAL PUBLIC 102*af87fb4bSXin Li // DependencyOuterKotlinClass.<init>: FINAL PUBLIC : FINAL PUBLIC 103*af87fb4bSXin Li // END 104*af87fb4bSXin Li // MODULE: module1 105*af87fb4bSXin Li // FILE: DependencyOuterJavaClass.java 106*af87fb4bSXin Li public class DependencyOuterJavaClass { 107*af87fb4bSXin Li public class DependencyInnerJavaClass {} 108*af87fb4bSXin Li public static class DependencyNestedJavaClass {} 109*af87fb4bSXin Li public static void staticPublicMethod() {} 110*af87fb4bSXin Li public static String staticPublicField; <lambda>null111*af87fb4bSXin Li static void staticPackageProtectedMethod() {} 112*af87fb4bSXin Li static String staticPackageProtectedField; 113*af87fb4bSXin Li protected static void staticProtectedMethod() {} 114*af87fb4bSXin Li protected static String staticProtectedField; 115*af87fb4bSXin Li private static void staticPrivateMethod() {} 116*af87fb4bSXin Li private static String staticPrivateField; 117*af87fb4bSXin Li transient String transientField = ""; 118*af87fb4bSXin Li volatile String volatileField = ""; <lambda>null119*af87fb4bSXin Li synchronized String synchronizedFun() { return ""; } <lambda>null120*af87fb4bSXin Li strictfp String strictfpFun() { return ""; } 121*af87fb4bSXin Li } 122*af87fb4bSXin Li // FILE: DependencyOuterKotlinClass.kt 123*af87fb4bSXin Li typealias DependencyCustomJvmStatic=JvmStatic 124*af87fb4bSXin Li open class DependencyOuterKotlinClass { 125*af87fb4bSXin Li inner class DependencyInnerKotlinClass 126*af87fb4bSXin Li open class DependencyNestedKotlinClass 127*af87fb4bSXin Li companion object { companionMethodnull128*af87fb4bSXin Li fun companionMethod() {} 129*af87fb4bSXin Li val companionField:String = "" privateCompanionMethodnull130*af87fb4bSXin Li private fun privateCompanionMethod() {} 131*af87fb4bSXin Li val privateCompanionField:String = "" 132*af87fb4bSXin Li @JvmStatic jvmStaticCompanionMethodnull133*af87fb4bSXin Li fun jvmStaticCompanionMethod() {} 134*af87fb4bSXin Li @JvmStatic 135*af87fb4bSXin Li val jvmStaticCompanionField:String = "" 136*af87fb4bSXin Li @DependencyCustomJvmStatic customJvmStaticCompanionMethodnull137*af87fb4bSXin Li fun customJvmStaticCompanionMethod() {} 138*af87fb4bSXin Li @DependencyCustomJvmStatic 139*af87fb4bSXin Li val customJvmStaticCompanionField:String = "" 140*af87fb4bSXin Li } 141*af87fb4bSXin Li 142*af87fb4bSXin Li @Transient 143*af87fb4bSXin Li val transientProperty: String = "" 144*af87fb4bSXin Li 145*af87fb4bSXin Li @Volatile 146*af87fb4bSXin Li var volatileProperty: String = "" 147*af87fb4bSXin Li 148*af87fb4bSXin Li @Strictfp strictfpFunnull149*af87fb4bSXin Li fun strictfpFun(): String = "" 150*af87fb4bSXin Li 151*af87fb4bSXin Li @Synchronized 152*af87fb4bSXin Li fun synchronizedFun(): String = "" 153*af87fb4bSXin Li } 154*af87fb4bSXin Li // MODULE: main(module1) 155*af87fb4bSXin Li // FILE: a.kt 156*af87fb4bSXin Li annotation class Test 157*af87fb4bSXin Li 158*af87fb4bSXin Li @Test 159*af87fb4bSXin Li class Foo : C() { 160*af87fb4bSXin Li 161*af87fb4bSXin Li } 162*af87fb4bSXin Li 163*af87fb4bSXin Li @Test 164*af87fb4bSXin Li class Bar : OuterJavaClass() 165*af87fb4bSXin Li 166*af87fb4bSXin Li @Test 167*af87fb4bSXin Li class Baz : OuterKotlinClass() 168*af87fb4bSXin Li 169*af87fb4bSXin Li @Test 170*af87fb4bSXin Li class JavaDependency : DependencyOuterJavaClass() 171*af87fb4bSXin Li 172*af87fb4bSXin Li @Test 173*af87fb4bSXin Li class KotlinDependency : DependencyOuterKotlinClass() 174*af87fb4bSXin Li 175*af87fb4bSXin Li // FILE: C.java 176*af87fb4bSXin Li 177*af87fb4bSXin Li public abstract class C { 178*af87fb4bSXin Li 179*af87fb4bSXin Li private String staticStr = "str" 180*af87fb4bSXin Li 181*af87fb4bSXin Li final transient String s1; 182*af87fb4bSXin Li 183*af87fb4bSXin Li protected static volatile int i1; 184*af87fb4bSXin Li 185*af87fb4bSXin Li default synchronized int intFun() { 186*af87fb4bSXin Li return 1; 187*af87fb4bSXin Li } 188*af87fb4bSXin Li 189*af87fb4bSXin Li abstract strictfp void foo() {} 190*af87fb4bSXin Li 191*af87fb4bSXin Li public static class NestedC { 192*af87fb4bSXin Li 193*af87fb4bSXin Li } 194*af87fb4bSXin Li 195*af87fb4bSXin Li public class InnerC { 196*af87fb4bSXin Li 197*af87fb4bSXin Li } 198*af87fb4bSXin Li } 199*af87fb4bSXin Li 200*af87fb4bSXin Li // FILE: OuterJavaClass.java 201*af87fb4bSXin Li public class OuterJavaClass { 202*af87fb4bSXin Li public class InnerJavaClass {} 203*af87fb4bSXin Li public static class NestedJavaClass {} 204*af87fb4bSXin Li public static void staticPublicMethod() {} 205*af87fb4bSXin Li public static String staticPublicField; <lambda>null206*af87fb4bSXin Li static void staticPackageProtectedMethod() {} 207*af87fb4bSXin Li static String staticPackageProtectedField; 208*af87fb4bSXin Li protected static void staticProtectedMethod() {} 209*af87fb4bSXin Li protected static String staticProtectedField; 210*af87fb4bSXin Li private static void staticPrivateMethod() {} 211*af87fb4bSXin Li private static String staticPrivateField; 212*af87fb4bSXin Li } 213*af87fb4bSXin Li // FILE: OuterKotlinClass.kt 214*af87fb4bSXin Li typealias CustomJvmStatic=JvmStatic 215*af87fb4bSXin Li open class OuterKotlinClass { 216*af87fb4bSXin Li inner class InnerKotlinClass 217*af87fb4bSXin Li open class NestedKotlinClass 218*af87fb4bSXin Li companion object { companionMethodnull219*af87fb4bSXin Li fun companionMethod() {} 220*af87fb4bSXin Li const val companionField:String = "" privateCompanionMethodnull221*af87fb4bSXin Li private fun privateCompanionMethod() {} 222*af87fb4bSXin Li private val privateCompanionField:String = "" 223*af87fb4bSXin Li @JvmStatic jvmStaticCompanionMethodnull224*af87fb4bSXin Li fun jvmStaticCompanionMethod() {} 225*af87fb4bSXin Li @JvmStatic 226*af87fb4bSXin Li val jvmStaticCompanionField:String = "" 227*af87fb4bSXin Li @CustomJvmStatic customJvmStaticCompanionMethodnull228*af87fb4bSXin Li fun customJvmStaticCompanionMethod() {} 229*af87fb4bSXin Li @CustomJvmStatic 230*af87fb4bSXin Li val customJvmStaticCompanionField:String = "" 231*af87fb4bSXin Li } 232*af87fb4bSXin Li 233*af87fb4bSXin Li @Transient 234*af87fb4bSXin Li val transientProperty: String = "" 235*af87fb4bSXin Li 236*af87fb4bSXin Li @Volatile 237*af87fb4bSXin Li var volatileProperty: String = "" 238*af87fb4bSXin Li 239*af87fb4bSXin Li @Strictfp strictfpFunnull240*af87fb4bSXin Li fun strictfpFun(): String = "" 241*af87fb4bSXin Li 242*af87fb4bSXin Li @Synchronized 243*af87fb4bSXin Li fun synchronizedFun(): String = "" 244*af87fb4bSXin Li } 245