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        @NotNull
058        public static byte[] serializeCallableData(@NotNull NameResolver nameResolver, @NotNull ProtoBuf.Callable callableProto) {
059            try {
060                ByteArrayOutputStream result = new ByteArrayOutputStream();
061                serializeNameResolver(result, nameResolver);
062                callableProto.writeTo(result);
063                return result.toByteArray();
064            }
065            catch (IOException e) {
066                throw UtilsPackage.rethrow(e);
067            }
068        }
069    
070        private static void serializeNameResolver(@NotNull OutputStream out, @NotNull NameResolver nameResolver) {
071            serializeStringTable(out, nameResolver.getStringTable(), nameResolver.getQualifiedNameTable());
072        }
073    
074        public static void serializeStringTable(
075                @NotNull OutputStream out,
076                @NotNull ProtoBuf.StringTable stringTable,
077                @NotNull ProtoBuf.QualifiedNameTable qualifiedNameTable
078        ) {
079            try {
080                stringTable.writeDelimitedTo(out);
081                qualifiedNameTable.writeDelimitedTo(out);
082            }
083            catch (IOException e) {
084                throw UtilsPackage.rethrow(e);
085            }
086        }
087    }