Kapt3: Do not generate body for abstract methods.
Add java.lang.Override annotation for overrides. Ignore java.lang.Synthetic annotation.
This commit is contained in:
committed by
Yan Zhulanow
parent
10cfde4ab9
commit
68c2e8d71d
@@ -24,6 +24,7 @@ import com.sun.tools.javac.util.Name
|
|||||||
import com.sun.tools.javac.util.Names
|
import com.sun.tools.javac.util.Names
|
||||||
import com.sun.tools.javac.util.SharedNameTable
|
import com.sun.tools.javac.util.SharedNameTable
|
||||||
import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper
|
import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper
|
||||||
|
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.getSuperClassOrAny
|
import org.jetbrains.kotlin.resolve.descriptorUtil.getSuperClassOrAny
|
||||||
@@ -55,6 +56,7 @@ class JCTreeConverter(
|
|||||||
|
|
||||||
private val BLACKLISTED_ANNOTATATIONS = listOf(
|
private val BLACKLISTED_ANNOTATATIONS = listOf(
|
||||||
"java.lang.Deprecated", "kotlin.Deprecated", // Deprecated annotations
|
"java.lang.Deprecated", "kotlin.Deprecated", // Deprecated annotations
|
||||||
|
"java.lang.Synthetic", //
|
||||||
"java.lang.annotation.", // Java annotations
|
"java.lang.annotation.", // Java annotations
|
||||||
"org.jetbrains.annotations.", // Nullable/NotNull, ReadOnly, Mutable
|
"org.jetbrains.annotations.", // Nullable/NotNull, ReadOnly, Mutable
|
||||||
"kotlin.jvm.", "kotlin.Metadata" // Kotlin annotations from runtime
|
"kotlin.jvm.", "kotlin.Metadata" // Kotlin annotations from runtime
|
||||||
@@ -132,8 +134,17 @@ class JCTreeConverter(
|
|||||||
|
|
||||||
private fun convertMethod(method: MethodNode, containingClass: ClassNode, containingClassSimpleName: Name): JCMethodDecl? {
|
private fun convertMethod(method: MethodNode, containingClass: ClassNode, containingClassSimpleName: Name): JCMethodDecl? {
|
||||||
if (isSynthetic(method.access)) return null
|
if (isSynthetic(method.access)) return null
|
||||||
|
val descriptor = origins[method]?.descriptor as? CallableDescriptor ?: return null
|
||||||
|
|
||||||
|
val isOverridden = descriptor.overriddenDescriptors.isNotEmpty()
|
||||||
|
val visibleAnnotations = if (isOverridden) {
|
||||||
|
(method.visibleAnnotations ?: emptyList()) + AnnotationNode(Type.getType(Override::class.java).descriptor)
|
||||||
|
} else {
|
||||||
|
method.visibleAnnotations
|
||||||
|
}
|
||||||
|
|
||||||
|
val modifiers = convertModifiers(method.access, ElementKind.METHOD, visibleAnnotations, method.invisibleAnnotations)
|
||||||
|
|
||||||
val modifiers = convertModifiers(method.access, ElementKind.METHOD, method.visibleAnnotations, method.invisibleAnnotations)
|
|
||||||
val isConstructor = method.name == "<init>"
|
val isConstructor = method.name == "<init>"
|
||||||
val name = if (isConstructor) containingClassSimpleName else name(method.name)
|
val name = if (isConstructor) containingClassSimpleName else name(method.name)
|
||||||
val typeParameters = JavacList.nil<JCTypeParameter>()
|
val typeParameters = JavacList.nil<JCTypeParameter>()
|
||||||
@@ -157,6 +168,8 @@ class JCTreeConverter(
|
|||||||
|
|
||||||
val body = if (defaultValue != null) {
|
val body = if (defaultValue != null) {
|
||||||
null
|
null
|
||||||
|
} else if ((method.access and Opcodes.ACC_ABSTRACT) > 0) {
|
||||||
|
null
|
||||||
} else if (isConstructor) {
|
} else if (isConstructor) {
|
||||||
// We already checked it in convertClass()
|
// We already checked it in convertClass()
|
||||||
val declaration = origins[containingClass]?.descriptor as ClassDescriptor
|
val declaration = origins[containingClass]?.descriptor as ClassDescriptor
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ public final class User {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public /*missing*/ User(java.lang.String firstName, java.lang.String secondName, int age) {
|
public /*missing*/ User(java.lang.String firstName, java.lang.String secondName, int age) {
|
||||||
|
super();
|
||||||
this.firstName = null;
|
this.firstName = null;
|
||||||
this.secondName = null;
|
this.secondName = null;
|
||||||
this.age = 0;
|
this.age = 0;
|
||||||
@@ -41,14 +42,17 @@ public final class User {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@java.lang.Override()
|
||||||
public java.lang.String toString() {
|
public java.lang.String toString() {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@java.lang.Override()
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@java.lang.Override()
|
||||||
public boolean equals(java.lang.Object p0) {
|
public boolean equals(java.lang.Object p0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-6
@@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
public abstract interface Context {
|
public abstract interface Context {
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -15,9 +16,7 @@ public enum Result extends java.lang.Enum {
|
|||||||
public static final Result SUCCESS;
|
public static final Result SUCCESS;
|
||||||
public static final Result ERROR;
|
public static final Result ERROR;
|
||||||
|
|
||||||
protected /*missing*/ Result(@java.lang.Synthetic()
|
protected /*missing*/ Result(java.lang.String $enum_name_or_ordinal$0, int $enum_name_or_ordinal$1) {
|
||||||
java.lang.String $enum_name_or_ordinal$0, @java.lang.Synthetic()
|
|
||||||
int $enum_name_or_ordinal$1) {
|
|
||||||
super(null, 0);
|
super(null, 0);
|
||||||
this.SUCCESS = null;
|
this.SUCCESS = null;
|
||||||
this.ERROR = null;
|
this.ERROR = null;
|
||||||
@@ -37,9 +36,7 @@ public enum Result extends java.lang.Enum {
|
|||||||
|
|
||||||
public abstract class BaseClass {
|
public abstract class BaseClass {
|
||||||
|
|
||||||
public abstract Result doJob() {
|
public abstract Result doJob();
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public /*missing*/ BaseClass(Context context, int num, boolean bool) {
|
public /*missing*/ BaseClass(Context context, int num, boolean bool) {
|
||||||
super();
|
super();
|
||||||
@@ -51,6 +48,7 @@ public abstract class BaseClass {
|
|||||||
|
|
||||||
public final class Inheritor extends BaseClass {
|
public final class Inheritor extends BaseClass {
|
||||||
|
|
||||||
|
@java.lang.Override()
|
||||||
public Result doJob() {
|
public Result doJob() {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user