org.jetbrains.kotlin.util.slicedMap.BasicWritableSlice Maven / Gradle / Ivy
/*
* Copyright 2010-2015 JetBrains s.r.o.
*
* 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 org.jetbrains.kotlin.util.slicedMap;
import org.jetbrains.annotations.NotNull;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
public class BasicWritableSlice extends AbstractWritableSlice {
public static Void initSliceDebugNames(Class> declarationOwner) {
for (Field field : declarationOwner.getFields()) {
if (!Modifier.isStatic(field.getModifiers())) continue;
try {
Object value = field.get(null);
if (value instanceof BasicWritableSlice) {
BasicWritableSlice slice = (BasicWritableSlice) value;
slice.debugName = field.getName();
}
} catch (IllegalAccessException e) {
throw new IllegalStateException(e);
}
}
return null;
}
private String debugName;
private final RewritePolicy rewritePolicy;
private final boolean isCollective;
public BasicWritableSlice(RewritePolicy rewritePolicy) {
this(rewritePolicy, false);
}
public BasicWritableSlice(RewritePolicy rewritePolicy, boolean isCollective) {
super("");
this.rewritePolicy = rewritePolicy;
this.isCollective = isCollective;
}
// True to put, false to skip
@Override
public boolean check(K key, V value) {
// assert key != null : this + " called with null key";
assert value != null : this + " called with null value";
return true;
}
@Override
public void afterPut(MutableSlicedMap map, K key, V value) {
// Do nothing
}
@Override
public V computeValue(SlicedMap map, K key, V value, boolean valueNotFound) {
if (valueNotFound) assert value == null;
return value;
}
@Override
public RewritePolicy getRewritePolicy() {
return rewritePolicy;
}
@Override
public boolean isCollective() {
return isCollective;
}
public void setDebugName(@NotNull String debugName) {
if (this.debugName != null) {
throw new IllegalStateException("Debug name already set for " + this);
}
this.debugName = debugName;
}
@Override
public String toString() {
return debugName;
}
@Override
public ReadOnlySlice makeRawValueVersion() {
return new DelegatingSlice(this) {
@Override
public V computeValue(SlicedMap map, K key, V value, boolean valueNotFound) {
if (valueNotFound) assert value == null;
return value;
}
};
}
}