mirror of
https://github.com/zhigang1992/react-native.git
synced 2026-04-30 22:12:42 +08:00
covert RNFeedPackage and it's modules to use @ReactModule and @ReactModuleList
Reviewed By: lexs Differential Revision: D3796860 fbshipit-source-id: d4b5f3635754ef28277b79cb1ea9bab07ba3ea6e
This commit is contained in:
committed by
Facebook Github Bot 2
parent
6c909ef80d
commit
3d1b79cd15
@@ -4,6 +4,7 @@ package com.facebook.react.module.processing;
|
||||
|
||||
import javax.annotation.processing.AbstractProcessor;
|
||||
import javax.annotation.processing.Filer;
|
||||
import javax.annotation.processing.Messager;
|
||||
import javax.annotation.processing.ProcessingEnvironment;
|
||||
import javax.annotation.processing.RoundEnvironment;
|
||||
import javax.annotation.processing.SupportedAnnotationTypes;
|
||||
@@ -37,6 +38,7 @@ import com.squareup.javapoet.TypeName;
|
||||
import com.squareup.javapoet.TypeSpec;
|
||||
|
||||
import static javax.lang.model.element.Modifier.PUBLIC;
|
||||
import static javax.tools.Diagnostic.Kind.ERROR;
|
||||
|
||||
/**
|
||||
* Generates a list of ReactModuleInfo for modules annotated with {@link ReactModule} in
|
||||
@@ -59,6 +61,8 @@ public class ReactModuleSpecProcessor extends AbstractProcessor {
|
||||
private Filer mFiler;
|
||||
@SuppressFieldNotInitialized
|
||||
private Elements mElements;
|
||||
@SuppressFieldNotInitialized
|
||||
private Messager mMessager;
|
||||
|
||||
@Override
|
||||
public synchronized void init(ProcessingEnvironment processingEnv) {
|
||||
@@ -66,6 +70,7 @@ public class ReactModuleSpecProcessor extends AbstractProcessor {
|
||||
|
||||
mFiler = processingEnv.getFiler();
|
||||
mElements = processingEnv.getElementUtils();
|
||||
mMessager = processingEnv.getMessager();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -89,23 +94,29 @@ public class ReactModuleSpecProcessor extends AbstractProcessor {
|
||||
}
|
||||
}
|
||||
|
||||
MethodSpec getReactModuleInfosMethod = MethodSpec.methodBuilder("getReactModuleInfos")
|
||||
.addModifiers(PUBLIC)
|
||||
// TODO add function to native module interface
|
||||
MethodSpec getReactModuleInfosMethod;
|
||||
try {
|
||||
getReactModuleInfosMethod = MethodSpec.methodBuilder("getReactModuleInfos")
|
||||
.addModifiers(PUBLIC)
|
||||
// TODO add function to native module interface
|
||||
// .addAnnotation(Override.class)
|
||||
.addCode(getCodeBlockForReactModuleInfos(nativeModules))
|
||||
.returns(MAP_TYPE)
|
||||
.build();
|
||||
.addCode(getCodeBlockForReactModuleInfos(nativeModules))
|
||||
.returns(MAP_TYPE)
|
||||
.build();
|
||||
} catch (ReactModuleSpecException reactModuleSpecException) {
|
||||
mMessager.printMessage(ERROR, reactModuleSpecException.mMessage);
|
||||
return false;
|
||||
}
|
||||
|
||||
TypeSpec reactModulesInfosTypeSpec = TypeSpec.classBuilder(
|
||||
fileName + "$$ReactModuleInfoProvider")
|
||||
.addModifiers(Modifier.PUBLIC)
|
||||
.addMethod(getReactModuleInfosMethod)
|
||||
.build();
|
||||
TypeSpec reactModulesInfosTypeSpec = TypeSpec.classBuilder(
|
||||
fileName + "$$ReactModuleInfoProvider")
|
||||
.addModifiers(Modifier.PUBLIC)
|
||||
.addMethod(getReactModuleInfosMethod)
|
||||
.build();
|
||||
|
||||
JavaFile javaFile = JavaFile.builder(packageName, reactModulesInfosTypeSpec)
|
||||
.addFileComment("Generated by " + getClass().getName())
|
||||
.build();
|
||||
JavaFile javaFile = JavaFile.builder(packageName, reactModulesInfosTypeSpec)
|
||||
.addFileComment("Generated by " + getClass().getName())
|
||||
.build();
|
||||
|
||||
try {
|
||||
javaFile.writeTo(mFiler);
|
||||
@@ -117,7 +128,8 @@ public class ReactModuleSpecProcessor extends AbstractProcessor {
|
||||
return true;
|
||||
}
|
||||
|
||||
private CodeBlock getCodeBlockForReactModuleInfos(List<String> nativeModules) {
|
||||
private CodeBlock getCodeBlockForReactModuleInfos(List<String> nativeModules)
|
||||
throws ReactModuleSpecException {
|
||||
CodeBlock.Builder builder = CodeBlock.builder()
|
||||
.addStatement("$T map = new $T()", MAP_TYPE, INSTANTIATED_MAP_TYPE);
|
||||
|
||||
@@ -126,6 +138,9 @@ public class ReactModuleSpecProcessor extends AbstractProcessor {
|
||||
|
||||
TypeElement typeElement = mElements.getTypeElement(nativeModule);
|
||||
ReactModule reactModule = typeElement.getAnnotation(ReactModule.class);
|
||||
if (reactModule == null) {
|
||||
throw new ReactModuleSpecException(keyString + " not found.");
|
||||
}
|
||||
String valueString = new StringBuilder()
|
||||
.append("new ReactModuleInfo(")
|
||||
.append("\"").append(reactModule.name()).append("\"").append(", ")
|
||||
@@ -140,4 +155,13 @@ public class ReactModuleSpecProcessor extends AbstractProcessor {
|
||||
builder.addStatement("return map");
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
private static class ReactModuleSpecException extends Exception {
|
||||
|
||||
public final String mMessage;
|
||||
|
||||
public ReactModuleSpecException(String message) {
|
||||
mMessage = message;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user