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

org.aspectj.bridge.context.PinpointingMessageHandler 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) 2005 Contributors.
 * 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:
 *   Adrian Colyer			Initial implementation
 * ******************************************************************/
package org.aspectj.bridge.context;

import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.List;

import org.aspectj.bridge.AbortException;
import org.aspectj.bridge.IMessage;
import org.aspectj.bridge.IMessageHandler;
import org.aspectj.bridge.ISourceLocation;
import org.aspectj.bridge.IMessage.Kind;

/**
 * @author colyer
 * Facade for an IMessageHandler
 * Extends message with details of exactly what the compiler / weaver was doing at the
 * time. Use the -Xdev:Pinpoint option to turn this facility on.
 */
public class PinpointingMessageHandler implements IMessageHandler {

	private IMessageHandler delegate;

	public PinpointingMessageHandler(IMessageHandler delegate) {
		this.delegate = delegate;
	}

	/* (non-Javadoc)
	 * @see org.aspectj.bridge.IMessageHandler#handleMessage(org.aspectj.bridge.IMessage)
	 */
	public boolean handleMessage(IMessage message) throws AbortException {
		if (!isIgnoring(message.getKind())) {
			MessageIssued ex = new MessageIssued();
			ex.fillInStackTrace();
			StringWriter sw = new StringWriter();
			ex.printStackTrace(new PrintWriter(sw));
			StringBuilder sb = new StringBuilder();
			sb.append(CompilationAndWeavingContext.getCurrentContext());
			sb.append(sw.toString());
			IMessage pinpointedMessage = new PinpointedMessage(message,sb.toString());
			return delegate.handleMessage(pinpointedMessage);
		} else {
			return delegate.handleMessage(message);
		}
	}

	/* (non-Javadoc)
	 * @see org.aspectj.bridge.IMessageHandler#isIgnoring(org.aspectj.bridge.IMessage.Kind)
	 */
	public boolean isIgnoring(Kind kind) {
		return delegate.isIgnoring(kind);
	}

	/* (non-Javadoc)
	 * @see org.aspectj.bridge.IMessageHandler#dontIgnore(org.aspectj.bridge.IMessage.Kind)
	 */
	public void dontIgnore(Kind kind) {
		delegate.dontIgnore(kind);
	}


	/* (non-Javadoc)
	 * @see org.aspectj.bridge.IMessageHandler#ignore(org.aspectj.bridge.IMessage.Kind)
	 */
	public void ignore(Kind kind) {
		delegate.ignore(kind);
	}

	private static class PinpointedMessage implements IMessage {

		private IMessage delegate;
		private String message;

		public PinpointedMessage(IMessage delegate, String pinpoint) {
			this.delegate = delegate;
			this.message = delegate.getMessage() + "\n" + pinpoint;
		}

		public String getMessage() { return this.message; }
		public Kind getKind() { return delegate.getKind();}
		public boolean isError() { return delegate.isError(); }
		public boolean isWarning() { return delegate.isWarning();}
		public boolean isDebug() { return delegate.isDebug();}
		public boolean isUsage() { return delegate.isUsage();}
		public boolean isInfo() { return delegate.isInfo();}
		public boolean isAbort() { return delegate.isAbort();}
		public boolean isTaskTag() { return delegate.isTaskTag();}
		public boolean isFailed() { return delegate.isFailed();}
		public boolean getDeclared() { return delegate.getDeclared(); }
		public int getID() { return delegate.getID();}
		public int getSourceStart() { return delegate.getSourceStart();}
		public int getSourceEnd() { return delegate.getSourceEnd();}
		public Throwable getThrown() { return delegate.getThrown();}
		public ISourceLocation getSourceLocation() { return delegate.getSourceLocation();}
		public String getDetails() { return delegate.getDetails();}
		public List getExtraSourceLocations() { return delegate.getExtraSourceLocations();}
	}

	private static class MessageIssued extends RuntimeException {
		private static final long serialVersionUID = 1L;

		public String getMessage() {
			return "message issued...";
		}
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy