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

jedi.annotation.processor6.model.AbstractMemberDeclarationAdapter Maven / Gradle / Ivy

package jedi.annotation.processor6.model;

import static jedi.functional.Coercions.asSet;

import java.io.File;
import java.util.Set;

import javax.lang.model.element.Element;
import javax.lang.model.element.ElementKind;
import javax.lang.model.element.PackageElement;
import javax.lang.model.element.TypeElement;
import javax.lang.model.type.TypeKind;
import javax.lang.model.type.TypeMirror;

import jedi.annotation.processor.model.MemberDeclaration;

public abstract class AbstractMemberDeclarationAdapter implements MemberDeclaration {
	protected final T element;
	protected final BoxerFunctor boxer;

	public AbstractMemberDeclarationAdapter(BoxerFunctor boxer, T element) {
		this.boxer = boxer;
		this.element = element;
	}

	@Override
	public boolean equals(Object obj) {
		if (obj == this) {
			return true;
		}

		if (obj == null || !obj.getClass().equals(getClass())) {
			return false;
		}

		AbstractMemberDeclarationAdapter that = (AbstractMemberDeclarationAdapter) obj;
		return element.equals(that.element);
	}

	@Override
	public int hashCode() {
		return element.hashCode();
	}

	protected Element getEnclosingElement(ElementKind... kind) {
		return getEnclosingElement(element, asSet(kind));
	}

	protected Element getEnclosingElement(Element ancestor, Set kind) {
		return kind.contains(ancestor.getKind()) ? ancestor : getEnclosingElement(ancestor.getEnclosingElement(), kind);
	}

	@Override
	public String getPackage() {
		return ((PackageElement) getEnclosingElement(ElementKind.PACKAGE)).getQualifiedName().toString();
	}

	protected TypeElement getDeclaringType() {
		return (TypeElement) getEnclosingElement(ElementKind.CLASS, ElementKind.INTERFACE);
	}

	@Override
	public String getDeclaringTypeWithUnboundedGenerics() {
		return TypeDeclarationRenderer.renderWithoutBounds(getDeclaringType());
	}

	@Override
	public String getQualifiedNameOfDeclaringType() {
		return getDeclaringType().getQualifiedName().toString();
	}

	@Override
	public String getSimpleNameOfDeclaringType() {
		return getDeclaringType().getSimpleName().toString();
	}

	@Override
	public String getOriginalName() {
		return element.getSimpleName().toString();
	}

	@Override
	public String getSimpleName() {
		return element.getSimpleName().toString();
	}

	protected abstract TypeMirror getType();

	@Override
	public String getDeclaredType() {
		return getType().toString();
	}

	@Override
	public String getBoxedDeclaredType() {
		return boxer.execute(getType());
	}

	@Override
	public boolean isVoid() {
		return element.asType().getKind() == TypeKind.VOID;
	}

	@Override
	public boolean isBoolean() {
		return getBoxedDeclaredType().equals(Boolean.class.getName());
	}

	@Override
	public File getFile() {
		return null;
	}

	@Override
	public int getLine() {
		return 0;
	}

	@Override
	public int getColumn() {
		return 0;
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy