// Path: src/eclipse/spellchecker/Activator.java
// public class Activator extends AbstractUIPlugin {
// 
// 	public static final String ID_PLUGIN = "eclipse.spellchecker";
// 	private static Activator plugin; // The shared instance.
// 
// 	/**
// 	 * The constructor.
// 	 */
// 	public Activator() {
// 		super();
// 		plugin = this;
// 	}
// 
// 	@Override
// 	public void start(BundleContext context) throws Exception {
// 		super.start(context);
// 	}
// 
// 	/**
// 	 * This is called when the plugin is being stopped.
// 	 *
// 	 * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
// 	 */
// 	@Override
// 	public void stop(BundleContext context) throws Exception {
// 		try {
// 			if (fDialogsFormToolkit != null) {
// 				fDialogsFormToolkit.dispose();
// 				fDialogsFormToolkit = null;
// 			}
// 
// 		} finally {
// 			super.stop(context);
// 		}
// 	}
// 
// 	public static Activator getDefault() {
// 		return plugin;
// 	}
// 
// 	public static void logErrorMessage(String message) {
// 		IStatus s = new Status(IStatus.ERROR, ID_PLUGIN, message);
// 		plugin.getLog().log(s);
// 	}
// 
// 	public static IWorkbenchWindow getActiveWorkbenchWindow() {
// 		return getDefault().getWorkbench().getActiveWorkbenchWindow();
// 	}
// 
// 	public static Shell getActiveWorkbenchShell() {
// 		IWorkbenchWindow window = getActiveWorkbenchWindow();
// 		if (window != null) {
// 			return window.getShell();
// 		}
// 		return null;
// 	}
// 
// 	public static void log(Exception ex) {
// 		IStatus s = new Status(IStatus.ERROR, ID_PLUGIN, ex.getMessage(), ex);
// 		plugin.getLog().log(s);
// 	}
// 
// 	public static void log(IStatus status) {
// 		plugin.getLog().log(status);
// 	}
// 
// 	private FormToolkit fDialogsFormToolkit;
// 
// 	public FormToolkit getDialogsFormToolkit() {
// 		if (fDialogsFormToolkit == null) {
// 			FormColors colors = new FormColors(Display.getCurrent());
// 			colors.setBackground(null);
// 			colors.setForeground(null);
// 			fDialogsFormToolkit = new FormToolkit(colors);
// 		}
// 		return fDialogsFormToolkit;
// 	}
// 
// 	public static IWorkspace getWorkspace() {
// 		return ResourcesPlugin.getWorkspace();
// 	}
// 
// }


import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;
import java.nio.ByteBuffer;
import java.nio.charset.Charset;
import eclipse.spellchecker.Activator;
	/*
	 * @see eclipse.spellchecker.engine.ISpellDictionary#addWord(java.lang.String)
	 */
	@Override
	public void addWord(final String word) {
		if (isCorrect(word))
			return;

		FileOutputStream fileStream= null;
		try {
			Charset charset= Charset.forName(getEncoding());
			ByteBuffer byteBuffer= charset.encode(word + "\n"); //$NON-NLS-1$
			int size= byteBuffer.limit();
			final byte[] byteArray;
			if (byteBuffer.hasArray())
				byteArray= byteBuffer.array();
			else {
				byteArray= new byte[size];
				byteBuffer.get(byteArray);
			}

			fileStream= new FileOutputStream(fLocation.getPath(), true);

			// Encoding UTF-16 charset writes a BOM. In which case we need to cut it away if the file isn't empty
			int bomCutSize= 0;
			if (!isEmpty() && "UTF-16".equals(charset.name())) //$NON-NLS-1$
				bomCutSize= 2;

			fileStream.write(byteArray, bomCutSize, size - bomCutSize);
		} catch (IOException exception) {
// Path: src/eclipse/spellchecker/Activator.java
// public class Activator extends AbstractUIPlugin {
// 
// 	public static final String ID_PLUGIN = "eclipse.spellchecker";
// 	private static Activator plugin; // The shared instance.
// 
// 	/**
// 	 * The constructor.
// 	 */
// 	public Activator() {
// 		super();
// 		plugin = this;
// 	}
// 
// 	@Override
// 	public void start(BundleContext context) throws Exception {
// 		super.start(context);
// 	}
// 
// 	/**
// 	 * This is called when the plugin is being stopped.
// 	 *
// 	 * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
// 	 */
// 	@Override
// 	public void stop(BundleContext context) throws Exception {
// 		try {
// 			if (fDialogsFormToolkit != null) {
// 				fDialogsFormToolkit.dispose();
// 				fDialogsFormToolkit = null;
// 			}
// 
// 		} finally {
// 			super.stop(context);
// 		}
// 	}
// 
// 	public static Activator getDefault() {
// 		return plugin;
// 	}
// 
// 	public static void logErrorMessage(String message) {
// 		IStatus s = new Status(IStatus.ERROR, ID_PLUGIN, message);
// 		plugin.getLog().log(s);
// 	}
// 
// 	public static IWorkbenchWindow getActiveWorkbenchWindow() {
// 		return getDefault().getWorkbench().getActiveWorkbenchWindow();
// 	}
// 
// 	public static Shell getActiveWorkbenchShell() {
// 		IWorkbenchWindow window = getActiveWorkbenchWindow();
// 		if (window != null) {
// 			return window.getShell();
// 		}
// 		return null;
// 	}
// 
// 	public static void log(Exception ex) {
// 		IStatus s = new Status(IStatus.ERROR, ID_PLUGIN, ex.getMessage(), ex);
// 		plugin.getLog().log(s);
// 	}
// 
// 	public static void log(IStatus status) {
// 		plugin.getLog().log(status);
// 	}
// 
// 	private FormToolkit fDialogsFormToolkit;
// 
// 	public FormToolkit getDialogsFormToolkit() {
// 		if (fDialogsFormToolkit == null) {
// 			FormColors colors = new FormColors(Display.getCurrent());
// 			colors.setBackground(null);
// 			colors.setForeground(null);
// 			fDialogsFormToolkit = new FormToolkit(colors);
// 		}
// 		return fDialogsFormToolkit;
// 	}
// 
// 	public static IWorkspace getWorkspace() {
// 		return ResourcesPlugin.getWorkspace();
// 	}
// 
// }


// Path: src/eclipse/spellchecker/engine/PersistentSpellDictionary.java
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;
import java.nio.ByteBuffer;
import java.nio.charset.Charset;
import eclipse.spellchecker.Activator;

	/*
	 * @see eclipse.spellchecker.engine.ISpellDictionary#addWord(java.lang.String)
	 */
	@Override
	public void addWord(final String word) {
		if (isCorrect(word))
			return;

		FileOutputStream fileStream= null;
		try {
			Charset charset= Charset.forName(getEncoding());
			ByteBuffer byteBuffer= charset.encode(word + "\n"); //$NON-NLS-1$
			int size= byteBuffer.limit();
			final byte[] byteArray;
			if (byteBuffer.hasArray())
				byteArray= byteBuffer.array();
			else {
				byteArray= new byte[size];
				byteBuffer.get(byteArray);
			}

			fileStream= new FileOutputStream(fLocation.getPath(), true);

			// Encoding UTF-16 charset writes a BOM. In which case we need to cut it away if the file isn't empty
			int bomCutSize= 0;
			if (!isEmpty() && "UTF-16".equals(charset.name())) //$NON-NLS-1$
				bomCutSize= 2;

			fileStream.write(byteArray, bomCutSize, size - bomCutSize);
		} catch (IOException exception) {
			Activator.log(exception);