001    /*
002     * Copyright 2010-2015 JetBrains s.r.o.
003     *
004     * Licensed under the Apache License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     * http://www.apache.org/licenses/LICENSE-2.0
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    
017    package org.jetbrains.kotlin.serialization;
018    
019    import org.jetbrains.annotations.NotNull;
020    import org.jetbrains.kotlin.serialization.deserialization.NameResolver;
021    import org.jetbrains.kotlin.utils.UtilsPackage;
022    
023    import java.io.IOException;
024    import java.io.InputStream;
025    import java.io.OutputStream;
026    
027    public class NameSerializationUtil {
028        private NameSerializationUtil() {
029        }
030    
031        @NotNull
032        public static NameResolver deserializeNameResolver(@NotNull InputStream in) {
033            try {
034                ProtoBuf.StringTable simpleNames = ProtoBuf.StringTable.parseDelimitedFrom(in);
035                ProtoBuf.QualifiedNameTable qualifiedNames = ProtoBuf.QualifiedNameTable.parseDelimitedFrom(in);
036                return new NameResolver(simpleNames, qualifiedNames);
037            }
038            catch (IOException e) {
039                throw UtilsPackage.rethrow(e);
040            }
041        }
042    
043        public static void serializeNameResolver(@NotNull OutputStream out, @NotNull NameResolver nameResolver) {
044            serializeStringTable(out, nameResolver.getStringTable(), nameResolver.getQualifiedNameTable());
045        }
046    
047        public static void serializeStringTable(@NotNull OutputStream out, @NotNull StringTable stringTable) {
048            serializeStringTable(out, toStringTable(stringTable), toQualifiedNameTable(stringTable));
049        }
050    
051        private static void serializeStringTable(
052                @NotNull OutputStream out,
053                @NotNull ProtoBuf.StringTable stringTable,
054                @NotNull ProtoBuf.QualifiedNameTable qualifiedNameTable
055        ) {
056            try {
057                stringTable.writeDelimitedTo(out);
058                qualifiedNameTable.writeDelimitedTo(out);
059            }
060            catch (IOException e) {
061                throw UtilsPackage.rethrow(e);
062            }
063        }
064    
065        @NotNull
066        public static ProtoBuf.StringTable toStringTable(@NotNull StringTable stringTable) {
067            ProtoBuf.StringTable.Builder simpleNames = ProtoBuf.StringTable.newBuilder();
068            for (String simpleName : stringTable.getStrings()) {
069                simpleNames.addString(simpleName);
070            }
071            return simpleNames.build();
072        }
073    
074        @NotNull
075        public static ProtoBuf.QualifiedNameTable toQualifiedNameTable(@NotNull StringTable stringTable) {
076            ProtoBuf.QualifiedNameTable.Builder qualifiedNames = ProtoBuf.QualifiedNameTable.newBuilder();
077            for (ProtoBuf.QualifiedNameTable.QualifiedName.Builder qName : stringTable.getFqNames()) {
078                qualifiedNames.addQualifiedName(qName);
079            }
080            return qualifiedNames.build();
081        }
082    
083        @NotNull
084        public static NameResolver createNameResolver(@NotNull StringTable table) {
085            return new NameResolver(toStringTable(table), toQualifiedNameTable(table));
086        }
087    }