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

org.aspectj.ajde.ui.BuildConfigNode Maven / Gradle / Ivy

Go to download

AspectJ tools most notably contains the AspectJ compiler (AJC). AJC applies aspects to Java classes during compilation, fully replacing Javac for plain Java classes and also compiling native AspectJ or annotation-based @AspectJ syntax. Furthermore, AJC can weave aspects into existing class files in a post-compile binary weaving step. This library is a superset of AspectJ weaver and hence also of AspectJ runtime.

There is a newer version: 1.9.22.1
Show newest version
/* *******************************************************************
 * Copyright (c) 1999-2001 Xerox Corporation,
 *               2002 Palo Alto Research Center, Incorporated (PARC).
 * All rights reserved.
 * This program and the accompanying materials are made available
 * under the terms of the Eclipse Public License v 2.0
 * which accompanies this distribution and is available at
 * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt
 *
 * Contributors:
 *     Xerox/PARC     initial implementation
 * ******************************************************************/

package org.aspectj.ajde.ui;

import java.io.ObjectStreamException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import org.aspectj.bridge.IMessage;
import org.aspectj.bridge.ISourceLocation;
import org.aspectj.util.FileUtil;

/**
 * @author Mik Kersten
 *
 *         TODO: clean-up after merging of org.aspectj.asm.StructureNode
 */
public class BuildConfigNode {

	protected BuildConfigNode parent = null;
	protected String name = "";
	protected Kind kind;
	// children.listIterator() should support remove() operation
	protected List children = new ArrayList<>();
	protected IMessage message = null;
	protected ISourceLocation sourceLocation = null;

	/**
	 * Used during serialization.
	 */
	public BuildConfigNode() {
	}

	// public BuildConfigNode(String name, String kind, String resourcePath, List children) {
	// this(name, kind, children);
	// this.resourcePath = resourcePath;
	// }

	public BuildConfigNode(String name, Kind kind, String resourcePath) {
		this(name, kind);
		this.kind = kind;
		this.resourcePath = resourcePath;
	}

	// public BuildConfigNode(String name, Kind kind, List children) {
	// this.name = name;
	// this.kind = kind;
	// if (children != null) {
	// this.children = children;
	// }
	// setParents();
	// }

	public BuildConfigNode(String name, Kind kind) {
		this.name = name;
		this.kind = kind;
	}

	public String toString() {
		return name;
	}

	public List getChildren() {
		return children;
	}

	public void addChild(BuildConfigNode child) {
		if (children == null) {
			children = new ArrayList<>();
		}
		children.add(child);
		child.setParent(this);
	}

	public void addChild(int position, BuildConfigNode child) {
		if (children == null) {
			children = new ArrayList<>();
		}
		children.add(position, child);
		child.setParent(this);
	}

	public boolean removeChild(BuildConfigNode child) {
		child.setParent(null);
		return children.remove(child);
	}

	/**
	 * Comparison is string-name based only.
	 */
	public int compareTo(Object o) throws ClassCastException {
		if (o instanceof BuildConfigNode) {
			BuildConfigNode sn = (BuildConfigNode) o;
			return this.getName().compareTo(sn.getName());
		}
		return -1;
	}

	public String getName() {
		return name;
	}

	public ISourceLocation getSourceLocation() {
		return sourceLocation;
	}

	public void setSourceLocation(ISourceLocation sourceLocation) {
		this.sourceLocation = sourceLocation;
	}

	public IMessage getMessage() {
		return message;
	}

	public void setMessage(IMessage message) {
		this.message = message;
	}

	public BuildConfigNode getParent() {
		return parent;
	}

	public void setParent(BuildConfigNode parent) {
		this.parent = parent;
	}

	// private void setParents() {
	// if (children == null) return;
	// for (Iterator it = children.iterator(); it.hasNext(); ) {
	// ((BuildConfigNode)it.next()).setParent(this);
	// }
	// }

	public void setName(String string) {
		name = string;
	}

	private String resourcePath;
	private boolean isActive = true;

	public String getResourcePath() {
		return resourcePath;
	}

	public void setResourcePath(String resourcePath) {
		this.resourcePath = resourcePath;
	}

	public boolean isValidResource() {
		return FileUtil.hasSourceSuffix(name) || name.endsWith(".lst");
	}

	public boolean isActive() {
		return isActive;
	}

	public void setActive(boolean isActive) {
		this.isActive = isActive;
	}

	/**
	 * Uses "typesafe enum" pattern.
	 */
	public static class Kind implements Serializable {

		private static final long serialVersionUID = 3924996793884978885L;

		public static final Kind FILE_JAVA = new Kind("Java source file");
		public static final Kind FILE_ASPECTJ = new Kind("AspectJ source file");
		public static final Kind FILE_LST = new Kind("build configuration file");
		public static final Kind ERROR = new Kind("error");
		public static final Kind DIRECTORY = new Kind("directory");

		public static final Kind[] ALL = { FILE_JAVA, FILE_ASPECTJ, FILE_LST, DIRECTORY };

		private final String name;

		private Kind(String name) {
			this.name = name;
		}

		public String toString() {
			return name;
		}

		// public boolean equals(Object o) {
		// return (o instanceof Kind? this==o : false);
		// // return o.equals(name);
		// }
		//
		// public int hashCode() {
		// return ordinal;
		// // return name.hashCode();
		// }

		public boolean isDeclareKind() {
			return name.startsWith("declare");
		}

		// The 4 declarations below are necessary for serialization
		private static int nextOrdinal = 0;
		private final int ordinal = nextOrdinal++;

		private Object readResolve() throws ObjectStreamException {
			return ALL[ordinal];
		}
	}

	public Kind getBuildConfigNodeKind() {
		return kind;
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy