diff --git a/packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/src/main/java/com/facebook/react/codegen/generator/model/AliasType.java b/packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/src/main/java/com/facebook/react/codegen/generator/model/AliasType.java new file mode 100644 index 00000000000..2915cdabdf9 --- /dev/null +++ b/packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/src/main/java/com/facebook/react/codegen/generator/model/AliasType.java @@ -0,0 +1,18 @@ +/* + * Copyright (c) Facebook, Inc. and its 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.codegen.generator.model; + +public final class AliasType extends Type { + + public final TypeId referredTypeId; + + public AliasType(final TypeId typeId, final TypeId referredTypeId) { + super(typeId); + this.referredTypeId = referredTypeId; + } +} diff --git a/packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/src/main/java/com/facebook/react/codegen/generator/model/AnyType.java b/packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/src/main/java/com/facebook/react/codegen/generator/model/AnyType.java new file mode 100644 index 00000000000..d26fd527e77 --- /dev/null +++ b/packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/src/main/java/com/facebook/react/codegen/generator/model/AnyType.java @@ -0,0 +1,15 @@ +/* + * Copyright (c) Facebook, Inc. and its 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.codegen.generator.model; + +public final class AnyType extends Type { + + public AnyType(final TypeId typeId) { + super(typeId); + } +} diff --git a/packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/src/main/java/com/facebook/react/codegen/generator/model/ArrayType.java b/packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/src/main/java/com/facebook/react/codegen/generator/model/ArrayType.java new file mode 100644 index 00000000000..58af1236956 --- /dev/null +++ b/packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/src/main/java/com/facebook/react/codegen/generator/model/ArrayType.java @@ -0,0 +1,18 @@ +/* + * Copyright (c) Facebook, Inc. and its 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.codegen.generator.model; + +public final class ArrayType extends Type { + + public final Type elementType; + + public ArrayType(final TypeId typeId, final Type elementType) { + super(typeId); + this.elementType = elementType; + } +} diff --git a/packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/src/main/java/com/facebook/react/codegen/generator/model/BooleanType.java b/packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/src/main/java/com/facebook/react/codegen/generator/model/BooleanType.java new file mode 100644 index 00000000000..ae5de917064 --- /dev/null +++ b/packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/src/main/java/com/facebook/react/codegen/generator/model/BooleanType.java @@ -0,0 +1,15 @@ +/* + * Copyright (c) Facebook, Inc. and its 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.codegen.generator.model; + +public final class BooleanType extends Type { + + public BooleanType(final TypeId typeId) { + super(typeId); + } +} diff --git a/packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/src/main/java/com/facebook/react/codegen/generator/model/DoubleType.java b/packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/src/main/java/com/facebook/react/codegen/generator/model/DoubleType.java new file mode 100644 index 00000000000..2cb8aa08c98 --- /dev/null +++ b/packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/src/main/java/com/facebook/react/codegen/generator/model/DoubleType.java @@ -0,0 +1,15 @@ +/* + * Copyright (c) Facebook, Inc. and its 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.codegen.generator.model; + +public final class DoubleType extends NumberType { + + public DoubleType(final TypeId typeId) { + super(typeId); + } +} diff --git a/packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/src/main/java/com/facebook/react/codegen/generator/model/FloatType.java b/packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/src/main/java/com/facebook/react/codegen/generator/model/FloatType.java new file mode 100644 index 00000000000..198872f227c --- /dev/null +++ b/packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/src/main/java/com/facebook/react/codegen/generator/model/FloatType.java @@ -0,0 +1,15 @@ +/* + * Copyright (c) Facebook, Inc. and its 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.codegen.generator.model; + +public final class FloatType extends NumberType { + + public FloatType(final TypeId typeId) { + super(typeId); + } +} diff --git a/packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/src/main/java/com/facebook/react/codegen/generator/model/FunctionType.java b/packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/src/main/java/com/facebook/react/codegen/generator/model/FunctionType.java new file mode 100644 index 00000000000..bc40e8d9c88 --- /dev/null +++ b/packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/src/main/java/com/facebook/react/codegen/generator/model/FunctionType.java @@ -0,0 +1,71 @@ +/* + * Copyright (c) Facebook, Inc. and its 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.codegen.generator.model; + +import java.util.Collections; +import java.util.List; +import java.util.Objects; + +public final class FunctionType extends Type { + + public static class ArgumentType { + public final String name; + public final Type type; + + private ArgumentType(String name, Type type) { + this.name = name; + this.type = type; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + ArgumentType that = (ArgumentType) o; + return Objects.equals(this.name, that.name) && Objects.equals(this.type, that.type); + } + + @Override + public int hashCode() { + return Objects.hash(name, type); + } + } + + public final List parameters; + public final Type returnType; + + public FunctionType(final TypeId typeId, List parameters, Type returnType) { + super(typeId); + this.parameters = Collections.unmodifiableList(parameters); + this.returnType = returnType; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass() || !super.equals(o)) { + return false; + } + + FunctionType that = (FunctionType) o; + return Objects.equals(this.parameters, that.parameters) + && Objects.equals(this.returnType, that.returnType); + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode(), parameters, returnType); + } +} diff --git a/packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/src/main/java/com/facebook/react/codegen/generator/model/GenericObjectType.java b/packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/src/main/java/com/facebook/react/codegen/generator/model/GenericObjectType.java new file mode 100644 index 00000000000..f9995a68f2e --- /dev/null +++ b/packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/src/main/java/com/facebook/react/codegen/generator/model/GenericObjectType.java @@ -0,0 +1,15 @@ +/* + * Copyright (c) Facebook, Inc. and its 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.codegen.generator.model; + +public final class GenericObjectType extends Type { + + public GenericObjectType(final TypeId typeId) { + super(typeId); + } +} diff --git a/packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/src/main/java/com/facebook/react/codegen/generator/model/Int32Type.java b/packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/src/main/java/com/facebook/react/codegen/generator/model/Int32Type.java new file mode 100644 index 00000000000..72afa7c8d85 --- /dev/null +++ b/packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/src/main/java/com/facebook/react/codegen/generator/model/Int32Type.java @@ -0,0 +1,15 @@ +/* + * Copyright (c) Facebook, Inc. and its 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.codegen.generator.model; + +public final class Int32Type extends NumberType { + + public Int32Type(final TypeId typeId) { + super(typeId); + } +} diff --git a/packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/src/main/java/com/facebook/react/codegen/generator/model/NumberType.java b/packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/src/main/java/com/facebook/react/codegen/generator/model/NumberType.java new file mode 100644 index 00000000000..11770f829fe --- /dev/null +++ b/packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/src/main/java/com/facebook/react/codegen/generator/model/NumberType.java @@ -0,0 +1,15 @@ +/* + * Copyright (c) Facebook, Inc. and its 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.codegen.generator.model; + +public class NumberType extends Type { + + public NumberType(final TypeId typeId) { + super(typeId); + } +} diff --git a/packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/src/main/java/com/facebook/react/codegen/generator/model/ObjectType.java b/packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/src/main/java/com/facebook/react/codegen/generator/model/ObjectType.java new file mode 100644 index 00000000000..940cdd5a9c4 --- /dev/null +++ b/packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/src/main/java/com/facebook/react/codegen/generator/model/ObjectType.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) Facebook, Inc. and its 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.codegen.generator.model; + +public final class ObjectType extends Type { + + public ObjectType(final TypeId typeId) { + super(typeId); + } + + public static class Property { + public final String propertyName; + public final Type type; + public final boolean optional; + + public Property(String propertyName, Type type, boolean optional) { + this.propertyName = propertyName; + this.type = type; + this.optional = optional; + } + + @Override + public String toString() { + return propertyName + " " + type; + } + } +} diff --git a/packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/src/main/java/com/facebook/react/codegen/generator/model/ReservedFunctionValueType.java b/packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/src/main/java/com/facebook/react/codegen/generator/model/ReservedFunctionValueType.java new file mode 100644 index 00000000000..8664fd10df1 --- /dev/null +++ b/packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/src/main/java/com/facebook/react/codegen/generator/model/ReservedFunctionValueType.java @@ -0,0 +1,21 @@ +/* + * Copyright (c) Facebook, Inc. and its 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.codegen.generator.model; + +public final class ReservedFunctionValueType extends Type { + public enum ReservedName { + RootTag, + } + + public ReservedName reservedName; + + public ReservedFunctionValueType(final TypeId typeId, ReservedName reservedName) { + super(typeId); + this.reservedName = reservedName; + } +} diff --git a/packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/src/main/java/com/facebook/react/codegen/generator/model/StringType.java b/packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/src/main/java/com/facebook/react/codegen/generator/model/StringType.java new file mode 100644 index 00000000000..897e8d9fef7 --- /dev/null +++ b/packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/src/main/java/com/facebook/react/codegen/generator/model/StringType.java @@ -0,0 +1,15 @@ +/* + * Copyright (c) Facebook, Inc. and its 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.codegen.generator.model; + +public final class StringType extends Type { + + public StringType(final TypeId typeId) { + super(typeId); + } +} diff --git a/packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/src/main/java/com/facebook/react/codegen/generator/model/Type.java b/packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/src/main/java/com/facebook/react/codegen/generator/model/Type.java new file mode 100644 index 00000000000..bf1b6d087b5 --- /dev/null +++ b/packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/src/main/java/com/facebook/react/codegen/generator/model/Type.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) Facebook, Inc. and its 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.codegen.generator.model; + +import java.util.Objects; + +public abstract class Type { + protected final TypeId mTypeId; + + public Type(final TypeId typeId) { + mTypeId = typeId; + } + + public TypeId getTypeId() { + return mTypeId; + } + + @Override + public String toString() { + return mTypeId.toString(); + } + + @Override + public boolean equals(final Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + final Type type = (Type) o; + return Objects.equals(mTypeId, type.mTypeId); + } + + @Override + public int hashCode() { + return Objects.hash(mTypeId); + } +} diff --git a/packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/src/main/java/com/facebook/react/codegen/generator/model/TypeId.java b/packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/src/main/java/com/facebook/react/codegen/generator/model/TypeId.java new file mode 100644 index 00000000000..bbec7886106 --- /dev/null +++ b/packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/src/main/java/com/facebook/react/codegen/generator/model/TypeId.java @@ -0,0 +1,66 @@ +/* + * Copyright (c) Facebook, Inc. and its 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.codegen.generator.model; + +import java.util.Objects; +import javax.annotation.Nullable; + +/** Represents the fully qualified name for a Flow type. */ +public final class TypeId { + public final String moduleName; + public final String typeName; + + private static final String EMPTY_TYPE_NAME = ""; + + private TypeId(final String moduleName, final String typeName) { + this.moduleName = moduleName; + this.typeName = typeName; + } + + public static TypeId of(final String moduleName) { + return new TypeId(moduleName, EMPTY_TYPE_NAME); + } + + public static TypeId of(final String moduleName, @Nullable final String typeName) { + if (typeName == null) { + return TypeId.of(moduleName); + } + + if (moduleName.equals(typeName)) { + return TypeId.of(moduleName); + } + + return new TypeId(moduleName, typeName); + } + + @Override + public String toString() { + return String.format( + "", + moduleName, EMPTY_TYPE_NAME.equals(typeName) ? moduleName : typeName); + } + + @Override + public boolean equals(final Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + final TypeId typeId = (TypeId) o; + return Objects.equals(moduleName, typeId.moduleName) + && Objects.equals(typeName, typeId.typeName); + } + + @Override + public int hashCode() { + return Objects.hash(moduleName, typeName); + } +} diff --git a/packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/src/main/java/com/facebook/react/codegen/generator/model/VoidType.java b/packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/src/main/java/com/facebook/react/codegen/generator/model/VoidType.java new file mode 100644 index 00000000000..1e6f7d460c5 --- /dev/null +++ b/packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/src/main/java/com/facebook/react/codegen/generator/model/VoidType.java @@ -0,0 +1,15 @@ +/* + * Copyright (c) Facebook, Inc. and its 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.codegen.generator.model; + +public final class VoidType extends Type { + + public VoidType(final TypeId typeId) { + super(typeId); + } +}