blob: 2abc445cf4808b1b4c5dddd6f42d444145fb05a3 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 2014 BEA Systems, Inc. and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* wharley - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.internal.apt.pluggable.core;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Hashtable;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Plugin;
import org.eclipse.core.runtime.Status;
import org.eclipse.osgi.service.debug.DebugOptions;
import org.eclipse.osgi.service.debug.DebugOptionsListener;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceRegistration;
/**
* The plug-in responsible for dispatch of Java 6 (JSR269 Pluggable Annotation
* Processing API) annotation processors in the IDE.
* This is named Apt6Plugin to distinguish it from AptPlugin, which is responsible
* for Java 5 (com.sun.mirror) processors.
*/
public class Apt6Plugin extends Plugin implements DebugOptionsListener {
private static final SimpleDateFormat TRACE_DATE_FORMAT = new SimpleDateFormat("HH:mm:ss.SSS"); //$NON-NLS-1$
public static final String PLUGIN_ID = "org.eclipse.jdt.apt.pluggable.core"; //$NON-NLS-1$
/**
* Status IDs for system log entries. Must be unique per plugin.
*/
public static final int STATUS_EXCEPTION = 1;
// Tracing options
public static boolean DEBUG = false;
public final static String APT_DEBUG_OPTION = Apt6Plugin.PLUGIN_ID + "/debug"; //$NON-NLS-1$
private static Apt6Plugin thePlugin = null; // singleton object
private ServiceRegistration<DebugOptionsListener> debugRegistration;
public Apt6Plugin() {
}
@Override
public void start(BundleContext context) throws Exception {
super.start(context);
thePlugin = this;
// register debug options listener
Hashtable<String, String> properties = new Hashtable<String, String>(2);
properties.put(DebugOptions.LISTENER_SYMBOLICNAME, PLUGIN_ID);
debugRegistration = context.registerService(DebugOptionsListener.class, this, properties);
}
public void stop(BundleContext context) throws Exception {
super.stop(context);
// unregister debug options listener
debugRegistration.unregister();
debugRegistration = null;
}
public void optionsChanged(DebugOptions options) {
DEBUG = options.getBooleanOption(APT_DEBUG_OPTION, false);
}
public static Apt6Plugin getPlugin() {
return thePlugin;
}
/**
* Log a status message to the platform log. Use this for reporting exceptions.
* @param status
*/
public static void log(IStatus status) {
thePlugin.getLog().log(status);
}
/**
* Convenience wrapper around log(IStatus), to log an exception
* with severity of ERROR.
*/
public static void log(Throwable e, String message) {
log(new Status(IStatus.ERROR, PLUGIN_ID, STATUS_EXCEPTION, message, e));
}
/**
* Convenience wrapper around log(IStatus), to log an exception
* with severity of WARNING.
*/
public static void logWarning(Throwable e, String message) {
log(createWarningStatus(e, message));
}
/**
* Convenience wrapper for rethrowing exceptions as CoreExceptions,
* with severity of ERROR.
*/
public static Status createStatus(Throwable e, String message) {
return new Status(IStatus.ERROR, PLUGIN_ID, STATUS_EXCEPTION, message, e);
}
/**
* Convenience wrapper for rethrowing exceptions as CoreExceptions,
* with severity of WARNING.
*/
public static Status createWarningStatus(Throwable e, String message) {
return new Status(IStatus.WARNING, PLUGIN_ID, STATUS_EXCEPTION, message, e);
}
/**
* Convenience wrapper for rethrowing exceptions as CoreExceptions,
* with severity of INFO.
*/
public static Status createInfoStatus(Throwable e, String message) {
return new Status(IStatus.INFO, PLUGIN_ID, STATUS_EXCEPTION, message, e);
}
public static void trace(final String msg) {
if (DEBUG) {
StringBuffer sb = new StringBuffer();
sb.append('[');
// SimpleDateFormat is not thread-safe, according to javadoc
synchronized (TRACE_DATE_FORMAT) {
sb.append(TRACE_DATE_FORMAT.format(new Date()));
}
sb.append('-');
// Some threads have qualified type names; too long.
String threadName = Thread.currentThread().getName();
int dot = threadName.lastIndexOf('.');
if (dot < 0) {
sb.append(threadName);
} else {
sb.append(threadName.substring(dot + 1));
}
sb.append(']');
sb.append(msg);
System.out.println(sb);
}
}
}