AnnoElementValueMap.java
/*
* SPDX-FileCopyrightText: 2025 kaumei.io
* SPDX-License-Identifier: Apache-2.0
*/
package io.kaumei.jdbc.anno.ctx;
import io.kaumei.jdbc.anno.ProcessorException;
import org.jspecify.annotations.Nullable;
import javax.lang.model.element.AnnotationMirror;
import javax.lang.model.element.AnnotationValue;
import javax.lang.model.element.VariableElement;
import javax.lang.model.type.TypeMirror;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class AnnoElementValueMap {
private final Map<String, AnnotationValue> values = new HashMap<>();
public AnnoElementValueMap(AnnotationMirror annoMirror) {
for (var entry : annoMirror.getElementValues().entrySet()) {
var propertyName = entry.getKey().getSimpleName().toString();
values.put(propertyName, entry.getValue());
}
}
// ------------------------------------------------------------------------
public int getInteger(String name, int defaultValue) {
try {
var annoValue = values.get(name);
if (annoValue == null) {
return defaultValue;
}
return (Integer) annoValue.getValue();
} catch (RuntimeException e) {
throw new ProcessorException("Illegal state: name=" + name + ", msg=" + e.getMessage(), e);
}
}
// ------------------------------------------------------------------------
public String getString(String name, String defaultValue) {
try {
var annoValue = values.get(name);
if (annoValue == null) {
return defaultValue;
}
return (String) annoValue.getValue();
} catch (RuntimeException e) {
throw new ProcessorException("Illegal state: name=" + name + ", msg=" + e.getMessage(), e);
}
}
// ------------------------------------------------------------------------
public <T extends Enum<T>> T getEnum(String name, Class<T> cls, T defaultValue) {
try {
var annoValue = values.get(name);
if (annoValue == null) {
return defaultValue;
}
var constantName = ((VariableElement) annoValue.getValue()).getSimpleName().toString();
return Enum.valueOf(cls, constantName);
} catch (RuntimeException e) {
throw new ProcessorException("Illegal state: name=" + name + ", msg=" + e.getMessage(), e);
}
}
// ------------------------------------------------------------------------
@Nullable
public TypeMirror getTypeMirror(String name) {
try {
var annoValue = values.get(name);
if (annoValue == null) {
return null;
}
return (TypeMirror) annoValue.getValue();
} catch (RuntimeException e) {
throw new ProcessorException("Illegal state: name=" + name + ", msg=" + e.getMessage(), e);
}
}
// ------------------------------------------------------------------------
public TypeMirror[] getTypeMirrorArray(String name) {
int i = 0;
try {
var annoValue = values.get(name);
if (annoValue == null) {
return Context.EMPTY_TYPE_MIRROR_ARRAY;
}
var list = (List<?>) annoValue.getValue();
var result = new TypeMirror[list.size()];
for (var entry : list) {
var av = (AnnotationValue) entry;
result[i++] = (TypeMirror) av.getValue();
}
return result;
} catch (RuntimeException e) {
throw new ProcessorException("Illegal state: name=" + name + ", i=" + i + ", msg=" + e.getMessage(), e);
}
}
}