com.facebook.buck.cxx.CxxPreprocessorFlags.java Source code

Java tutorial

Introduction

Here is the source code for com.facebook.buck.cxx.CxxPreprocessorFlags.java

Source

/*
 * Copyright 2014-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.cxx;

import com.google.common.base.Optional;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableMultimap;

/**
 * Utility class for manipulating C/C++/etc. preprocessor flags specified
 * in {@link CxxConstructorArg}.
 */
public class CxxPreprocessorFlags {
    // Utility class; do not instantiate.
    private CxxPreprocessorFlags() {
    }

    /**
     * Converts from CxxConstructorArg.preprocessorFlags and
     * CxxConstructorArg.langPreprocessorFlags to the multimap
     * of (source type: [flag, flag2, ...]) pairs.
     *
     * If the list version of the arg is present, fills every source
     * type with the list's value.
     *
     * Otherwise, converts the map version of the arg to a multimap.
     */
    public static ImmutableMultimap<CxxSource.Type, String> fromArgs(Optional<ImmutableList<String>> defaultFlags,
            Optional<ImmutableMap<CxxSource.Type, ImmutableList<String>>> perLanguageFlags) {

        ImmutableMultimap.Builder<CxxSource.Type, String> result = ImmutableMultimap.builder();
        if (defaultFlags.isPresent()) {
            for (CxxSource.Type type : CxxSource.Type.values()) {
                result.putAll(type, defaultFlags.get());
            }
        }
        if (perLanguageFlags.isPresent()) {
            for (ImmutableMap.Entry<CxxSource.Type, ImmutableList<String>> entry : perLanguageFlags.get()
                    .entrySet()) {
                result.putAll(entry.getKey(), entry.getValue());
            }
        }
        return result.build();
    }
}