Kapt3: Ignore packages with Java keywords inside (KT-17184)
This commit is contained in:
committed by
Yan Zhulanow
parent
1c5765628e
commit
1a342faf38
+7
-7
@@ -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])
|
||||
|
||||
+6
@@ -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");
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user