com.facebook.buck.parcelable.ParcelableClass.java Source code

Java tutorial

Introduction

Here is the source code for com.facebook.buck.parcelable.ParcelableClass.java

Source

/*
 * 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;
    }

}