Search code examples
eclipseeclipse-jdt

When writing Eclipse plugins, what is the correct way for checking if an IEditorPart is a Java editor?


I am writing Eclipse plugins for Java, and have the following problem:

Given an IEditorPart, I need to check if it is a java editor.

I could do (IEditor instanceof JavaEditor), but JavaEditor is an org.eclipse.jdt.internal.ui.javaeditor.JavaEditor, which falls under the JDT's "internal" classes.

Is there a smarter and safer way to do this? I'm not sure why there is no non-internal interface for this.


Solution

  • You should test the id of the IEditorPart:

    private boolean isJavaEditor(IWorkbenchPartReference ref) {
        if (ref == null) {
            return false; }
    
        String JavaDoc id= ref.getId();
        return JavaUI.ID_CF_EDITOR.equals(id) || JavaUI.ID_CU_EDITOR.equals(id);
    }
    

    Testing the instance was only needed in eclipse3.1.

    alt text http://blogs.zdnet.com/images/Burnette_DSCN0599.JPG

    JavaUI is the main access point to the Java user interface components. It allows you to programmatically open editors on Java elements, open a Java or Java Browsing perspective, and open package and type prompter dialogs.

    JavaUI is the central access point for the Java UI plug-in (id "org.eclipse.jdt.ui")

    You can see that kind of utility function ("isJavaEditor()") used for instance in ASTProvider.

    The mechanism of identification here is indeed simple String comparison.

    Anyway, you are wise to avoid cast comparison with internal class: it has been listed as one of the 10 common errors in plugins development ;) .