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:
Yan Zhulanow
2016-10-26 02:08:53 +03:00
committed by Yan Zhulanow
parent 10cfde4ab9
commit 68c2e8d71d
3 changed files with 22 additions and 7 deletions
@@ -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
+4
View File
@@ -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
View File
@@ -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;
} }