view src/de/codedo/java/editor/CodedoJavaEditor.java @ 9:935df68696c0 default tip

Reflection Code in eigene Klasse verschoben.
author Dirk Olmes <dirk.olmes@codedo.de>
date Thu, 15 Oct 2020 12:05:06 +0200
parents 778c251baa66
children
line wrap: on
line source

package de.codedo.java.editor;

import static de.codedo.java.editor.ReflectionUtils.getFieldValue;
import static de.codedo.java.editor.ReflectionUtils.setFieldValue;

import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor;
import org.eclipse.jdt.internal.ui.javaeditor.JavaEditorErrorTickUpdater;
import org.eclipse.jdt.internal.ui.viewsupport.JavaUILabelProvider;
import org.eclipse.swt.graphics.Image;
import org.eclipse.ui.IEditorInput;

public class CodedoJavaEditor extends CompilationUnitEditor 
{
	public CodedoJavaEditor() 
	{
		super();
		installJavaElementImageProvider();
	}

	private void installJavaElementImageProvider()
	{
		try
		{
			JavaEditorErrorTickUpdater tickUpdater = getFieldValue("fJavaEditorErrorTickUpdater", this);
			JavaUILabelProvider labelProvider = getFieldValue("fLabelProvider", tickUpdater);

			CodedoJavaElementImageProvider imageProvider = Activator.getDefault().getJavaElementImageProvider();
			setFieldValue(labelProvider, "fImageLabelProvider", imageProvider);
		}
		catch (ReflectiveOperationException e) 
		{
			throw new RuntimeException(e);
		}
	}

	public void toggleTitleImage()
	{
		IJavaElement javaElement = getJavaElement();

		CodedoJavaElementImageProvider imageProvider = Activator.getDefault().getJavaElementImageProvider();
		Image newTitleImage =  imageProvider.toggleTitleImage(javaElement);
		setTitleImage(newTitleImage);
	}

	@Override
	public void dispose()
	{
		CodedoJavaElementImageProvider imageProvider = Activator.getDefault().getJavaElementImageProvider();

		IJavaElement javaElement = getJavaElement();
		imageProvider.resetTitleImage(javaElement);
		
		super.dispose();
	}
	
	private IJavaElement getJavaElement()
	{
		IEditorInput input = getEditorInput();
		
		// this class is registered as Java editor so we should always have a java element here
		return (IJavaElement)input.getAdapter(IJavaElement.class);
	}
}