| /* |
| * Copyright 2012-present Facebook, Inc. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); you may |
| * not use this file except in compliance with the License. You may obtain |
| * a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
| * License for the specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| package com.facebook.buck.parcelable; |
| |
| import com.google.common.base.Preconditions; |
| import com.google.common.collect.ImmutableSortedSet; |
| import com.google.common.collect.Iterables; |
| |
| import javax.annotation.Nullable; |
| |
| public class ParcelableClass { |
| |
| private final String packageName; |
| |
| private final Iterable<String> imports; |
| |
| private final String className; |
| |
| private final String creatorClassName; |
| |
| /** |
| * Visibility to use for fields that do not specify their own visibility level. |
| * <p> |
| * Must be one of: |
| * <ul> |
| * <li>{@code ""} for default visibility |
| * <li>{@code "public"} for public visibility |
| * <li>{@code "private"} for private visibility |
| * <li>{@code "protected"} for protected visibility |
| * </ul> |
| */ |
| private final String defaultFieldVisibility; |
| |
| private final Iterable<ParcelableField> fields; |
| |
| @Nullable |
| private final String superClassName; |
| |
| @Nullable |
| private final String rawSuperParams; |
| |
| public ParcelableClass(String packageName, |
| Iterable<String> imports, |
| String className, |
| String creatorClassName, |
| String defaultFieldVisibility, |
| Iterable<ParcelableField> fields, |
| String superClassName, |
| String rawSuperParams) { |
| Preconditions.checkArgument(!Iterables.isEmpty(fields), |
| "There must be fields, or else there is nothing to parcel."); |
| boolean hasJsonAnnotations = false; |
| for (ParcelableField field : fields) { |
| if (field.getJsonProperty() != null) { |
| hasJsonAnnotations = true; |
| break; |
| } |
| } |
| |
| this.packageName = Preconditions.checkNotNull(packageName); |
| ImmutableSortedSet.Builder<String> importsBuilder = ImmutableSortedSet.<String>naturalOrder() |
| .addAll(imports) |
| .add("import android.os.Parcel;") |
| .add("import android.os.Parcelable;") |
| // Lists is used to facilitate creating an array to pass to Parcel.readTypedList(). |
| .add("import com.google.common.collect.Lists;"); |
| if (hasJsonAnnotations) { |
| importsBuilder.add("import com.fasterxml.jackson.annotation.JsonProperty;"); |
| } |
| this.imports = importsBuilder.build(); |
| this.className = Preconditions.checkNotNull(className); |
| this.creatorClassName = Preconditions.checkNotNull(creatorClassName); |
| this.defaultFieldVisibility = Preconditions.checkNotNull(defaultFieldVisibility); |
| |
| this.fields = fields; |
| |
| this.superClassName = superClassName; |
| this.rawSuperParams = rawSuperParams; |
| } |
| |
| public String getPackageName() { |
| return packageName; |
| } |
| |
| public Iterable<String> getImports() { |
| return imports; |
| } |
| |
| public String getClassName() { |
| return className; |
| } |
| |
| public String getCreatorClassName() { |
| return creatorClassName; |
| } |
| |
| public String getDefaultFieldVisibility() { |
| return defaultFieldVisibility; |
| } |
| |
| public Iterable<ParcelableField> getFields() { |
| return fields; |
| } |
| |
| public boolean hasSuperClass() { |
| return superClassName != null; |
| } |
| |
| public String getSuperClassName() { |
| return superClassName; |
| } |
| |
| public String getRawSuperParams() { |
| return rawSuperParams; |
| } |
| |
| } |