/*
* 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.apple;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.ImmutableSet;
/**
* File types used in Apple targets.
*/
public final class FileTypes {
// Utility class. Do not instantiate.
private FileTypes() { }
/**
* Map of file extension to Apple UTI (Uniform Type Identifier).
*/
public static final ImmutableMap<String, String> FILE_EXTENSION_TO_UTI =
ImmutableMap.<String, String>builder()
.put("a", "archive.ar")
.put("app", "wrapper.application")
.put("appex", "wrapper.app-extension")
.put("bdic", "file")
.put("bin", "archive.macbinary")
.put("bmp", "image.bmp")
.put("bundle", "wrapper.cfbundle")
.put("c", "sourcecode.c.c")
.put("cc", "sourcecode.cpp.cpp")
.put("cpp", "sourcecode.cpp.cpp")
.put("css", "text.css")
.put("cxx", "sourcecode.cpp.cpp")
.put("dart", "sourcecode")
.put("dylib", "compiled.mach-o.dylib")
.put("exp", "sourcecode.exports")
.put("framework", "wrapper.framework")
.put("fsh", "sourcecode.glsl")
.put("gyp", "sourcecode")
.put("gypi", "text")
.put("h", "sourcecode.c.h")
.put("hxx", "sourcecode.cpp.h")
.put("icns", "image.icns")
.put("java", "sourcecode.java")
.put("jar", "archive.jar")
.put("jpeg", "image.jpeg")
.put("jpg", "image.jpeg")
.put("js", "sourcecode.javascript")
.put("json", "text.json")
.put("m", "sourcecode.c.objc")
.put("mm", "sourcecode.cpp.objcpp")
.put("nib", "wrapper.nib")
.put("o", "compiled.mach-o.objfile")
.put("octest", "wrapper.cfbundle")
.put("pdf", "image.pdf")
.put("pl", "text.script.perl")
.put("plist", "text.plist.xml")
.put("pm", "text.script.perl")
.put("png", "image.png")
.put("proto", "text")
.put("py", "text.script.python")
.put("r", "sourcecode.rez")
.put("rez", "sourcecode.rez")
.put("rtf", "text.rtf")
.put("s", "sourcecode.asm")
.put("storyboard", "file.storyboard")
.put("strings", "text.plist.strings")
.put("tif", "image.tiff")
.put("tiff", "image.tiff")
.put("tcc", "sourcecode.cpp.cpp")
.put("ttf", "file")
.put("vsh", "sourcecode.glsl")
.put("xcassets", "folder.assetcatalog")
.put("xcconfig", "text.xcconfig")
.put("xcodeproj", "wrapper.pb-project")
.put("xcdatamodel", "wrapper.xcdatamodel")
.put("xcdatamodeld", "wrapper.xcdatamodeld")
.put("xctest", "wrapper.cfbundle")
.put("xib", "file.xib")
.put("y", "sourcecode.yacc")
.put("zip", "archive.zip")
.build();
/**
* Set of UTIs which only work as "lastKnownFileType" and not "explicitFileType"
* in a PBXFileReference.
*
* Yes, really. Because Xcode.
*/
public static final ImmutableSet<String> EXPLICIT_FILE_TYPE_BROKEN_UTIS =
ImmutableSet.of("file.xib");
/**
* Multimap of Apple UTI (Uniform Type Identifier) to file extension(s).
*/
public static final ImmutableMultimap<String, String> UTI_TO_FILE_EXTENSIONS;
static {
// Invert the map of (file extension -> UTI) pairs to
// (UTI -> [file extension 1, ...]) pairs.
ImmutableMultimap.Builder<String, String> builder = ImmutableMultimap.builder();
for (ImmutableMap.Entry<String, String> entry : FILE_EXTENSION_TO_UTI.entrySet()) {
builder.put(entry.getValue(), entry.getKey());
}
UTI_TO_FILE_EXTENSIONS = builder.build();
}
}