All Downloads are FREE. Search and download functionalities are using the official Maven repository.

software.coley.cafedude.tree.visitor.writer.AnnotationArrayWriter Maven / Gradle / Ivy

Go to download

Tree module for CafeDude, containing a simplified intermediate model for classes

There is a newer version: 2.1.1
Show newest version
package software.coley.cafedude.tree.visitor.writer;

import software.coley.cafedude.classfile.annotation.*;
import software.coley.cafedude.tree.Constant;
import software.coley.cafedude.tree.visitor.AnnotationArrayVisitor;
import software.coley.cafedude.tree.visitor.AnnotationVisitor;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;

/**
 * Visitor for visiting annotation array values and writing them back to {@link ElementValue}s.
 *
 * @author Justus Garbe
 */
public class AnnotationArrayWriter implements AnnotationArrayVisitor {
	private final List array = new ArrayList<>();
	private final Symbols symbols;
	private final Consumer> callback;

	AnnotationArrayWriter(@Nonnull Symbols symbols, @Nonnull Consumer> callback) {
		this.callback = callback;
		this.symbols = symbols;
	}

	@Override
	public void visitArrayValue(@Nonnull Constant value) {
		array.add(symbols.newElementValue(value));
	}

	@Override
	public void visitArrayEnum(@Nonnull String type, @Nonnull String name) {
		array.add(new EnumElementValue('e', symbols.newUtf8(type), symbols.newUtf8(name)));
	}

	@Override
	public AnnotationVisitor visitArrayAnnotation(@Nonnull String type) {
		return new AnnotationWriter(symbols, values -> {
			array.add(new AnnotationElementValue('@', new Annotation(symbols.newUtf8(type), values)));
		});
	}

	@Nullable
	@Override
	public AnnotationArrayVisitor visitSubArray() {
		return new AnnotationArrayWriter(symbols, array -> {
			this.array.add(new ArrayElementValue('[', array));
		});
	}

	@Override
	public void visitArrayEnd() {
		callback.accept(array);
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy