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