Make extractor generic

Differential Revision: D2605494

fb-gh-sync-id: 37e298598c07221f75250a309b283fae319298af
This commit is contained in:
Alexander Blom 2015-11-02 03:24:21 -08:00 committed by facebook-github-bot-7
parent 15c53f7563
commit 839756b6d4

View File

@ -51,109 +51,109 @@ public abstract class BaseJavaModule implements NativeModule {
static final public String METHOD_TYPE_REMOTE = "remote"; static final public String METHOD_TYPE_REMOTE = "remote";
static final public String METHOD_TYPE_REMOTE_ASYNC = "remoteAsync"; static final public String METHOD_TYPE_REMOTE_ASYNC = "remoteAsync";
private static abstract class ArgumentExtractor { private static abstract class ArgumentExtractor<T> {
public int getJSArgumentsNeeded() { public int getJSArgumentsNeeded() {
return 1; return 1;
} }
public abstract @Nullable Object extractArgument( public abstract @Nullable T extractArgument(
CatalystInstance catalystInstance, ReadableNativeArray jsArguments, int atIndex); CatalystInstance catalystInstance, ReadableNativeArray jsArguments, int atIndex);
} }
static final private ArgumentExtractor ARGUMENT_EXTRACTOR_BOOLEAN = new ArgumentExtractor() { static final private ArgumentExtractor<Boolean> ARGUMENT_EXTRACTOR_BOOLEAN =
@Override new ArgumentExtractor<Boolean>() {
public Object extractArgument( @Override
CatalystInstance catalystInstance, ReadableNativeArray jsArguments, int atIndex public Boolean extractArgument(
) { CatalystInstance catalystInstance, ReadableNativeArray jsArguments, int atIndex) {
return Boolean.valueOf(jsArguments.getBoolean(atIndex)); return jsArguments.getBoolean(atIndex);
} }
}; };
static final private ArgumentExtractor ARGUMENT_EXTRACTOR_DOUBLE = new ArgumentExtractor() { static final private ArgumentExtractor<Double> ARGUMENT_EXTRACTOR_DOUBLE =
@Override new ArgumentExtractor<Double>() {
public Object extractArgument( @Override
CatalystInstance catalystInstance, ReadableNativeArray jsArguments, int atIndex public Double extractArgument(
) { CatalystInstance catalystInstance, ReadableNativeArray jsArguments, int atIndex) {
return Double.valueOf(jsArguments.getDouble(atIndex)); return jsArguments.getDouble(atIndex);
} }
}; };
static final private ArgumentExtractor ARGUMENT_EXTRACTOR_FLOAT = new ArgumentExtractor() { static final private ArgumentExtractor<Float> ARGUMENT_EXTRACTOR_FLOAT =
@Override new ArgumentExtractor<Float>() {
public Object extractArgument( @Override
CatalystInstance catalystInstance, ReadableNativeArray jsArguments, int atIndex public Float extractArgument(
) { CatalystInstance catalystInstance, ReadableNativeArray jsArguments, int atIndex) {
return Float.valueOf((float) jsArguments.getDouble(atIndex)); return (float) jsArguments.getDouble(atIndex);
} }
}; };
static final private ArgumentExtractor ARGUMENT_EXTRACTOR_INTEGER = new ArgumentExtractor() { static final private ArgumentExtractor<Integer> ARGUMENT_EXTRACTOR_INTEGER =
@Override new ArgumentExtractor<Integer>() {
public Object extractArgument( @Override
CatalystInstance catalystInstance, ReadableNativeArray jsArguments, int atIndex public Integer extractArgument(
) { CatalystInstance catalystInstance, ReadableNativeArray jsArguments, int atIndex) {
return Integer.valueOf((int) jsArguments.getDouble(atIndex)); return (int) jsArguments.getDouble(atIndex);
} }
}; };
static final private ArgumentExtractor ARGUMENT_EXTRACTOR_STRING = new ArgumentExtractor() { static final private ArgumentExtractor<String> ARGUMENT_EXTRACTOR_STRING =
@Override new ArgumentExtractor<String>() {
public Object extractArgument( @Override
CatalystInstance catalystInstance, ReadableNativeArray jsArguments, int atIndex public String extractArgument(
) { CatalystInstance catalystInstance, ReadableNativeArray jsArguments, int atIndex) {
return jsArguments.getString(atIndex); return jsArguments.getString(atIndex);
} }
}; };
static final private ArgumentExtractor ARGUMENT_EXTRACTOR_ARRAY = new ArgumentExtractor() { static final private ArgumentExtractor<ReadableNativeArray> ARGUMENT_EXTRACTOR_ARRAY =
@Override new ArgumentExtractor<ReadableNativeArray>() {
public Object extractArgument( @Override
CatalystInstance catalystInstance, ReadableNativeArray jsArguments, int atIndex public ReadableNativeArray extractArgument(
) { CatalystInstance catalystInstance, ReadableNativeArray jsArguments, int atIndex) {
return jsArguments.getArray(atIndex); return jsArguments.getArray(atIndex);
} }
}; };
static final private ArgumentExtractor ARGUMENT_EXTRACTOR_MAP = new ArgumentExtractor() { static final private ArgumentExtractor<ReadableMap> ARGUMENT_EXTRACTOR_MAP =
@Override new ArgumentExtractor<ReadableMap>() {
public Object extractArgument( @Override
CatalystInstance catalystInstance, ReadableNativeArray jsArguments, int atIndex public ReadableMap extractArgument(
) { CatalystInstance catalystInstance, ReadableNativeArray jsArguments, int atIndex) {
return jsArguments.getMap(atIndex); return jsArguments.getMap(atIndex);
} }
}; };
static final private ArgumentExtractor ARGUMENT_EXTRACTOR_CALLBACK = new ArgumentExtractor() { static final private ArgumentExtractor<Callback> ARGUMENT_EXTRACTOR_CALLBACK =
@Override new ArgumentExtractor<Callback>() {
public @Nullable Object extractArgument( @Override
CatalystInstance catalystInstance, ReadableNativeArray jsArguments, int atIndex public @Nullable Callback extractArgument(
) { CatalystInstance catalystInstance, ReadableNativeArray jsArguments, int atIndex) {
if (jsArguments.isNull(atIndex)) { if (jsArguments.isNull(atIndex)) {
return null; return null;
} } else {
else { int id = (int) jsArguments.getDouble(atIndex);
int id = (int) jsArguments.getDouble(atIndex); return new CallbackImpl(catalystInstance, id);
return new CallbackImpl(catalystInstance, id); }
} }
} };
};
static final private ArgumentExtractor ARGUMENT_EXTRACTOR_PROMISE = new ArgumentExtractor() { static final private ArgumentExtractor<Promise> ARGUMENT_EXTRACTOR_PROMISE =
@Override new ArgumentExtractor<Promise>() {
public int getJSArgumentsNeeded() { @Override
return 2; public int getJSArgumentsNeeded() {
} return 2;
}
@Override @Override
public Promise extractArgument( public Promise extractArgument(
CatalystInstance catalystInstance, ReadableNativeArray jsArguments, int atIndex) { CatalystInstance catalystInstance, ReadableNativeArray jsArguments, int atIndex) {
Callback resolve = (Callback) ARGUMENT_EXTRACTOR_CALLBACK Callback resolve = ARGUMENT_EXTRACTOR_CALLBACK
.extractArgument(catalystInstance, jsArguments, atIndex); .extractArgument(catalystInstance, jsArguments, atIndex);
Callback reject = (Callback) ARGUMENT_EXTRACTOR_CALLBACK Callback reject = ARGUMENT_EXTRACTOR_CALLBACK
.extractArgument(catalystInstance, jsArguments, atIndex + 1); .extractArgument(catalystInstance, jsArguments, atIndex + 1);
return new PromiseImpl(resolve, reject); return new PromiseImpl(resolve, reject);
} }
}; };
private class JavaMethod implements NativeMethod { private class JavaMethod implements NativeMethod {