diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java index 0dae05b60ad..dcdae243376 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java @@ -1386,6 +1386,12 @@ public class DiagnosisCompilerTestFE10TestdataTestGenerated extends AbstractDiag runTest("compiler/testData/diagnostics/tests/annotations/invalidTypesInAnnotationConstructor.kt"); } + @Test + @TestMetadata("javaAnnotationAndJavaClassWithIt.kt") + public void testJavaAnnotationAndJavaClassWithIt() throws Exception { + runTest("compiler/testData/diagnostics/tests/annotations/javaAnnotationAndJavaClassWithIt.kt"); + } + @Test @TestMetadata("JavaAnnotationConstructors.kt") public void testJavaAnnotationConstructors() throws Exception { diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/index/SingleJavaFileRootsIndex.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/index/SingleJavaFileRootsIndex.kt index 6798d1e6d27..01fbc6cb400 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/index/SingleJavaFileRootsIndex.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/index/SingleJavaFileRootsIndex.kt @@ -58,6 +58,7 @@ class SingleJavaFileRootsIndex(private val roots: List) { start(String(file.contentsToByteArray())) } private var braceBalance = 0 + private var parenthesisBalance = 0 private fun at(type: IElementType): Boolean = lexer.tokenType == type @@ -67,6 +68,8 @@ class SingleJavaFileRootsIndex(private val roots: List) { when { at(ElementType.LBRACE) -> braceBalance++ at(ElementType.RBRACE) -> braceBalance-- + at(ElementType.LPARENTH) -> parenthesisBalance++ + at(ElementType.RPARENTH) -> parenthesisBalance-- } lexer.advance() } @@ -74,7 +77,7 @@ class SingleJavaFileRootsIndex(private val roots: List) { private fun tokenText(): String = lexer.tokenText private fun atClass(): Boolean = - braceBalance == 0 && (lexer.tokenType in CLASS_KEYWORDS || atRecord()) + braceBalance == 0 && parenthesisBalance == 0 && (lexer.tokenType in CLASS_KEYWORDS || atRecord()) private fun atRecord(): Boolean { // Note that the soft keyword "record" is lexed as IDENTIFIER instead of RECORD_KEYWORD. @@ -112,7 +115,6 @@ class SingleJavaFileRootsIndex(private val roots: List) { if (end()) break result.add(ClassId(packageFqName, Name.identifier(tokenText()))) } - return result } diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java index 414738a21b3..4d07d183575 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java @@ -1392,6 +1392,12 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirDiagnosti runTest("compiler/testData/diagnostics/tests/annotations/invalidTypesInAnnotationConstructor.kt"); } + @Test + @TestMetadata("javaAnnotationAndJavaClassWithIt.kt") + public void testJavaAnnotationAndJavaClassWithIt() throws Exception { + runTest("compiler/testData/diagnostics/tests/annotations/javaAnnotationAndJavaClassWithIt.kt"); + } + @Test @TestMetadata("JavaAnnotationConstructors.kt") public void testJavaAnnotationConstructors() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java index 40c5d941bff..361d50fb63f 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java @@ -1386,6 +1386,12 @@ public class FirOldFrontendDiagnosticsWithLightTreeTestGenerated extends Abstrac runTest("compiler/testData/diagnostics/tests/annotations/invalidTypesInAnnotationConstructor.kt"); } + @Test + @TestMetadata("javaAnnotationAndJavaClassWithIt.kt") + public void testJavaAnnotationAndJavaClassWithIt() throws Exception { + runTest("compiler/testData/diagnostics/tests/annotations/javaAnnotationAndJavaClassWithIt.kt"); + } + @Test @TestMetadata("JavaAnnotationConstructors.kt") public void testJavaAnnotationConstructors() throws Exception { diff --git a/compiler/testData/diagnostics/tests/annotations/javaAnnotationAndJavaClassWithIt.kt b/compiler/testData/diagnostics/tests/annotations/javaAnnotationAndJavaClassWithIt.kt new file mode 100644 index 00000000000..e6724ab98b4 --- /dev/null +++ b/compiler/testData/diagnostics/tests/annotations/javaAnnotationAndJavaClassWithIt.kt @@ -0,0 +1,28 @@ +// FIR_IDENTICAL +// ISSUE: KT-56847 +// FILE: foo/TestTarget.java +package foo; + +@AnnotationWithArg(String.class) +@Ann +public final class TestTarget {} + +// FILE: foo/Ann.java +package foo; + +public @interface Ann {} + +// FILE: foo/AnnotationWithArg.java +package foo; + +public @interface AnnotationWithArg { + Class value(); +} + +// FILE: foo/AnotherTarget.kt +package foo + +@Ann +class AnotherTarget { + fun hello() {} +} diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java index 32430804958..ef3421d88b2 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java @@ -1392,6 +1392,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/annotations/invalidTypesInAnnotationConstructor.kt"); } + @Test + @TestMetadata("javaAnnotationAndJavaClassWithIt.kt") + public void testJavaAnnotationAndJavaClassWithIt() throws Exception { + runTest("compiler/testData/diagnostics/tests/annotations/javaAnnotationAndJavaClassWithIt.kt"); + } + @Test @TestMetadata("JavaAnnotationConstructors.kt") public void testJavaAnnotationConstructors() throws Exception {