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

org.jannocessor.model.util.ModelUtils Maven / Gradle / Ivy

/**
 * Copyright 2011 Nikolche Mihajlovski
 *
 * This file is part of JAnnocessor.
 *
 * JAnnocessor is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * JAnnocessor is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with JAnnocessor.  If not, see .
 */

package org.jannocessor.model.util;

import java.io.Serializable;
import java.util.Iterator;

import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.NotImplementedException;
import org.apache.commons.lang.SerializationUtils;
import org.jannocessor.collection.api.PowerList;
import org.jannocessor.model.CodeNode;
import org.jannocessor.model.JavaElement;
import org.jannocessor.model.executable.JavaConstructor;
import org.jannocessor.model.modifier.value.ConstructorModifierValue;
import org.jannocessor.model.structure.AbstractJavaClass;
import org.jannocessor.model.structure.AbstractJavaEnum;
import org.jannocessor.model.type.JavaDeclaredType;
import org.jannocessor.model.type.JavaType;

public class ModelUtils {

	public static  PowerList parentedList(PowerList list,
			final JavaElement parent) {
		ParentedListOperationListener operationListener = new ParentedListOperationListener(
				parent);
		list.addCollectionOperationListener(operationListener);
		for (T item : list) {
			operationListener.itemAdded(new ParentedListEvent(list, item));
		}
		return list;
	}

	public static  PowerList parentedList(PowerList list, JavaType type) {
		return list;
	}

	public static String getCanonicalName(JavaType type) {
		String arguments = "";
		if (type instanceof JavaDeclaredType) {
			JavaDeclaredType declaredType = (JavaDeclaredType) type;
			PowerList typeArgs = declaredType.getTypeArguments();

			if (!typeArgs.isEmpty()) {
				arguments = "<";

				for (Iterator it = typeArgs.iterator(); it.hasNext();) {
					JavaType typeArg = it.next();
					arguments += typeArg.getCanonicalName();
					if (it.hasNext()) {
						arguments += ", ";
					}
				}

				arguments += ">";
			}
		}

		String prefix = (type.getPackageName() != null) ? type.getPackageName()
				+ "." : "";

		return prefix + type.getSimpleName() + arguments;
	}

	@SuppressWarnings("unchecked")
	public static  T copy(T model) {
		T clone = (T) SerializationUtils.clone(model);

		if (!model.equals(clone) || !clone.equals(model)) {
			throw new IllegalStateException("Couldn't create a correct copy!");
		}

		return clone;
	}

	public static Boolean isDefault(JavaConstructor constructor) {
		ConstructorModifierValue[] modifiers = constructor.getModifiers()
				.getValues();
		boolean isPublic = ArrayUtils.contains(modifiers,
				ConstructorModifierValue.PUBLIC);

		boolean isAlone = false;
		CodeNode parent = constructor.getParent();
		if (parent != null) {
			if (parent instanceof AbstractJavaClass) {
				AbstractJavaClass classs = (AbstractJavaClass) parent;
				isAlone = (classs.getConstructors().size() == 1);
			} else if (parent instanceof AbstractJavaEnum) {
				AbstractJavaEnum enumm = (AbstractJavaEnum) parent;
				isAlone = (enumm.getConstructors().size() == 1);
			}
		}

		return isPublic && isAlone && constructor.getParameters().isEmpty()
				&& constructor.getThrownTypes().isEmpty();
	}

	public static PowerList getChildren(CodeNode codeNode) {
		throw new NotImplementedException("This method will be implemented soon!");
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy