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.codegen.serialization; 018 019 import com.intellij.openapi.util.Pair; 020 import org.jetbrains.annotations.NotNull; 021 import org.jetbrains.annotations.Nullable; 022 import org.jetbrains.kotlin.descriptors.FunctionDescriptor; 023 import org.jetbrains.kotlin.descriptors.PropertyDescriptor; 024 import org.jetbrains.kotlin.util.slicedMap.BasicWritableSlice; 025 import org.jetbrains.kotlin.util.slicedMap.MutableSlicedMap; 026 import org.jetbrains.kotlin.util.slicedMap.SlicedMapImpl; 027 import org.jetbrains.kotlin.util.slicedMap.Slices; 028 import org.jetbrains.org.objectweb.asm.Type; 029 import org.jetbrains.org.objectweb.asm.commons.Method; 030 031 public final class JvmSerializationBindings { 032 public static final SerializationMappingSlice<FunctionDescriptor, Method> METHOD_FOR_FUNCTION = 033 SerializationMappingSlice.create(); 034 public static final SerializationMappingSlice<PropertyDescriptor, Pair<Type, String>> FIELD_FOR_PROPERTY = 035 SerializationMappingSlice.create(); 036 public static final SerializationMappingSlice<PropertyDescriptor, Method> SYNTHETIC_METHOD_FOR_PROPERTY = 037 SerializationMappingSlice.create(); 038 039 private static final class SerializationMappingSlice<K, V> extends BasicWritableSlice<K, V> { 040 public SerializationMappingSlice() { 041 super(Slices.ONLY_REWRITE_TO_EQUAL, false); 042 } 043 044 @NotNull 045 public static <K, V> SerializationMappingSlice<K, V> create() { 046 return new SerializationMappingSlice<K, V>(); 047 } 048 } 049 050 private static final class SerializationMappingSetSlice<K> extends Slices.SetSlice<K> { 051 public SerializationMappingSetSlice() { 052 super(Slices.ONLY_REWRITE_TO_EQUAL, false); 053 } 054 055 @NotNull 056 public static <K> SerializationMappingSetSlice<K> create() { 057 return new SerializationMappingSetSlice<K>(); 058 } 059 } 060 061 static { 062 BasicWritableSlice.initSliceDebugNames(JvmSerializationBindings.class); 063 } 064 065 private final MutableSlicedMap map = SlicedMapImpl.create(); 066 067 public <K, V> void put(@NotNull SerializationMappingSlice<K, V> slice, @NotNull K key, @NotNull V value) { 068 map.put(slice, key, value); 069 } 070 071 public <K> void put(@NotNull SerializationMappingSetSlice<K> slice, @NotNull K key) { 072 map.put(slice, key, true); 073 } 074 075 @Nullable 076 public <K, V> V get(@NotNull SerializationMappingSlice<K, V> slice, @NotNull K key) { 077 return map.get(slice, key); 078 } 079 080 public <K> boolean get(@NotNull SerializationMappingSetSlice<K> slice, @NotNull K key) { 081 return Boolean.TRUE.equals(map.get(slice, key)); 082 } 083 }