diff --git a/plugins/kapt3/src/org/jetbrains/kotlin/kapt3/stubs/ClassFileToSourceStubConverter.kt b/plugins/kapt3/src/org/jetbrains/kotlin/kapt3/stubs/ClassFileToSourceStubConverter.kt index 0e5c2d08e6f..94f5cd02f14 100644 --- a/plugins/kapt3/src/org/jetbrains/kotlin/kapt3/stubs/ClassFileToSourceStubConverter.kt +++ b/plugins/kapt3/src/org/jetbrains/kotlin/kapt3/stubs/ClassFileToSourceStubConverter.kt @@ -189,6 +189,7 @@ class ClassFileToSourceStubConverter( */ private fun convertClass(clazz: ClassNode, packageFqName: String, isTopLevel: Boolean): JCClassDecl? { if (isSynthetic(clazz.access)) return null + if (checkIfShouldBeIgnored(Type.getObjectType(clazz.name))) return null val descriptor = kaptContext.origins[clazz]?.descriptor as? DeclarationDescriptor ?: return null val isNested = (descriptor as? ClassDescriptor)?.isNested ?: false @@ -281,11 +282,6 @@ class ClassFileToSourceStubConverter( if (enumValuesData.any { it.innerClass == innerClass }) return@mapJList null if (innerClass.outerName != clazz.name) return@mapJList null val innerClassNode = kaptContext.compiledClasses.firstOrNull { it.name == innerClass.name } ?: return@mapJList null - if (checkIfInnerClassNameConflictsWithOuter(innerClassNode, clazz)) { - kaptContext.logger.warn(innerClassNode.name.replace('/', '.').replace('$', '.') - + " will be ignored (name is clashing with the outer class name)") - return@mapJList null - } convertClass(innerClassNode, packageFqName, false) } @@ -306,6 +302,11 @@ class ClassFileToSourceStubConverter( if (type.sort != Type.OBJECT) return false val internalName = type.internalName + // Ignore type names with Java keywords in it + if (internalName.split('/', '.').any { it in JAVA_KEYWORDS }) { + return true + } + val clazz = kaptContext.compiledClasses.firstOrNull { it.name == internalName } ?: return false return checkIfInnerClassNameConflictsWithOuter(clazz) } @@ -557,8 +558,7 @@ class ClassFileToSourceStubConverter( return name } - // In theory, this could lead to member/parameter name clashes, though it's supposed to be extremely rare. - if (name in JAVA_KEYWORDS) return '_' + name + '_' + if (name in JAVA_KEYWORDS) return null if (name.isEmpty() || !Character.isJavaIdentifierStart(name[0]) diff --git a/plugins/kapt3/test/org/jetbrains/kotlin/kapt3/test/ClassFileToSourceStubConverterTestGenerated.java b/plugins/kapt3/test/org/jetbrains/kotlin/kapt3/test/ClassFileToSourceStubConverterTestGenerated.java index 70dd2611c84..231a51d9086 100644 --- a/plugins/kapt3/test/org/jetbrains/kotlin/kapt3/test/ClassFileToSourceStubConverterTestGenerated.java +++ b/plugins/kapt3/test/org/jetbrains/kotlin/kapt3/test/ClassFileToSourceStubConverterTestGenerated.java @@ -126,6 +126,12 @@ public class ClassFileToSourceStubConverterTestGenerated extends AbstractClassFi doTest(fileName); } + @TestMetadata("javaKeywordsInPackageNames.kt") + public void testJavaKeywordsInPackageNames() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("plugins/kapt3/testData/converter/javaKeywordsInPackageNames.kt"); + doTest(fileName); + } + @TestMetadata("jvmOverloads.kt") public void testJvmOverloads() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("plugins/kapt3/testData/converter/jvmOverloads.kt"); diff --git a/plugins/kapt3/testData/converter/javaKeywords.txt b/plugins/kapt3/testData/converter/javaKeywords.txt index 54c3e1dc512..8b137891791 100644 --- a/plugins/kapt3/testData/converter/javaKeywords.txt +++ b/plugins/kapt3/testData/converter/javaKeywords.txt @@ -1,16 +1 @@ -public final class _default_ { - @org.jetbrains.annotations.NotNull() - public java.lang.String _extends_; - @org.jetbrains.annotations.NotNull() - public final java.lang.String getExtends() { - return null; - } - - public final void _implements_(int _instanceof_) { - } - - public _default_() { - super(); - } -} diff --git a/plugins/kapt3/testData/converter/javaKeywordsInPackageNames.kt b/plugins/kapt3/testData/converter/javaKeywordsInPackageNames.kt new file mode 100644 index 00000000000..a8eb978bbc3 --- /dev/null +++ b/plugins/kapt3/testData/converter/javaKeywordsInPackageNames.kt @@ -0,0 +1,19 @@ +// FILE: a.kt +package a.b.c +class A + +// FILE: b.kt +package a.`do`.c +class B + +// FILE: c.kt +package case.a +class C + +// FILE: d.kt +package a.b.c.d.e.`for` +class D + +// FILE: e.kt +package a.b.`typealias`.c +class E \ No newline at end of file diff --git a/plugins/kapt3/testData/converter/javaKeywordsInPackageNames.txt b/plugins/kapt3/testData/converter/javaKeywordsInPackageNames.txt new file mode 100644 index 00000000000..aec5fc62392 --- /dev/null +++ b/plugins/kapt3/testData/converter/javaKeywordsInPackageNames.txt @@ -0,0 +1,19 @@ +package a.b.c; + +public final class A { + + public A() { + super(); + } +} + +//////////////////// + +package a.b.typealias.c; + +public final class E { + + public E() { + super(); + } +} diff --git a/plugins/kapt3/testData/converter/kt14998.txt b/plugins/kapt3/testData/converter/kt14998.txt index 1141abaa0da..4deca6ca8b6 100644 --- a/plugins/kapt3/testData/converter/kt14998.txt +++ b/plugins/kapt3/testData/converter/kt14998.txt @@ -4,9 +4,6 @@ public final class Outer { java.lang.String s, int i) { } - public abstract void _abstract_(@org.jetbrains.annotations.NotNull() - java.lang.String p0, int p1); - public Outer() { super(); }