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.SharedNameTable
|
||||
import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper
|
||||
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.getSuperClassOrAny
|
||||
@@ -55,6 +56,7 @@ class JCTreeConverter(
|
||||
|
||||
private val BLACKLISTED_ANNOTATATIONS = listOf(
|
||||
"java.lang.Deprecated", "kotlin.Deprecated", // Deprecated annotations
|
||||
"java.lang.Synthetic", //
|
||||
"java.lang.annotation.", // Java annotations
|
||||
"org.jetbrains.annotations.", // Nullable/NotNull, ReadOnly, Mutable
|
||||
"kotlin.jvm.", "kotlin.Metadata" // Kotlin annotations from runtime
|
||||
@@ -132,8 +134,17 @@ class JCTreeConverter(
|
||||
|
||||
private fun convertMethod(method: MethodNode, containingClass: ClassNode, containingClassSimpleName: Name): JCMethodDecl? {
|
||||
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 name = if (isConstructor) containingClassSimpleName else name(method.name)
|
||||
val typeParameters = JavacList.nil<JCTypeParameter>()
|
||||
@@ -157,6 +168,8 @@ class JCTreeConverter(
|
||||
|
||||
val body = if (defaultValue != null) {
|
||||
null
|
||||
} else if ((method.access and Opcodes.ACC_ABSTRACT) > 0) {
|
||||
null
|
||||
} else if (isConstructor) {
|
||||
// We already checked it in convertClass()
|
||||
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) {
|
||||
super();
|
||||
this.firstName = null;
|
||||
this.secondName = null;
|
||||
this.age = 0;
|
||||
@@ -41,14 +42,17 @@ public final class User {
|
||||
return null;
|
||||
}
|
||||
|
||||
@java.lang.Override()
|
||||
public java.lang.String toString() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@java.lang.Override()
|
||||
public int hashCode() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@java.lang.Override()
|
||||
public boolean equals(java.lang.Object p0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
+4
-6
@@ -1,3 +1,4 @@
|
||||
|
||||
public abstract interface Context {
|
||||
}
|
||||
|
||||
@@ -15,9 +16,7 @@ public enum Result extends java.lang.Enum {
|
||||
public static final Result SUCCESS;
|
||||
public static final Result ERROR;
|
||||
|
||||
protected /*missing*/ Result(@java.lang.Synthetic()
|
||||
java.lang.String $enum_name_or_ordinal$0, @java.lang.Synthetic()
|
||||
int $enum_name_or_ordinal$1) {
|
||||
protected /*missing*/ Result(java.lang.String $enum_name_or_ordinal$0, int $enum_name_or_ordinal$1) {
|
||||
super(null, 0);
|
||||
this.SUCCESS = null;
|
||||
this.ERROR = null;
|
||||
@@ -37,9 +36,7 @@ public enum Result extends java.lang.Enum {
|
||||
|
||||
public abstract class BaseClass {
|
||||
|
||||
public abstract Result doJob() {
|
||||
return null;
|
||||
}
|
||||
public abstract Result doJob();
|
||||
|
||||
public /*missing*/ BaseClass(Context context, int num, boolean bool) {
|
||||
super();
|
||||
@@ -51,6 +48,7 @@ public abstract class BaseClass {
|
||||
|
||||
public final class Inheritor extends BaseClass {
|
||||
|
||||
@java.lang.Override()
|
||||
public Result doJob() {
|
||||
return null;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user