diff --git a/openide.text/src/org/openide/text/CloneableEditorSupport.java b/openide.text/src/org/openide/text/CloneableEditorSupport.java --- a/openide.text/src/org/openide/text/CloneableEditorSupport.java +++ b/openide.text/src/org/openide/text/CloneableEditorSupport.java @@ -94,6 +94,7 @@ import javax.swing.undo.UndoableEdit; import org.netbeans.api.editor.mimelookup.MimeLookup; import org.netbeans.api.editor.mimelookup.MimePath; +import org.openide.text.CloneableEditorSupportRedirector.RequestType; import org.openide.util.Exceptions; import org.openide.util.Mutex; import org.openide.util.Parameters; @@ -375,7 +376,7 @@ * @return the manager */ protected final synchronized UndoRedo.Manager getUndoRedo() { - CloneableEditorSupport redirect = CloneableEditorSupportRedirector.findRedirect(this); + CloneableEditorSupport redirect = CloneableEditorSupportRedirector.findRedirect(this, RequestType.GET_UNDO_REDO); if (redirect != null) { return redirect.getUndoRedo(); } @@ -490,7 +491,7 @@ * @see #prepareDocument */ @Override public void open() { - CloneableEditorSupport redirect = CloneableEditorSupportRedirector.findRedirect(this); + CloneableEditorSupport redirect = CloneableEditorSupportRedirector.findRedirect(this, RequestType.OPEN); if (redirect != null) { redirect.open(); return; @@ -604,7 +605,7 @@ * @return task for control over loading */ public Task prepareDocument() { - CloneableEditorSupport redirect = CloneableEditorSupportRedirector.findRedirect(this); + CloneableEditorSupport redirect = CloneableEditorSupportRedirector.findRedirect(this, RequestType.PREPARE_DOCUMENT); if (redirect != null) { return redirect.prepareDocument(); } @@ -860,7 +861,7 @@ * @exception IOException if the document could not be loaded */ public StyledDocument openDocument() throws IOException { - CloneableEditorSupport redirect = CloneableEditorSupportRedirector.findRedirect(this); + CloneableEditorSupport redirect = CloneableEditorSupportRedirector.findRedirect(this, RequestType.OPEN_DOCUMENT); if (redirect != null) { return redirect.openDocument(); } @@ -960,7 +961,7 @@ * @return document or null if it is not yet loaded */ public StyledDocument getDocument() { - CloneableEditorSupport redirect = CloneableEditorSupportRedirector.findRedirect(this); + CloneableEditorSupport redirect = CloneableEditorSupportRedirector.findRedirect(this, RequestType.GET_DOCUMENT); if (redirect != null) { return redirect.getDocument(); } @@ -1011,7 +1012,7 @@ * otherwise false */ public boolean isModified() { - CloneableEditorSupport redirect = CloneableEditorSupportRedirector.findRedirect(this); + CloneableEditorSupport redirect = CloneableEditorSupportRedirector.findRedirect(this, RequestType.IS_MODIFIED); if (redirect != null) { return redirect.isModified(); } @@ -1023,7 +1024,7 @@ * @exception IOException on I/O error */ public void saveDocument() throws IOException { - CloneableEditorSupport redirect = CloneableEditorSupportRedirector.findRedirect(this); + CloneableEditorSupport redirect = CloneableEditorSupportRedirector.findRedirect(this, RequestType.SAVE_DOCUMENT); final boolean log = ERR.isLoggable(Level.FINE); if (log) { ERR.fine(documentID() + ": saveDocument() started."); // NOI18N @@ -1228,7 +1229,7 @@ // expected in AWT only assert SwingUtilities.isEventDispatchThread() : "CloneableEditorSupport.getOpenedPanes() must be called from AWT thread only"; // NOI18N - CloneableEditorSupport redirect = CloneableEditorSupportRedirector.findRedirect(this); + CloneableEditorSupport redirect = CloneableEditorSupportRedirector.findRedirect(this, RequestType.GET_OPENED_PANES); if (redirect != null) { return redirect.getOpenedPanes(); } @@ -1281,7 +1282,7 @@ // expected in AWT only assert SwingUtilities.isEventDispatchThread() : "CloneableEditorSupport.getRecentPane must be called from AWT thread only"; // NOI18N - CloneableEditorSupport redirect = CloneableEditorSupportRedirector.findRedirect(this); + CloneableEditorSupport redirect = CloneableEditorSupportRedirector.findRedirect(this, RequestType.GET_RECENT_PANE); if (redirect != null) { return redirect.getRecentPane(); } @@ -1345,7 +1346,7 @@ * @return positions of all paragraphs on last save */ public Line.Set getLineSet() { - CloneableEditorSupport redirect = CloneableEditorSupportRedirector.findRedirect(this); + CloneableEditorSupport redirect = CloneableEditorSupportRedirector.findRedirect(this, RequestType.GET_LINE_SET); if (redirect != null) { return redirect.getLineSet(); } @@ -1374,7 +1375,7 @@ /** A printing implementation suitable for {@link org.openide.cookies.PrintCookie}. */ public void print() { - CloneableEditorSupport redirect = CloneableEditorSupportRedirector.findRedirect(this); + CloneableEditorSupport redirect = CloneableEditorSupportRedirector.findRedirect(this, RequestType.PRINT); if (redirect != null) { redirect.print(); return; @@ -1603,7 +1604,7 @@ * @return true if document is loaded */ public boolean isDocumentLoaded() { - CloneableEditorSupport redirect = CloneableEditorSupportRedirector.findRedirect(this); + CloneableEditorSupport redirect = CloneableEditorSupportRedirector.findRedirect(this, RequestType.IS_DOCUMENT_LOADED); if (redirect != null) { return redirect.isDocumentLoaded(); } @@ -1614,7 +1615,7 @@ * @return true if document is ready */ boolean isDocumentReady() { - CloneableEditorSupport redirect = CloneableEditorSupportRedirector.findRedirect(this); + CloneableEditorSupport redirect = CloneableEditorSupportRedirector.findRedirect(this, RequestType.IS_DOCUMENT_READY); if (redirect != null) { return redirect.isDocumentReady(); } @@ -1626,7 +1627,7 @@ * @param s the new MIME type */ public void setMIMEType(String s) { - CloneableEditorSupport redirect = CloneableEditorSupportRedirector.findRedirect(this, true); + CloneableEditorSupport redirect = CloneableEditorSupportRedirector.findRedirect(this, RequestType.SET_MIME_TYPE, true); if (redirect != null) { redirect.setMIMEType(s); return; @@ -1728,7 +1729,7 @@ * @since 4.7 */ public InputStream getInputStream() throws IOException { - CloneableEditorSupport redirect = CloneableEditorSupportRedirector.findRedirect(this); + CloneableEditorSupport redirect = CloneableEditorSupportRedirector.findRedirect(this, RequestType.GET_INPUT_STREAM); if (redirect != null) { return redirect.getInputStream(); } @@ -2232,7 +2233,7 @@ */ @Override protected boolean close(boolean ask) { - CloneableEditorSupport redirect = CloneableEditorSupportRedirector.findRedirect(this); + CloneableEditorSupport redirect = CloneableEditorSupportRedirector.findRedirect(this, RequestType.CLOSE); if (redirect != null) { return redirect.close(ask); } @@ -2602,7 +2603,7 @@ * @return always non-null editor */ private final Pane openAtImpl(final PositionRef pos, final int column, boolean reuse) { - CloneableEditorSupport redirect = CloneableEditorSupportRedirector.findRedirect(this); + CloneableEditorSupport redirect = CloneableEditorSupportRedirector.findRedirect(this, RequestType.OPEN_AT); if (redirect != null) { return redirect.openAtImpl(pos, column, reuse); } diff --git a/openide.text/src/org/openide/text/CloneableEditorSupportRedirector.java b/openide.text/src/org/openide/text/CloneableEditorSupportRedirector.java --- a/openide.text/src/org/openide/text/CloneableEditorSupportRedirector.java +++ b/openide.text/src/org/openide/text/CloneableEditorSupportRedirector.java @@ -31,6 +31,7 @@ */ package org.openide.text; +import java.util.EnumSet; import java.util.IdentityHashMap; import java.util.Map; import org.openide.util.Lookup; @@ -48,6 +49,15 @@ */ public abstract class CloneableEditorSupportRedirector { private static final ThreadLocal> CHECKED = new ThreadLocal>(); + private final EnumSet eventTypes; + + public CloneableEditorSupportRedirector() { + this(EnumSet.allOf(RequestType.class)); + } + + protected CloneableEditorSupportRedirector(EnumSet forEvents) { + this.eventTypes = forEvents.clone(); + } /** Find a delegate for given {@link CloneableEditorSupport}'s {@link Lookup}. * The common code can be to extract for example a @@ -60,10 +70,11 @@ */ protected abstract CloneableEditorSupport redirect(Lookup env); - static CloneableEditorSupport findRedirect(CloneableEditorSupport one) { - return findRedirect(one, false); + static CloneableEditorSupport findRedirect(CloneableEditorSupport one, RequestType rtype) { + return findRedirect(one, rtype, false); } - static CloneableEditorSupport findRedirect(CloneableEditorSupport one, boolean check) { + + static CloneableEditorSupport findRedirect(CloneableEditorSupport one, RequestType rtype, boolean check) { Map all = CHECKED.get(); if (all == null) { all = new IdentityHashMap(); @@ -76,9 +87,11 @@ } all.put(lkp, one); for (CloneableEditorSupportRedirector r : Lookup.getDefault().lookupAll(CloneableEditorSupportRedirector.class)) { - CloneableEditorSupport ces = r.redirect(lkp); - if (ces != null && ces != one) { - return ces; + if (r.eventTypes.contains(rtype)) { + CloneableEditorSupport ces = r.redirect(lkp); + if (ces != null && ces != one) { + return ces; + } } } return null; @@ -86,6 +99,25 @@ all.remove(lkp); } } + + public enum RequestType { + + CLOSE, + GET_DOCUMENT, + GET_INPUT_STREAM, + GET_LINE_SET, + GET_OPENED_PANES, + GET_RECENT_PANE, + GET_UNDO_REDO, + IS_DOCUMENT_LOADED, + IS_DOCUMENT_READY, + IS_MODIFIED, + OPEN, + OPEN_AT, + OPEN_DOCUMENT, + PREPARE_DOCUMENT, + PRINT, + SAVE_DOCUMENT, + SET_MIME_TYPE, + } } - -