From fea445ee2dfa1bf64b99f7bc1e12be0a8bcd7e71 Mon Sep 17 00:00:00 2001 From: Ian Levesque Date: Tue, 3 Oct 2023 17:47:12 -0700 Subject: [PATCH] Make all annotation processors derive from ProcessorBase (#39360) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/39360 X-link: https://github.com/facebook/litho/pull/958 Reviewed By: MonaHashem Differential Revision: D49113071 fbshipit-source-id: f762032e0f0b4a1566b0947fe3a24eb32be5795a --- .../react-native/ReactAndroid/build.gradle | 2 ++ .../common/ProcessorBase.java | 24 +++++++++++++++++++ .../processing/ReactModuleSpecProcessor.java | 6 ++--- .../processing/ReactPropertyProcessor.java | 6 ++--- .../react-native/gradle/libs.versions.toml | 3 +++ 5 files changed, 35 insertions(+), 6 deletions(-) create mode 100644 packages/react-native/ReactAndroid/src/main/java/com/facebook/annotationprocessors/common/ProcessorBase.java diff --git a/packages/react-native/ReactAndroid/build.gradle b/packages/react-native/ReactAndroid/build.gradle index cce54c2a0e1..fb50533111f 100644 --- a/packages/react-native/ReactAndroid/build.gradle +++ b/packages/react-native/ReactAndroid/build.gradle @@ -617,6 +617,7 @@ android { res.srcDirs = ["src/main/res/devsupport", "src/main/res/shell", "src/main/res/views/modal", "src/main/res/views/uimanager"] java { srcDirs = ["src/main/java", "src/main/libraries/soloader/java", "src/main/jni/first-party/fb/jni/java"] + exclude("com/facebook/annotationprocessors") exclude("com/facebook/react/processing") exclude("com/facebook/react/module/processing") } @@ -770,6 +771,7 @@ dependencies { api(libs.okhttp3.urlconnection) api(libs.okhttp3) api(libs.okio) + compileOnly(libs.javax.annotation.api) api(libs.javax.inject) // It's up to the consumer to decide if hermes should be included or not. diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/annotationprocessors/common/ProcessorBase.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/annotationprocessors/common/ProcessorBase.java new file mode 100644 index 00000000000..51983ad030e --- /dev/null +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/annotationprocessors/common/ProcessorBase.java @@ -0,0 +1,24 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +package com.facebook.annotationprocessors.common; + +import java.util.Set; +import javax.annotation.processing.AbstractProcessor; +import javax.annotation.processing.RoundEnvironment; +import javax.lang.model.element.TypeElement; + +public abstract class ProcessorBase extends AbstractProcessor { + + @Override + public boolean process(Set annotations, RoundEnvironment roundEnv) { + return processImpl(annotations, roundEnv); + } + + protected abstract boolean processImpl( + Set annotations, RoundEnvironment roundEnv); +} diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/module/processing/ReactModuleSpecProcessor.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/module/processing/ReactModuleSpecProcessor.java index 44d73c2ad4e..4f85ff93250 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/module/processing/ReactModuleSpecProcessor.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/module/processing/ReactModuleSpecProcessor.java @@ -10,6 +10,7 @@ package com.facebook.react.module.processing; import static javax.lang.model.element.Modifier.PUBLIC; import static javax.tools.Diagnostic.Kind.ERROR; +import com.facebook.annotationprocessors.common.ProcessorBase; import com.facebook.infer.annotation.SuppressFieldNotInitialized; import com.facebook.react.module.annotations.ReactModule; import com.facebook.react.module.annotations.ReactModuleList; @@ -29,7 +30,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; -import javax.annotation.processing.AbstractProcessor; import javax.annotation.processing.Filer; import javax.annotation.processing.Messager; import javax.annotation.processing.ProcessingEnvironment; @@ -55,7 +55,7 @@ import javax.lang.model.util.Types; "com.facebook.react.module.annotations.ReactModuleList", }) @SupportedSourceVersion(SourceVersion.RELEASE_7) -public class ReactModuleSpecProcessor extends AbstractProcessor { +public class ReactModuleSpecProcessor extends ProcessorBase { private static final TypeName COLLECTIONS_TYPE = ParameterizedTypeName.get(Collections.class); private static final TypeName MAP_TYPE = @@ -78,7 +78,7 @@ public class ReactModuleSpecProcessor extends AbstractProcessor { } @Override - public boolean process(Set annotations, RoundEnvironment roundEnv) { + public boolean processImpl(Set annotations, RoundEnvironment roundEnv) { Set reactModuleListElements = roundEnv.getElementsAnnotatedWith(ReactModuleList.class); for (Element reactModuleListElement : reactModuleListElements) { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/processing/ReactPropertyProcessor.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/processing/ReactPropertyProcessor.java index e861a859c5b..4144038e80b 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/processing/ReactPropertyProcessor.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/processing/ReactPropertyProcessor.java @@ -13,6 +13,7 @@ import static javax.lang.model.element.Modifier.PUBLIC; import static javax.tools.Diagnostic.Kind.ERROR; import static javax.tools.Diagnostic.Kind.WARNING; +import com.facebook.annotationprocessors.common.ProcessorBase; import com.facebook.infer.annotation.SuppressFieldNotInitialized; import com.facebook.react.bridge.Dynamic; import com.facebook.react.bridge.DynamicFromObject; @@ -40,7 +41,6 @@ import java.util.List; import java.util.Map; import java.util.Set; import javax.annotation.Nullable; -import javax.annotation.processing.AbstractProcessor; import javax.annotation.processing.Filer; import javax.annotation.processing.Messager; import javax.annotation.processing.ProcessingEnvironment; @@ -66,7 +66,7 @@ import javax.lang.model.util.Types; */ @SupportedAnnotationTypes("com.facebook.react.uimanager.annotations.ReactPropertyHolder") @SupportedSourceVersion(SourceVersion.RELEASE_7) -public class ReactPropertyProcessor extends AbstractProcessor { +public class ReactPropertyProcessor extends ProcessorBase { private static final Map DEFAULT_TYPES; private static final Set BOXED_PRIMITIVES; @@ -141,7 +141,7 @@ public class ReactPropertyProcessor extends AbstractProcessor { } @Override - public boolean process(Set annotations, RoundEnvironment roundEnv) { + public boolean processImpl(Set annotations, RoundEnvironment roundEnv) { // Clear properties from previous rounds mClasses.clear(); diff --git a/packages/react-native/gradle/libs.versions.toml b/packages/react-native/gradle/libs.versions.toml index 775f8cf73fc..14281ca1db0 100644 --- a/packages/react-native/gradle/libs.versions.toml +++ b/packages/react-native/gradle/libs.versions.toml @@ -18,6 +18,7 @@ fbjni = "0.5.1" flipper = "0.201.0" fresco = "3.0.0" infer-annotation = "0.18.0" +javax-annotation-api = "1.3.2" javax-inject = "1" jsr305 = "3.0.2" junit = "4.13.2" @@ -66,6 +67,8 @@ okhttp3-urlconnection = { module = "com.squareup.okhttp3:okhttp-urlconnection", okhttp3 = { module = "com.squareup.okhttp3:okhttp", version.ref = "okhttp" } okio = { module = "com.squareup.okio:okio", version.ref = "okio" } javax-inject = { module = "javax.inject:javax.inject", version.ref = "javax-inject" } +javax-annotation-api = { module = "javax.annotation:javax.annotation-api", version.ref = "javax-annotation-api" } + junit = {module = "junit:junit", version.ref = "junit" } assertj = {module = "org.assertj:assertj-core", version.ref = "assertj" } mockito = {module = "org.mockito:mockito-inline", version.ref = "mockito" }