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? {
|
private fun convertClass(clazz: ClassNode, packageFqName: String, isTopLevel: Boolean): JCClassDecl? {
|
||||||
if (isSynthetic(clazz.access)) return null
|
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 descriptor = kaptContext.origins[clazz]?.descriptor as? DeclarationDescriptor ?: return null
|
||||||
val isNested = (descriptor as? ClassDescriptor)?.isNested ?: false
|
val isNested = (descriptor as? ClassDescriptor)?.isNested ?: false
|
||||||
@@ -281,11 +282,6 @@ class ClassFileToSourceStubConverter(
|
|||||||
if (enumValuesData.any { it.innerClass == innerClass }) return@mapJList null
|
if (enumValuesData.any { it.innerClass == innerClass }) return@mapJList null
|
||||||
if (innerClass.outerName != clazz.name) return@mapJList null
|
if (innerClass.outerName != clazz.name) return@mapJList null
|
||||||
val innerClassNode = kaptContext.compiledClasses.firstOrNull { it.name == innerClass.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)
|
convertClass(innerClassNode, packageFqName, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -306,6 +302,11 @@ class ClassFileToSourceStubConverter(
|
|||||||
if (type.sort != Type.OBJECT) return false
|
if (type.sort != Type.OBJECT) return false
|
||||||
|
|
||||||
val internalName = type.internalName
|
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
|
val clazz = kaptContext.compiledClasses.firstOrNull { it.name == internalName } ?: return false
|
||||||
return checkIfInnerClassNameConflictsWithOuter(clazz)
|
return checkIfInnerClassNameConflictsWithOuter(clazz)
|
||||||
}
|
}
|
||||||
@@ -557,8 +558,7 @@ class ClassFileToSourceStubConverter(
|
|||||||
return name
|
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 null
|
||||||
if (name in JAVA_KEYWORDS) return '_' + name + '_'
|
|
||||||
|
|
||||||
if (name.isEmpty()
|
if (name.isEmpty()
|
||||||
|| !Character.isJavaIdentifierStart(name[0])
|
|| !Character.isJavaIdentifierStart(name[0])
|
||||||
|
|||||||
+6
@@ -126,6 +126,12 @@ public class ClassFileToSourceStubConverterTestGenerated extends AbstractClassFi
|
|||||||
doTest(fileName);
|
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")
|
@TestMetadata("jvmOverloads.kt")
|
||||||
public void testJvmOverloads() throws Exception {
|
public void testJvmOverloads() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("plugins/kapt3/testData/converter/jvmOverloads.kt");
|
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) {
|
java.lang.String s, int i) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract void _abstract_(@org.jetbrains.annotations.NotNull()
|
|
||||||
java.lang.String p0, int p1);
|
|
||||||
|
|
||||||
public Outer() {
|
public Outer() {
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user