From 14bb32f4fc3e9a2004c1a6d6d86129b3df8f2f54 Mon Sep 17 00:00:00 2001 From: David Vacca Date: Thu, 20 Feb 2025 17:06:11 -0800 Subject: [PATCH] Create initial version of ReactLegacyArchitectureProcessor (#49570) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/49570 This diff creates a initial version of the annotation processor to output the list of types that are annotated with LegacyArchitecture changelog: [internal] internal Reviewed By: cortinico Differential Revision: D69929875 fbshipit-source-id: 90a8d299f4667ab8d103c061d287991dbdb291df --- .../ReactLegacyArchitectureProcessor.java | 38 ++++++++++++++++--- 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/processing/ReactLegacyArchitectureProcessor.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/processing/ReactLegacyArchitectureProcessor.java index f8c4c3f6c3f..525a2087ba7 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/processing/ReactLegacyArchitectureProcessor.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/processing/ReactLegacyArchitectureProcessor.java @@ -1,26 +1,52 @@ -// (c) Meta Platforms, Inc. and affiliates. Confidential and proprietary. +/* + * 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.react.processing; import com.facebook.annotationprocessors.common.ProcessorBase; +import com.facebook.react.common.annotations.internal.LegacyArchitecture; +import java.io.FileWriter; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; import java.util.Set; import javax.annotation.processing.RoundEnvironment; import javax.annotation.processing.SupportedAnnotationTypes; import javax.annotation.processing.SupportedSourceVersion; import javax.lang.model.SourceVersion; +import javax.lang.model.element.Element; import javax.lang.model.element.TypeElement; @SupportedAnnotationTypes("com.facebook.react.common.annotations.internal.LegacyArchitecture") @SupportedSourceVersion(SourceVersion.RELEASE_11) public class ReactLegacyArchitectureProcessor extends ProcessorBase { - public ReactLegacyArchitectureProcessor() { - super(); - } - @Override protected boolean processImpl(Set annotations, RoundEnvironment roundEnv) { - // Do nothing for now + String outputFileName = System.getenv().get("RN_LEGACY_ARCH_OUTPUT_FILE_NAME"); + if (outputFileName == null || outputFileName.trim().isEmpty()) { + return true; + } + Set elements = roundEnv.getElementsAnnotatedWith(LegacyArchitecture.class); + List classes = new ArrayList<>(); + + for (Element element : elements) { + TypeElement classType = (TypeElement) element; + String className = classType.getQualifiedName().toString().replace(".", "/"); + classes.add("type L" + className + ";"); + } + + try (FileWriter writer = new FileWriter(outputFileName, true)) { + for (String clazz : classes) { + writer.write(clazz + "\n"); + } + } catch (IOException e) { + throw new RuntimeException(e); + } return true; } }