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.ByteArrayOutputStream;
024    import java.io.IOException;
025    import java.io.OutputStream;
026    
027    public class SerializationUtil {
028        private SerializationUtil() {
029        }
030    
031        @NotNull
032        public static byte[] serializeClassData(@NotNull ClassData classData) {
033            try {
034                ByteArrayOutputStream result = new ByteArrayOutputStream();
035                serializeNameResolver(result, classData.getNameResolver());
036                classData.getClassProto().writeTo(result);
037                return result.toByteArray();
038            }
039            catch (IOException e) {
040                throw UtilsPackage.rethrow(e);
041            }
042        }
043    
044        @NotNull
045        public static byte[] serializePackageData(@NotNull PackageData packageData) {
046            try {
047                ByteArrayOutputStream result = new ByteArrayOutputStream();
048                serializeNameResolver(result, packageData.getNameResolver());
049                packageData.getPackageProto().writeTo(result);
050                return result.toByteArray();
051            }
052            catch (IOException e) {
053                throw UtilsPackage.rethrow(e);
054            }
055        }
056    
057        private static void serializeNameResolver(@NotNull OutputStream out, @NotNull NameResolver nameResolver) {
058            serializeStringTable(out, nameResolver.getStringTable(), nameResolver.getQualifiedNameTable());
059        }
060    
061        public static void serializeStringTable(
062                @NotNull OutputStream out,
063                @NotNull ProtoBuf.StringTable stringTable,
064                @NotNull ProtoBuf.QualifiedNameTable qualifiedNameTable
065        ) {
066            try {
067                stringTable.writeDelimitedTo(out);
068                qualifiedNameTable.writeDelimitedTo(out);
069            }
070            catch (IOException e) {
071                throw UtilsPackage.rethrow(e);
072            }
073        }
074    }