/*
 * Copyright 2023 Google LLC
 * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
 *
 * 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.
 */

// WITH_RUNTIME
// TEST PROCESSOR: OverrideeProcessor
// EXPECTED:
// JavaAnno:
// JavaAnno.intParam -> null
// JavaAnnos:
// JavaAnnos.value -> null
// END

// FILE: dummy.kt
class Dummy

// FILE: JavaAnno.java
@java.lang.annotation.Repeatable(JavaAnnos.class)
    public @interface JavaAnno {
    int intParam();
}

// FILE: JavaAnnos.java
    public @interface JavaAnnos {
    JavaAnno[] value();
}
