Как аннотация CallSuper оценивает, вызывает ли переопределенный метод супер-метод или нет? - PullRequest
0 голосов
/ 10 марта 2020

Я только что нашел любопытным, как моя студия andorid может уведомлять меня, когда в моем onCreate() методе Activity, когда мне не удается вызвать super.onCreate(), потом узнал, что Android (слишком умный) реализовал аннотацию CallSuper чтобы убедиться, что переопределенный метод вызывает супер-метод.

Я просто вошел в CallSuper, чтобы увидеть магию c того, что происходит внутри,

package androidx.annotation;

import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.CLASS;

import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

/**
 * Denotes that any overriding methods should invoke this method as well.
 * <p>
 * Example:
 * <pre><code>
 *  &#64;CallSuper
 *  public abstract void onFocusLost();
 * 
* / @Documented @Retention (КЛАСС) @Target ({METHOD}) publi c @interface CallSuper {}

Ссылка на исходный код: https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/annotation/CallSuper.java Но, к моему удивлению, это ничего не дает. Где это оценивает метод против этой аннотации? Как компилятор может это сделать? Мне очень любопытно.

1 Ответ

1 голос
/ 10 марта 2020

Работает с помощью правила lint, встроенного в android инструменты разработчика.

Это не просто аннотация @CallSuper, действующая в одиночку. Аннотация работает как идентификатор для сопровождающего правила lint. Проверьте источник CallSuperDetector.

...