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:
Aaron Chiu
2016-09-02 16:15:11 -07:00
committed by Facebook Github Bot 2
parent 6c909ef80d
commit 3d1b79cd15
53 changed files with 219 additions and 134 deletions

View File

@@ -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;
}
}
}