mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Introduce TypeUtils (#42122)
Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/42122 This diff introduces the `TypeUtils` directory where we can put platform-specific, context-independent type transformations. Changelog: [Internal] Reviewed By: cipolleschi Differential Revision: D52291837 fbshipit-source-id: 561b9c494aab5bfee3b3c668d3346bbd320e5266
This commit is contained in:
committed by
Facebook GitHub Bot
parent
327df8a719
commit
82f8cf1836
+38
-44
@@ -22,6 +22,7 @@ import type {
|
||||
import type {AliasResolver} from './Utils';
|
||||
|
||||
const {unwrapNullable} = require('../../parsers/parsers-commons');
|
||||
const {wrapOptional} = require('../TypeUtils/Java');
|
||||
const {createAliasResolver, getModules} = require('./Utils');
|
||||
|
||||
type FilesOutput = Map<string, string>;
|
||||
@@ -111,13 +112,8 @@ function translateFunctionParamToJavaType(
|
||||
const [typeAnnotation, nullable] =
|
||||
unwrapNullable<NativeModuleParamTypeAnnotation>(nullableTypeAnnotation);
|
||||
const isRequired = !optional && !nullable;
|
||||
|
||||
function wrapNullable(javaType: string, nullableType?: string) {
|
||||
if (!isRequired) {
|
||||
imports.add('javax.annotation.Nullable');
|
||||
return `@Nullable ${nullableType ?? javaType}`;
|
||||
}
|
||||
return javaType;
|
||||
if (!isRequired) {
|
||||
imports.add('javax.annotation.Nullable');
|
||||
}
|
||||
|
||||
// FIXME: support class alias for args
|
||||
@@ -130,41 +126,41 @@ function translateFunctionParamToJavaType(
|
||||
case 'ReservedTypeAnnotation':
|
||||
switch (realTypeAnnotation.name) {
|
||||
case 'RootTag':
|
||||
return wrapNullable('double', 'Double');
|
||||
return wrapOptional('double', isRequired);
|
||||
default:
|
||||
(realTypeAnnotation.name: empty);
|
||||
throw new Error(createErrorMessage(realTypeAnnotation.name));
|
||||
}
|
||||
case 'StringTypeAnnotation':
|
||||
return wrapNullable('String');
|
||||
return wrapOptional('String', isRequired);
|
||||
case 'NumberTypeAnnotation':
|
||||
return wrapNullable('double', 'Double');
|
||||
return wrapOptional('double', isRequired);
|
||||
case 'FloatTypeAnnotation':
|
||||
return wrapNullable('double', 'Double');
|
||||
return wrapOptional('double', isRequired);
|
||||
case 'DoubleTypeAnnotation':
|
||||
return wrapNullable('double', 'Double');
|
||||
return wrapOptional('double', isRequired);
|
||||
case 'Int32TypeAnnotation':
|
||||
return wrapNullable('double', 'Double');
|
||||
return wrapOptional('double', isRequired);
|
||||
case 'BooleanTypeAnnotation':
|
||||
return wrapNullable('boolean', 'Boolean');
|
||||
return wrapOptional('boolean', isRequired);
|
||||
case 'EnumDeclaration':
|
||||
switch (realTypeAnnotation.memberType) {
|
||||
case 'NumberTypeAnnotation':
|
||||
return wrapNullable('double', 'Double');
|
||||
return wrapOptional('double', isRequired);
|
||||
case 'StringTypeAnnotation':
|
||||
return wrapNullable('String');
|
||||
return wrapOptional('String', isRequired);
|
||||
default:
|
||||
throw new Error(createErrorMessage(realTypeAnnotation.type));
|
||||
}
|
||||
case 'UnionTypeAnnotation':
|
||||
switch (typeAnnotation.memberType) {
|
||||
case 'NumberTypeAnnotation':
|
||||
return wrapNullable('double', 'Double');
|
||||
return wrapOptional('double', isRequired);
|
||||
case 'ObjectTypeAnnotation':
|
||||
imports.add('com.facebook.react.bridge.ReadableMap');
|
||||
return wrapNullable('ReadableMap');
|
||||
return wrapOptional('ReadableMap', isRequired);
|
||||
case 'StringTypeAnnotation':
|
||||
return wrapNullable('String');
|
||||
return wrapOptional('String', isRequired);
|
||||
default:
|
||||
throw new Error(
|
||||
`Unsupported union member returning value, found: ${realTypeAnnotation.memberType}"`,
|
||||
@@ -172,17 +168,17 @@ function translateFunctionParamToJavaType(
|
||||
}
|
||||
case 'ObjectTypeAnnotation':
|
||||
imports.add('com.facebook.react.bridge.ReadableMap');
|
||||
return wrapNullable('ReadableMap');
|
||||
return wrapOptional('ReadableMap', isRequired);
|
||||
case 'GenericObjectTypeAnnotation':
|
||||
// Treat this the same as ObjectTypeAnnotation for now.
|
||||
imports.add('com.facebook.react.bridge.ReadableMap');
|
||||
return wrapNullable('ReadableMap');
|
||||
return wrapOptional('ReadableMap', isRequired);
|
||||
case 'ArrayTypeAnnotation':
|
||||
imports.add('com.facebook.react.bridge.ReadableArray');
|
||||
return wrapNullable('ReadableArray');
|
||||
return wrapOptional('ReadableArray', isRequired);
|
||||
case 'FunctionTypeAnnotation':
|
||||
imports.add('com.facebook.react.bridge.Callback');
|
||||
return wrapNullable('Callback');
|
||||
return wrapOptional('Callback', isRequired);
|
||||
default:
|
||||
(realTypeAnnotation.type: 'MixedTypeAnnotation');
|
||||
throw new Error(createErrorMessage(realTypeAnnotation.type));
|
||||
@@ -200,14 +196,12 @@ function translateFunctionReturnTypeToJavaType(
|
||||
nullableReturnTypeAnnotation,
|
||||
);
|
||||
|
||||
function wrapNullable(javaType: string, nullableType?: string) {
|
||||
if (nullable) {
|
||||
imports.add('javax.annotation.Nullable');
|
||||
return `@Nullable ${nullableType ?? javaType}`;
|
||||
}
|
||||
return javaType;
|
||||
if (nullable) {
|
||||
imports.add('javax.annotation.Nullable');
|
||||
}
|
||||
|
||||
const isRequired = !nullable;
|
||||
|
||||
// FIXME: support class alias for args
|
||||
let realTypeAnnotation = returnTypeAnnotation;
|
||||
if (realTypeAnnotation.type === 'TypeAliasTypeAnnotation') {
|
||||
@@ -218,7 +212,7 @@ function translateFunctionReturnTypeToJavaType(
|
||||
case 'ReservedTypeAnnotation':
|
||||
switch (realTypeAnnotation.name) {
|
||||
case 'RootTag':
|
||||
return wrapNullable('double', 'Double');
|
||||
return wrapOptional('double', isRequired);
|
||||
default:
|
||||
(realTypeAnnotation.name: empty);
|
||||
throw new Error(createErrorMessage(realTypeAnnotation.name));
|
||||
@@ -228,35 +222,35 @@ function translateFunctionReturnTypeToJavaType(
|
||||
case 'PromiseTypeAnnotation':
|
||||
return 'void';
|
||||
case 'StringTypeAnnotation':
|
||||
return wrapNullable('String');
|
||||
return wrapOptional('String', isRequired);
|
||||
case 'NumberTypeAnnotation':
|
||||
return wrapNullable('double', 'Double');
|
||||
return wrapOptional('double', isRequired);
|
||||
case 'FloatTypeAnnotation':
|
||||
return wrapNullable('double', 'Double');
|
||||
return wrapOptional('double', isRequired);
|
||||
case 'DoubleTypeAnnotation':
|
||||
return wrapNullable('double', 'Double');
|
||||
return wrapOptional('double', isRequired);
|
||||
case 'Int32TypeAnnotation':
|
||||
return wrapNullable('double', 'Double');
|
||||
return wrapOptional('double', isRequired);
|
||||
case 'BooleanTypeAnnotation':
|
||||
return wrapNullable('boolean', 'Boolean');
|
||||
return wrapOptional('boolean', isRequired);
|
||||
case 'EnumDeclaration':
|
||||
switch (realTypeAnnotation.memberType) {
|
||||
case 'NumberTypeAnnotation':
|
||||
return wrapNullable('double', 'Double');
|
||||
return wrapOptional('double', isRequired);
|
||||
case 'StringTypeAnnotation':
|
||||
return wrapNullable('String');
|
||||
return wrapOptional('String', isRequired);
|
||||
default:
|
||||
throw new Error(createErrorMessage(realTypeAnnotation.type));
|
||||
}
|
||||
case 'UnionTypeAnnotation':
|
||||
switch (realTypeAnnotation.memberType) {
|
||||
case 'NumberTypeAnnotation':
|
||||
return wrapNullable('double', 'Double');
|
||||
return wrapOptional('double', isRequired);
|
||||
case 'ObjectTypeAnnotation':
|
||||
imports.add('com.facebook.react.bridge.WritableMap');
|
||||
return wrapNullable('WritableMap');
|
||||
return wrapOptional('WritableMap', isRequired);
|
||||
case 'StringTypeAnnotation':
|
||||
return wrapNullable('String');
|
||||
return wrapOptional('String', isRequired);
|
||||
default:
|
||||
throw new Error(
|
||||
`Unsupported union member returning value, found: ${realTypeAnnotation.memberType}"`,
|
||||
@@ -264,13 +258,13 @@ function translateFunctionReturnTypeToJavaType(
|
||||
}
|
||||
case 'ObjectTypeAnnotation':
|
||||
imports.add('com.facebook.react.bridge.WritableMap');
|
||||
return wrapNullable('WritableMap');
|
||||
return wrapOptional('WritableMap', isRequired);
|
||||
case 'GenericObjectTypeAnnotation':
|
||||
imports.add('com.facebook.react.bridge.WritableMap');
|
||||
return wrapNullable('WritableMap');
|
||||
return wrapOptional('WritableMap', isRequired);
|
||||
case 'ArrayTypeAnnotation':
|
||||
imports.add('com.facebook.react.bridge.WritableArray');
|
||||
return wrapNullable('WritableArray');
|
||||
return wrapOptional('WritableArray', isRequired);
|
||||
default:
|
||||
(realTypeAnnotation.type: 'MixedTypeAnnotation');
|
||||
throw new Error(createErrorMessage(realTypeAnnotation.type));
|
||||
|
||||
Reference in New Issue
Block a user