This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.

View | Details | Raw Unified | Return to bug 177561
Collapse All | Expand All

(-)a/ant.debugger/src/META-INF/debugger/org.netbeans.spi.debugger.ActionsProvider (-1 lines)
Line 1 Link Here
1
org.netbeans.modules.ant.debugger.breakpoints.AntBreakpointActionProvider
(-)a/ant.debugger/src/org/netbeans/modules/ant/debugger/breakpoints/AntBreakpointActionProvider.java (+2 lines)
Lines 48-53 Link Here
48
import org.netbeans.api.debugger.ActionsManager;
48
import org.netbeans.api.debugger.ActionsManager;
49
import org.netbeans.api.debugger.Breakpoint;
49
import org.netbeans.api.debugger.Breakpoint;
50
import org.netbeans.api.debugger.DebuggerManager;
50
import org.netbeans.api.debugger.DebuggerManager;
51
import org.netbeans.spi.debugger.ActionsProvider.Registration;
51
import org.netbeans.spi.debugger.ActionsProviderSupport;
52
import org.netbeans.spi.debugger.ActionsProviderSupport;
52
import org.netbeans.spi.debugger.ui.EditorContextDispatcher;
53
import org.netbeans.spi.debugger.ui.EditorContextDispatcher;
53
import org.openide.filesystems.FileObject;
54
import org.openide.filesystems.FileObject;
Lines 58-63 Link Here
58
 *
59
 *
59
 * @author  Honza
60
 * @author  Honza
60
 */
61
 */
62
@Registration(actions={"toggleBreakpoint"}, enabledOnMIMETypes={"text/x-ant+xml"})
61
public class AntBreakpointActionProvider extends ActionsProviderSupport
63
public class AntBreakpointActionProvider extends ActionsProviderSupport
62
                                         implements PropertyChangeListener {
64
                                         implements PropertyChangeListener {
63
    
65
    
(-)a/api.debugger/apichanges.xml (+20 lines)
Lines 364-369 Link Here
364
        <issue number="178301"/>
364
        <issue number="178301"/>
365
    </change>
365
    </change>
366
366
367
    <change id="LazyActionRegistration">
368
        <api name="DebuggerCoreAPI"/>
369
        <summary>A declarative mechanism to delay creation of action provider instance until a file with specific MIME type becomes active.</summary>
370
        <version major="1" minor="24"/>
371
        <date day="11" month="2" year="2010"/>
372
        <author login="mentlicher"/>
373
        <compatibility binary="compatible" source="compatible" addition="yes"/>
374
        <description>
375
             <p>
376
             ActionsProvider.Registration annotation is enhanced with two additional
377
             methods getActions() and enabledOnMIMETypes(). Until a file with the
378
             listed MIME type is selected in the IDE, the appropriate actions provider
379
             is left disabled for the given list of actions, without instantiating the
380
             implementation class.
381
             </p>
382
        </description>
383
        <class package="org.netbeans.spi.debugger" name="ActionsProvider" />
384
        <issue number="177561"/>
385
    </change>
386
367
</changes>
387
</changes>
368
388
369
  <!-- Now the surrounding HTML text and document structure: -->
389
  <!-- Now the surrounding HTML text and document structure: -->
(-)a/api.debugger/manifest.mf (-1 / +1 lines)
Lines 1-5 Link Here
1
Manifest-Version: 1.0
1
Manifest-Version: 1.0
2
OpenIDE-Module: org.netbeans.api.debugger/1
2
OpenIDE-Module: org.netbeans.api.debugger/1
3
OpenIDE-Module-Localizing-Bundle: org/netbeans/api/debugger/Bundle.properties
3
OpenIDE-Module-Localizing-Bundle: org/netbeans/api/debugger/Bundle.properties
4
OpenIDE-Module-Specification-Version: 1.22
4
OpenIDE-Module-Specification-Version: 1.23
5
OpenIDE-Module-Layer: org/netbeans/api/debugger/layer.xml
5
OpenIDE-Module-Layer: org/netbeans/api/debugger/layer.xml
(-)a/api.debugger/src/org/netbeans/debugger/registry/ContextAwareServiceHandler.java (+2 lines)
Lines 70-75 Link Here
70
70
71
    public static final String SERVICE_NAME = "serviceName"; // NOI18N
71
    public static final String SERVICE_NAME = "serviceName"; // NOI18N
72
    public static final String SERVICE_CLASSES = "serviceClasses"; // NOI18N
72
    public static final String SERVICE_CLASSES = "serviceClasses"; // NOI18N
73
    public static final String SERVICE_ACTIONS = "debugger_actions"; // NOI18N
74
    public static final String SERVICE_ENABLED_MIMETYPES = "debugger_enabledOnMIMETypes"; // NOI18N
73
75
74
    private String serviceName;
76
    private String serviceName;
75
    private Class[] serviceClasses;
77
    private Class[] serviceClasses;
(-)a/api.debugger/src/org/netbeans/debugger/registry/DebuggerProcessor.java (-7 / +22 lines)
Lines 66-71 Link Here
66
import org.netbeans.spi.debugger.DebuggerEngineProvider;
66
import org.netbeans.spi.debugger.DebuggerEngineProvider;
67
import org.netbeans.spi.debugger.DebuggerServiceRegistration;
67
import org.netbeans.spi.debugger.DebuggerServiceRegistration;
68
import org.netbeans.spi.debugger.SessionProvider;
68
import org.netbeans.spi.debugger.SessionProvider;
69
import org.openide.filesystems.annotations.LayerBuilder.File;
69
import org.openide.filesystems.annotations.LayerGeneratingProcessor;
70
import org.openide.filesystems.annotations.LayerGeneratingProcessor;
70
import org.openide.filesystems.annotations.LayerGenerationException;
71
import org.openide.filesystems.annotations.LayerGenerationException;
71
import org.openide.util.lookup.ServiceProvider;
72
import org.openide.util.lookup.ServiceProvider;
Lines 102-108 Link Here
102
            ActionsProvider.Registration reg = e.getAnnotation(ActionsProvider.Registration.class);
103
            ActionsProvider.Registration reg = e.getAnnotation(ActionsProvider.Registration.class);
103
104
104
            final String path = reg.path();
105
            final String path = reg.path();
105
            handleProviderRegistrationInner(e, ActionsProvider.class, path);
106
            final String[] actions = reg.actions();
107
            final String[] mimeTypes = reg.enabledOnMIMETypes();
108
            handleProviderRegistrationInner(e, ActionsProvider.class, path, actions, mimeTypes);
106
            //layer(e).instanceFile("Debugger/"+path, null, ActionsProvider.class).
109
            //layer(e).instanceFile("Debugger/"+path, null, ActionsProvider.class).
107
            //        stringvalue("serviceName", instantiableClassOrMethod(e)).
110
            //        stringvalue("serviceName", instantiableClassOrMethod(e)).
108
            //        stringvalue("serviceClass", ActionsProvider.class.getName()).
111
            //        stringvalue("serviceClass", ActionsProvider.class.getName()).
Lines 186-191 Link Here
186
    }
189
    }
187
190
188
    private void handleProviderRegistrationInner(Element e, Class providerClass, String path) throws IllegalArgumentException, LayerGenerationException {
191
    private void handleProviderRegistrationInner(Element e, Class providerClass, String path) throws IllegalArgumentException, LayerGenerationException {
192
        handleProviderRegistrationInner(e, providerClass, path, null, null);
193
    }
194
195
    private void handleProviderRegistrationInner(Element e, Class providerClass, String path,
196
                                                 String[] actions, String[] enabledOnMIMETypes
197
                                                 ) throws IllegalArgumentException, LayerGenerationException {
189
        String className = instantiableClassOrMethod(e);
198
        String className = instantiableClassOrMethod(e);
190
        if (!isClassOf(e, providerClass)) {
199
        if (!isClassOf(e, providerClass)) {
191
            throw new IllegalArgumentException("Annotated element "+e+" is not an instance of " + providerClass);
200
            throw new IllegalArgumentException("Annotated element "+e+" is not an instance of " + providerClass);
Lines 195-206 Link Here
195
        } else {
204
        } else {
196
            path = "Debugger";
205
            path = "Debugger";
197
        }
206
        }
198
        layer(e).instanceFile(path, null, providerClass).
207
        File f = layer(e).instanceFile(path, null, providerClass).
199
                stringvalue("serviceName", className).
208
                stringvalue(ContextAwareServiceHandler.SERVICE_NAME, className).
200
                stringvalue("serviceClass", providerClass.getName()).
209
                stringvalue("serviceClass", providerClass.getName());
201
                stringvalue("instanceOf", providerClass.getName()).
210
        if (actions != null && actions.length > 0) {
202
                methodvalue("instanceCreate", providerClass.getName()+"$ContextAware", "createService").
211
            f.stringvalue(ContextAwareServiceHandler.SERVICE_ACTIONS, Arrays.toString(actions));
203
                write();
212
        }
213
        if (enabledOnMIMETypes != null && enabledOnMIMETypes.length > 0) {
214
            f.stringvalue(ContextAwareServiceHandler.SERVICE_ENABLED_MIMETYPES, Arrays.toString(enabledOnMIMETypes));
215
        }
216
        f.stringvalue("instanceOf", providerClass.getName());
217
        f.methodvalue("instanceCreate", providerClass.getName()+"$ContextAware", "createService");
218
        f.write();
204
    }
219
    }
205
220
206
    private boolean isClassOf(Element e, Class providerClass) {
221
    private boolean isClassOf(Element e, Class providerClass) {
(-)a/api.debugger/src/org/netbeans/spi/debugger/ActionsProvider.java (-8 / +261 lines)
Lines 41-54 Link Here
41
41
42
package org.netbeans.spi.debugger;
42
package org.netbeans.spi.debugger;
43
43
44
import java.beans.PropertyChangeEvent;
45
import java.beans.PropertyChangeListener;
44
import java.lang.annotation.ElementType;
46
import java.lang.annotation.ElementType;
45
import java.lang.annotation.Retention;
47
import java.lang.annotation.Retention;
46
import java.lang.annotation.RetentionPolicy;
48
import java.lang.annotation.RetentionPolicy;
47
import java.lang.annotation.Target;
49
import java.lang.annotation.Target;
50
import java.lang.reflect.InvocationTargetException;
51
import java.util.ArrayList;
52
import java.util.Arrays;
53
import java.util.Collections;
54
import java.util.HashSet;
55
import java.util.List;
48
import java.util.Map;
56
import java.util.Map;
49
import java.util.Set;
57
import java.util.Set;
58
50
import org.netbeans.debugger.registry.ContextAwareServiceHandler;
59
import org.netbeans.debugger.registry.ContextAwareServiceHandler;
51
import org.netbeans.spi.debugger.ContextAwareSupport;
60
import org.openide.filesystems.FileObject;
61
import org.openide.util.Exceptions;
62
import org.openide.util.Lookup;
52
import org.openide.util.RequestProcessor;
63
import org.openide.util.RequestProcessor;
53
64
54
/**
65
/**
Lines 134-166 Link Here
134
         */
145
         */
135
        String path() default "";
146
        String path() default "";
136
147
148
        /**
149
         * Provide the list of actions that this provider supports.
150
         * This list is used before an instance of the registered class is created,
151
         * it's necessary when {@link #enabledOnMIMETypes()} is overriden
152
         * to prevent from the class instantiation.
153
         * @return The list of actions.
154
         * @since 1.23
155
         */
156
        String[] actions() default {};
157
158
        /**
159
         * Provide a list of MIME types that are compared to the MIME type of
160
         * a file currently active in the IDE and when matched, this provider
161
         * is activated (an instance of the registered class is created).
162
         * By default, the provider instance is created immediately.
163
         * This method can be used to delay the instantiation of the
164
         * implementation class for performance reasons.
165
         * @return The list of MIME types
166
         * @since 1.23
167
         */
168
        String[] enabledOnMIMETypes() default {};
169
137
    }
170
    }
138
171
139
    static class ContextAware extends ActionsProvider implements ContextAwareService<ActionsProvider> {
172
    static class ContextAware extends ActionsProvider implements ContextAwareService<ActionsProvider> {
173
174
        private static final String ERROR = "error in getting MIMEType";    // NOI18N
140
175
141
        private String serviceName;
176
        private String serviceName;
142
        private ContextProvider context;
177
        private ContextProvider context;
143
        private ActionsProvider delegate;
178
        private ActionsProvider delegate;
144
179
145
        private ContextAware(String serviceName) {
180
        private Set actions;
181
        private Set<String> enabledOnMIMETypes;
182
        private List<ActionsProviderListener> listeners = new ArrayList<ActionsProviderListener>();
183
        private PropertyChangeListener contextDispatcherListener;
184
185
        private ContextAware(String serviceName, Set actions, Set<String> enabledOnMIMETypes) {
146
            this.serviceName = serviceName;
186
            this.serviceName = serviceName;
187
            this.actions = actions;
188
            this.enabledOnMIMETypes = enabledOnMIMETypes;
147
        }
189
        }
148
190
149
        private ContextAware(String serviceName, ContextProvider context) {
191
        private ContextAware(String serviceName, Set actions, Set<String> enabledOnMIMETypes,
192
                             ContextProvider context) {
150
            this.serviceName = serviceName;
193
            this.serviceName = serviceName;
194
            this.actions = actions;
195
            this.enabledOnMIMETypes = enabledOnMIMETypes;
151
            this.context = context;
196
            this.context = context;
152
        }
197
        }
153
198
154
        private synchronized ActionsProvider getDelegate() {
199
        private synchronized ActionsProvider getDelegate() {
155
            if (delegate == null) {
200
            if (delegate == null) {
156
                delegate = (ActionsProvider) ContextAwareSupport.createInstance(serviceName, context);
201
                delegate = (ActionsProvider) ContextAwareSupport.createInstance(serviceName, context);
202
                for (ActionsProviderListener l : listeners) {
203
                    delegate.addActionsProviderListener(l);
204
                }
205
                listeners.clear();
206
                if (contextDispatcherListener != null) {
207
                    detachContextDispatcherListener();
208
                }
157
            }
209
            }
158
            return delegate;
210
            return delegate;
159
        }
211
        }
160
212
161
        @Override
213
        @Override
162
        public Set getActions() {
214
        public Set getActions() {
163
            return getDelegate().getActions();
215
            ActionsProvider actionsDelegate;
216
            if (actions != null) {
217
                synchronized (this) {
218
                    actionsDelegate = this.delegate;
219
                }
220
            } else {
221
                actionsDelegate = getDelegate();
222
            }
223
            if (actionsDelegate == null) {
224
                return actions;
225
            }
226
            return actionsDelegate.getActions();
164
        }
227
        }
165
228
166
        @Override
229
        @Override
Lines 175-198 Link Here
175
238
176
        @Override
239
        @Override
177
        public boolean isEnabled(Object action) {
240
        public boolean isEnabled(Object action) {
241
            ActionsProvider actionsDelegate;
242
            if (enabledOnMIMETypes != null) {
243
                synchronized (this) {
244
                    actionsDelegate = this.delegate;
245
                }
246
            } else {
247
                actionsDelegate = getDelegate();
248
            }
249
            if (actionsDelegate == null) {
250
                String currentMIMEType = getCurrentMIMEType();
251
                if (currentMIMEType != ERROR) {
252
                    if (!enabledOnMIMETypes.contains(currentMIMEType)) {
253
                        return false;
254
                    }
255
                }
256
            }
178
            return getDelegate().isEnabled(action);
257
            return getDelegate().isEnabled(action);
179
        }
258
        }
180
259
181
        @Override
260
        @Override
182
        public void addActionsProviderListener(ActionsProviderListener l) {
261
        public void addActionsProviderListener(ActionsProviderListener l) {
183
            getDelegate().addActionsProviderListener(l);
262
            ActionsProvider actionsDelegate;
263
            synchronized (this) {
264
                actionsDelegate = delegate;
265
                if (actionsDelegate == null) {
266
                    listeners.add(l);
267
                    if (contextDispatcherListener == null && enabledOnMIMETypes != null) {
268
                        contextDispatcherListener = attachContextDispatcherListener();
269
                    }
270
                    return ;
271
                }
272
            }
273
            actionsDelegate.addActionsProviderListener(l);
184
        }
274
        }
185
275
186
        @Override
276
        @Override
187
        public void removeActionsProviderListener(ActionsProviderListener l) {
277
        public void removeActionsProviderListener(ActionsProviderListener l) {
188
            getDelegate().removeActionsProviderListener(l);
278
            ActionsProvider actionsDelegate;
279
            synchronized (this) {
280
                actionsDelegate = delegate;
281
                if (actionsDelegate == null) {
282
                    listeners.remove(l);
283
                    if (listeners.size() == 0 && contextDispatcherListener != null) {
284
                        detachContextDispatcherListener();
285
                    }
286
                    return ;
287
                }
288
            }
289
            actionsDelegate.removeActionsProviderListener(l);
189
        }
290
        }
190
291
191
        public ActionsProvider forContext(ContextProvider context) {
292
        public ActionsProvider forContext(ContextProvider context) {
192
            if (context == this.context) {
293
            if (context == this.context) {
193
                return this;
294
                return this;
194
            } else {
295
            } else {
195
                return new ActionsProvider.ContextAware(serviceName, context);
296
                return new ActionsProvider.ContextAware(serviceName, actions, enabledOnMIMETypes, context);
196
            }
297
            }
197
        }
298
        }
198
299
Lines 205-211 Link Here
205
         */
306
         */
206
        static ContextAwareService createService(Map attrs) throws ClassNotFoundException {
307
        static ContextAwareService createService(Map attrs) throws ClassNotFoundException {
207
            String serviceName = (String) attrs.get(ContextAwareServiceHandler.SERVICE_NAME);
308
            String serviceName = (String) attrs.get(ContextAwareServiceHandler.SERVICE_NAME);
208
            return new ActionsProvider.ContextAware(serviceName);
309
            String actionsStr = (String) attrs.get(ContextAwareServiceHandler.SERVICE_ACTIONS);
310
            String enabledOnMIMETypesStr = (String) attrs.get(ContextAwareServiceHandler.SERVICE_ENABLED_MIMETYPES);
311
            String[] actions = parseArray(actionsStr);
312
            String[] enabledOnMIMETypes = parseArray(enabledOnMIMETypesStr);
313
            return new ActionsProvider.ContextAware(serviceName,
314
                                                    createSet(actions),
315
                                                    createSet(enabledOnMIMETypes));
316
        }
317
318
        private static String[] parseArray(String strArray) {
319
            if (strArray == null) {
320
                return null;
321
            }
322
            if (strArray.startsWith("[")) strArray = strArray.substring(1);
323
            if (strArray.endsWith("]")) strArray = strArray.substring(0, strArray.length() - 1);
324
            strArray = strArray.trim();
325
            int index = 0;
326
            List<String> strings = new ArrayList<String>();
327
            while (index < strArray.length()) {
328
                int index2 = strArray.indexOf(',', index);
329
                if (index2 < 0) index2 = strArray.length();
330
                if (index2 > index) {
331
                    String s = strArray.substring(index, index2).trim();
332
                    if (s.length() > 0) { // Can be trimmed to 0 length
333
                        strings.add(s);
334
                    }
335
                    index = index2 + 1;
336
                } else {
337
                    index++;
338
                    continue;
339
                }
340
            }
341
            return strings.toArray(new String[0]);
342
        }
343
344
        private static <T> Set<T> createSet(T[] array) {
345
            if (array != null) {
346
                return Collections.unmodifiableSet(new HashSet(Arrays.asList(array)));
347
            } else {
348
                return null;
349
            }
350
        }
351
352
        private static String getCurrentMIMEType() {
353
            // Ask EditorContextDispatcher.getDefault().getMostRecentFile()
354
            // It's not in a dependent module, therefore we have to find it dynamically:
355
            try {
356
                Class editorContextDispatcherClass = Lookup.getDefault().lookup(ClassLoader.class).loadClass("org.netbeans.spi.debugger.ui.EditorContextDispatcher");
357
                try {
358
                    try {
359
                        Object editorContextDispatcher = editorContextDispatcherClass.getMethod("getDefault").invoke(null);
360
                        FileObject file = (FileObject) editorContextDispatcherClass.getMethod("getMostRecentFile").invoke(editorContextDispatcher);
361
                        if (file != null) {
362
                            return file.getMIMEType();
363
                        } else {
364
                            return null;
365
                        }
366
                    } catch (IllegalAccessException ex) {
367
                        Exceptions.printStackTrace(ex);
368
                    } catch (IllegalArgumentException ex) {
369
                        Exceptions.printStackTrace(ex);
370
                    } catch (InvocationTargetException ex) {
371
                        Exceptions.printStackTrace(ex);
372
                    }
373
                } catch (NoSuchMethodException ex) {
374
                    Exceptions.printStackTrace(ex);
375
                } catch (SecurityException ex) {
376
                    Exceptions.printStackTrace(ex);
377
                }
378
            } catch (ClassNotFoundException ex) {
379
            }
380
            return ERROR;
381
        }
382
383
        private PropertyChangeListener attachContextDispatcherListener() {
384
            // Call EditorContextDispatcher.getDefault().addPropertyChangeListener(String MIMEType, PropertyChangeListener l)
385
            // It's not in a dependent module, therefore we have to find it dynamically:
386
            PropertyChangeListener l = null;
387
            try {
388
                Class editorContextDispatcherClass = Lookup.getDefault().lookup(ClassLoader.class).loadClass("org.netbeans.spi.debugger.ui.EditorContextDispatcher");
389
                try {
390
                    try {
391
                        Object editorContextDispatcher = editorContextDispatcherClass.getMethod("getDefault").invoke(null);
392
                        java.lang.reflect.Method m = editorContextDispatcherClass.getMethod(
393
                                "addPropertyChangeListener",
394
                                String.class,
395
                                PropertyChangeListener.class);
396
                        l = new ContextDispatcherListener();
397
                        for (String mimeType : enabledOnMIMETypes) {
398
                            m.invoke(editorContextDispatcher, mimeType, l);
399
                        }
400
                    } catch (IllegalAccessException ex) {
401
                        Exceptions.printStackTrace(ex);
402
                    } catch (IllegalArgumentException ex) {
403
                        Exceptions.printStackTrace(ex);
404
                    } catch (InvocationTargetException ex) {
405
                        Exceptions.printStackTrace(ex);
406
                    }
407
                } catch (NoSuchMethodException ex) {
408
                    Exceptions.printStackTrace(ex);
409
                } catch (SecurityException ex) {
410
                    Exceptions.printStackTrace(ex);
411
                }
412
            } catch (ClassNotFoundException ex) {
413
            }
414
            return l;
415
        }
416
417
        private void detachContextDispatcherListener() {
418
            // Call EditorContextDispatcher.getDefault().removePropertyChangeListener(PropertyChangeListener l)
419
            // It's not in a dependent module, therefore we have to find it dynamically:
420
            PropertyChangeListener l = null;
421
            try {
422
                Class editorContextDispatcherClass = Lookup.getDefault().lookup(ClassLoader.class).loadClass("org.netbeans.spi.debugger.ui.EditorContextDispatcher");
423
                try {
424
                    try {
425
                        Object editorContextDispatcher = editorContextDispatcherClass.getMethod("getDefault").invoke(null);
426
                        java.lang.reflect.Method m = editorContextDispatcherClass.getMethod(
427
                                "removePropertyChangeListener",
428
                                PropertyChangeListener.class);
429
                        m.invoke(editorContextDispatcher, contextDispatcherListener);
430
                        contextDispatcherListener = null;
431
                    } catch (IllegalAccessException ex) {
432
                        Exceptions.printStackTrace(ex);
433
                    } catch (IllegalArgumentException ex) {
434
                        Exceptions.printStackTrace(ex);
435
                    } catch (InvocationTargetException ex) {
436
                        Exceptions.printStackTrace(ex);
437
                    }
438
                } catch (NoSuchMethodException ex) {
439
                    Exceptions.printStackTrace(ex);
440
                } catch (SecurityException ex) {
441
                    Exceptions.printStackTrace(ex);
442
                }
443
            } catch (ClassNotFoundException ex) {
444
            }
445
        }
446
447
        private class ContextDispatcherListener implements PropertyChangeListener {
448
449
            @Override
450
            public void propertyChange(PropertyChangeEvent evt) {
451
                List<ActionsProviderListener> ls;
452
                synchronized (ContextAware.this) {
453
                    ls = new ArrayList<ActionsProviderListener>(listeners);
454
                }
455
                for (ActionsProviderListener l : ls) {
456
                    for (Object action : actions) {
457
                        l.actionStateChange(action, isEnabled(action));
458
                    }
459
                }
460
            }
461
            
209
        }
462
        }
210
463
211
    }
464
    }
(-)a/cnd.debugger.common/src/META-INF/debugger/org.netbeans.spi.debugger.ActionsProvider (-1 lines)
Line 1 Link Here
1
org.netbeans.modules.cnd.debugger.common.breakpoints.ToggleBreakpointActionProvider
(-)a/cnd.debugger.common/src/org/netbeans/modules/cnd/debugger/common/breakpoints/ToggleBreakpointActionProvider.java (+2 lines)
Lines 52-57 Link Here
52
import org.netbeans.modules.cnd.debugger.common.EditorContextBridge;
52
import org.netbeans.modules.cnd.debugger.common.EditorContextBridge;
53
import org.netbeans.modules.cnd.debugger.common.disassembly.DisassemblyService;
53
import org.netbeans.modules.cnd.debugger.common.disassembly.DisassemblyService;
54
import org.netbeans.modules.cnd.utils.MIMENames;
54
import org.netbeans.modules.cnd.utils.MIMENames;
55
import org.netbeans.spi.debugger.ActionsProvider.Registration;
55
import org.netbeans.spi.debugger.ActionsProviderSupport;
56
import org.netbeans.spi.debugger.ActionsProviderSupport;
56
import org.openide.util.NbBundle;
57
import org.openide.util.NbBundle;
57
58
Lines 59-64 Link Here
59
 *
60
 *
60
 * @author Egor Ushakov
61
 * @author Egor Ushakov
61
 */
62
 */
63
@Registration(actions={"toggleBreakpoint"}, enabledOnMIMETypes={"text/x-c++", "text/x-c", "text/x-h", "text/x-c/text/x-h", "text/x-fortran", "text/x-asm"})
62
public class ToggleBreakpointActionProvider extends ActionsProviderSupport implements PropertyChangeListener {
64
public class ToggleBreakpointActionProvider extends ActionsProviderSupport implements PropertyChangeListener {
63
65
64
    private final Logger log = Logger.getLogger("cnd.breakpoint.annotations"); // NOI18N
66
    private final Logger log = Logger.getLogger("cnd.breakpoint.annotations"); // NOI18N
(-)a/debugger.jpda.projects/src/META-INF/debugger/org.netbeans.spi.debugger.ActionsProvider (-2 / +1 lines)
Lines 1-2 Link Here
1
org.netbeans.modules.debugger.jpda.projects.StepIntoActionProvider
1
org.netbeans.modules.debugger.jpda.projects.StepIntoActionProvider
2
org.netbeans.modules.debugger.jpda.projects.RunToCursorActionProvider
(-)a/debugger.jpda.projects/src/org/netbeans/modules/debugger/jpda/projects/RunToCursorActionProvider.java (+2 lines)
Lines 55-60 Link Here
55
import org.netbeans.api.debugger.jpda.JPDADebugger;
55
import org.netbeans.api.debugger.jpda.JPDADebugger;
56
import org.netbeans.api.debugger.jpda.LineBreakpoint;
56
import org.netbeans.api.debugger.jpda.LineBreakpoint;
57
import org.netbeans.api.project.Project;
57
import org.netbeans.api.project.Project;
58
import org.netbeans.spi.debugger.ActionsProvider.Registration;
58
import org.netbeans.spi.debugger.ActionsProviderSupport;
59
import org.netbeans.spi.debugger.ActionsProviderSupport;
59
import org.netbeans.spi.debugger.ui.EditorContextDispatcher;
60
import org.netbeans.spi.debugger.ui.EditorContextDispatcher;
60
import org.netbeans.spi.project.ActionProvider;
61
import org.netbeans.spi.project.ActionProvider;
Lines 68-73 Link Here
68
*
69
*
69
* @author   Jan Jancura
70
* @author   Jan Jancura
70
*/
71
*/
72
@Registration(actions={"runToCursor"}, enabledOnMIMETypes={"text/x-java"})
71
public class RunToCursorActionProvider extends ActionsProviderSupport {
73
public class RunToCursorActionProvider extends ActionsProviderSupport {
72
    
74
    
73
    private EditorContextDispatcher editorContext;
75
    private EditorContextDispatcher editorContext;
(-)a/debugger.jpda.ui/src/META-INF/debugger/org.netbeans.spi.debugger.ActionsProvider (-1 lines)
Line 1 Link Here
1
org.netbeans.modules.debugger.jpda.ui.actions.ToggleBreakpointActionProvider
(-)a/debugger.jpda.ui/src/org/netbeans/modules/debugger/jpda/ui/actions/ToggleBreakpointActionProvider.java (+2 lines)
Lines 57-62 Link Here
57
import org.netbeans.api.debugger.jpda.JPDADebugger;
57
import org.netbeans.api.debugger.jpda.JPDADebugger;
58
import org.netbeans.api.debugger.jpda.LineBreakpoint;
58
import org.netbeans.api.debugger.jpda.LineBreakpoint;
59
import org.netbeans.modules.debugger.jpda.ui.EditorContextBridge;
59
import org.netbeans.modules.debugger.jpda.ui.EditorContextBridge;
60
import org.netbeans.spi.debugger.ActionsProvider;
60
import org.netbeans.spi.debugger.ActionsProviderSupport;
61
import org.netbeans.spi.debugger.ActionsProviderSupport;
61
import org.openide.filesystems.FileObject;
62
import org.openide.filesystems.FileObject;
62
import org.openide.filesystems.URLMapper;
63
import org.openide.filesystems.URLMapper;
Lines 68-73 Link Here
68
 *
69
 *
69
 * @author   Jan Jancura
70
 * @author   Jan Jancura
70
 */
71
 */
72
@ActionsProvider.Registration(actions={ "toggleBreakpoint" }, enabledOnMIMETypes={ "text/x-java" })
71
public class ToggleBreakpointActionProvider extends ActionsProviderSupport 
73
public class ToggleBreakpointActionProvider extends ActionsProviderSupport 
72
implements PropertyChangeListener {
74
implements PropertyChangeListener {
73
    
75
    
(-)a/groovy.support/src/META-INF/debugger/org.netbeans.spi.debugger.ActionsProvider (-1 lines)
Line 1 Link Here
1
org.netbeans.modules.groovy.support.debug.GroovyToggleBreakpointActionProvider
(-)a/groovy.support/src/org/netbeans/modules/groovy/support/debug/GroovyToggleBreakpointActionProvider.java (+2 lines)
Lines 48-53 Link Here
48
import org.netbeans.api.debugger.ActionsManager;
48
import org.netbeans.api.debugger.ActionsManager;
49
import org.netbeans.api.debugger.DebuggerManager;
49
import org.netbeans.api.debugger.DebuggerManager;
50
import org.netbeans.api.debugger.jpda.JPDADebugger;
50
import org.netbeans.api.debugger.jpda.JPDADebugger;
51
import org.netbeans.spi.debugger.ActionsProvider.Registration;
51
import org.netbeans.spi.debugger.ActionsProviderSupport;
52
import org.netbeans.spi.debugger.ActionsProviderSupport;
52
import org.netbeans.spi.debugger.ContextProvider;
53
import org.netbeans.spi.debugger.ContextProvider;
53
import org.openide.filesystems.FileObject;
54
import org.openide.filesystems.FileObject;
Lines 58-63 Link Here
58
 * @author Martin Grebac
59
 * @author Martin Grebac
59
 * @author Martin Adamek
60
 * @author Martin Adamek
60
 */
61
 */
62
@Registration(actions={"toggleBreakpoint"}, enabledOnMIMETypes={"text/x-groovy"})
61
public class GroovyToggleBreakpointActionProvider extends ActionsProviderSupport implements PropertyChangeListener {
63
public class GroovyToggleBreakpointActionProvider extends ActionsProviderSupport implements PropertyChangeListener {
62
    
64
    
63
    private JPDADebugger debugger;
65
    private JPDADebugger debugger;
(-)a/ide.kit/test/qa-functional/data/blacklist.txt (-1 / +32 lines)
Lines 513-516 Link Here
513
org.netbeans.modules.cnd.api.model.CsmOffsetable
513
org.netbeans.modules.cnd.api.model.CsmOffsetable
514
org.netbeans.modules.cnd.api.model.CsmOffsetableDeclaration
514
org.netbeans.modules.cnd.api.model.CsmOffsetableDeclaration
515
org.netbeans.modules.cnd.api.model.CsmQualifiedNamedElement
515
org.netbeans.modules.cnd.api.model.CsmQualifiedNamedElement
516
org.netbeans.modules.cnd.api.model.CsmScopeElement
516
org.netbeans.modules.cnd.api.model.CsmScopeElement
517
518
#177561
519
org.netbeans.api.debugger.jpda.JPDABreakpoint
520
org.netbeans.api.debugger.jpda.LineBreakpoint
521
org.netbeans.modules.ant.debugger.breakpoints.AntBreakpoint
522
org.netbeans.modules.ant.debugger.breakpoints.AntBreakpointActionProvider
523
org.netbeans.modules.cnd.debugger.common.EditorContext
524
org.netbeans.modules.cnd.debugger.common.EditorContextBridge
525
org.netbeans.modules.cnd.debugger.common.EditorContextImpl
526
org.netbeans.modules.cnd.debugger.common.breakpoints.ToggleBreakpointActionProvider
527
org.netbeans.modules.debugger.jpda.projects.EditorContextImpl$SessionsListener
528
org.netbeans.modules.debugger.jpda.projects.EditorContextImpl$SessionsListenerRemoval
529
org.netbeans.modules.debugger.jpda.projects.RunToCursorActionProvider
530
org.netbeans.modules.debugger.jpda.projects.RunToCursorActionProvider$Listener
531
org.netbeans.modules.debugger.jpda.ui.actions.ToggleBreakpointActionProvider
532
org.netbeans.modules.groovy.support.debug.Context
533
org.netbeans.modules.groovy.support.debug.GroovyLineBreakpoint
534
org.netbeans.modules.groovy.support.debug.GroovyToggleBreakpointActionProvider
535
org.netbeans.modules.ruby.debugger.EditorUtil
536
org.netbeans.modules.ruby.debugger.breakpoints.RubyBreakpoint
537
org.netbeans.modules.ruby.debugger.breakpoints.RubyBreakpointActionProvider
538
org.netbeans.modules.web.client.javascript.debugger.ui.NbJSEditorUtil
539
org.netbeans.modules.web.client.javascript.debugger.ui.breakpoints.NbJSBreakpointActionProvider
540
org.netbeans.modules.web.debug.Context
541
org.netbeans.modules.web.debug.actions.JspRunToCursorActionProvider
542
org.netbeans.modules.web.debug.actions.JspRunToCursorActionProvider$Listener
543
org.netbeans.modules.web.debug.actions.JspToggleBreakpointActionProvider
544
org.netbeans.modules.web.debug.actions.MainProjectManager
545
org.netbeans.modules.web.debug.breakpoints.JspLineBreakpoint
546
org.netbeans.modules.web.debug.util.Utils
547
(-)a/ide.kit/test/qa-functional/data/whitelist_1.txt (-32 lines)
Lines 78-93 Link Here
78
org.netbeans.modules.xml.tools.doclet.DocletAction
78
org.netbeans.modules.xml.tools.doclet.DocletAction
79
org.netbeans.modules.xml.tools.java.actions.GenerateDOMScannerAction
79
org.netbeans.modules.xml.tools.java.actions.GenerateDOMScannerAction
80
org.netbeans.modules.xml.tools.java.actions.GenerateDocumentHandlerAction
80
org.netbeans.modules.xml.tools.java.actions.GenerateDocumentHandlerAction
81
82
#177561
83
org.netbeans.modules.cnd.debug.DebugUtils
84
org.netbeans.modules.cnd.debugger.common.EditorContext
85
org.netbeans.modules.cnd.debugger.common.EditorContextBridge
86
org.netbeans.modules.cnd.debugger.common.EditorContextImpl
87
org.netbeans.modules.cnd.debugger.common.breakpoints.ToggleBreakpointActionProvider
88
org.netbeans.modules.debugger.jpda.projects.EditorContextImpl$SessionsListener
89
org.netbeans.modules.debugger.jpda.projects.EditorContextImpl$SessionsListenerRemoval
90
91
81
92
com.sun.java.swing.plaf.windows.WindowsButtonUI
82
com.sun.java.swing.plaf.windows.WindowsButtonUI
93
com.sun.java.swing.plaf.windows.WindowsCheckBoxMenuItemUI
83
com.sun.java.swing.plaf.windows.WindowsCheckBoxMenuItemUI
Lines 1047-1054 Link Here
1047
org.netbeans.api.debugger.Lookup$MetaInf$ModuleChangeListener
1037
org.netbeans.api.debugger.Lookup$MetaInf$ModuleChangeListener
1048
org.netbeans.api.debugger.Session
1038
org.netbeans.api.debugger.Session
1049
org.netbeans.api.debugger.Watch
1039
org.netbeans.api.debugger.Watch
1050
org.netbeans.api.debugger.jpda.JPDABreakpoint
1051
org.netbeans.api.debugger.jpda.LineBreakpoint
1052
org.netbeans.api.editor.EditorRegistry
1040
org.netbeans.api.editor.EditorRegistry
1053
org.netbeans.api.editor.EditorRegistry$AncestorL
1041
org.netbeans.api.editor.EditorRegistry$AncestorL
1054
org.netbeans.api.editor.EditorRegistry$FocusL
1042
org.netbeans.api.editor.EditorRegistry$FocusL
Lines 2304-2311 Link Here
2304
org.netbeans.mobility.antext.preprocessor.CommentingPreProcessor$Destination
2292
org.netbeans.mobility.antext.preprocessor.CommentingPreProcessor$Destination
2305
org.netbeans.mobility.antext.preprocessor.CommentingPreProcessor$Source
2293
org.netbeans.mobility.antext.preprocessor.CommentingPreProcessor$Source
2306
org.netbeans.mobility.antext.preprocessor.PreprocessorException
2294
org.netbeans.mobility.antext.preprocessor.PreprocessorException
2307
org.netbeans.modules.ant.debugger.breakpoints.AntBreakpoint
2308
org.netbeans.modules.ant.debugger.breakpoints.AntBreakpointActionProvider
2309
org.netbeans.modules.ant.freeform.Accessor
2295
org.netbeans.modules.ant.freeform.Accessor
2310
org.netbeans.modules.ant.freeform.Actions
2296
org.netbeans.modules.ant.freeform.Actions
2311
org.netbeans.modules.ant.freeform.Actions$TargetRunner
2297
org.netbeans.modules.ant.freeform.Actions$TargetRunner
Lines 2489-2496 Link Here
2489
org.netbeans.modules.debugger.jpda.projects.EditorContextImpl$EditorContextDispatchListener
2475
org.netbeans.modules.debugger.jpda.projects.EditorContextImpl$EditorContextDispatchListener
2490
org.netbeans.modules.debugger.jpda.projects.EditorContextImpl$EditorLookupListener
2476
org.netbeans.modules.debugger.jpda.projects.EditorContextImpl$EditorLookupListener
2491
org.netbeans.modules.debugger.jpda.projects.MainProjectManager
2477
org.netbeans.modules.debugger.jpda.projects.MainProjectManager
2492
org.netbeans.modules.debugger.jpda.projects.RunToCursorActionProvider
2493
org.netbeans.modules.debugger.jpda.projects.RunToCursorActionProvider$Listener
2494
org.netbeans.modules.debugger.jpda.projects.StepIntoActionProvider
2478
org.netbeans.modules.debugger.jpda.projects.StepIntoActionProvider
2495
org.netbeans.modules.debugger.jpda.projects.StepIntoActionProvider$Listener
2479
org.netbeans.modules.debugger.jpda.projects.StepIntoActionProvider$Listener
2496
org.netbeans.modules.debugger.jpda.ui.ConnectPanel
2480
org.netbeans.modules.debugger.jpda.ui.ConnectPanel
Lines 2501-2507 Link Here
2501
org.netbeans.modules.debugger.jpda.ui.actions.EvaluateAction$EnableListener
2485
org.netbeans.modules.debugger.jpda.ui.actions.EvaluateAction$EnableListener
2502
org.netbeans.modules.debugger.jpda.ui.actions.SetCurrentThreadFromHistoryAction
2486
org.netbeans.modules.debugger.jpda.ui.actions.SetCurrentThreadFromHistoryAction
2503
org.netbeans.modules.debugger.jpda.ui.actions.SourcesViewAction
2487
org.netbeans.modules.debugger.jpda.ui.actions.SourcesViewAction
2504
org.netbeans.modules.debugger.jpda.ui.actions.ToggleBreakpointActionProvider
2505
org.netbeans.modules.debugger.jpda.ui.actions.ToggleMethodFieldBreakpointAction
2488
org.netbeans.modules.debugger.jpda.ui.actions.ToggleMethodFieldBreakpointAction
2506
org.netbeans.modules.debugger.jpda.ui.debugging.ThreadsHistoryAction
2489
org.netbeans.modules.debugger.jpda.ui.debugging.ThreadsHistoryAction
2507
org.netbeans.modules.debugger.ui.DebuggerModule
2490
org.netbeans.modules.debugger.ui.DebuggerModule
Lines 2912-2920 Link Here
2912
org.netbeans.modules.glassfish.common.Installer
2895
org.netbeans.modules.glassfish.common.Installer
2913
org.netbeans.modules.gototest.GotoOppositeAction
2896
org.netbeans.modules.gototest.GotoOppositeAction
2914
org.netbeans.modules.groovy.grailsproject.GrailsProjectFactory
2897
org.netbeans.modules.groovy.grailsproject.GrailsProjectFactory
2915
org.netbeans.modules.groovy.support.debug.Context
2916
org.netbeans.modules.groovy.support.debug.GroovyLineBreakpoint
2917
org.netbeans.modules.groovy.support.debug.GroovyToggleBreakpointActionProvider
2918
org.netbeans.modules.gsf.DefaultLanguage
2898
org.netbeans.modules.gsf.DefaultLanguage
2919
org.netbeans.modules.gsf.GsfDataLoader
2899
org.netbeans.modules.gsf.GsfDataLoader
2920
org.netbeans.modules.gsf.GsfDataObject
2900
org.netbeans.modules.gsf.GsfDataObject
Lines 3730-3738 Link Here
3730
org.netbeans.modules.registration.RegisterAction
3710
org.netbeans.modules.registration.RegisterAction
3731
org.netbeans.modules.ruby.RubyMimeResolver
3711
org.netbeans.modules.ruby.RubyMimeResolver
3732
org.netbeans.modules.ruby.api.project.rake.RakeArtifact
3712
org.netbeans.modules.ruby.api.project.rake.RakeArtifact
3733
org.netbeans.modules.ruby.debugger.EditorUtil
3734
org.netbeans.modules.ruby.debugger.breakpoints.RubyBreakpoint
3735
org.netbeans.modules.ruby.debugger.breakpoints.RubyBreakpointActionProvider
3736
org.netbeans.modules.ruby.modules.project.rake.FileChangeSupportListener
3713
org.netbeans.modules.ruby.modules.project.rake.FileChangeSupportListener
3737
org.netbeans.modules.ruby.modules.project.rake.RakeBasedProjectFactorySingleton
3714
org.netbeans.modules.ruby.modules.project.rake.RakeBasedProjectFactorySingleton
3738
org.netbeans.modules.ruby.modules.project.rake.RakeBasedProjectFactorySingleton$RakeProjectHelperCallback
3715
org.netbeans.modules.ruby.modules.project.rake.RakeBasedProjectFactorySingleton$RakeProjectHelperCallback
Lines 4211-4218 Link Here
4211
org.netbeans.modules.web.client.javascript.debugger.filesystem.URLFileObject
4188
org.netbeans.modules.web.client.javascript.debugger.filesystem.URLFileObject
4212
org.netbeans.modules.web.client.javascript.debugger.filesystem.URLFileObjectFactory
4189
org.netbeans.modules.web.client.javascript.debugger.filesystem.URLFileObjectFactory
4213
org.netbeans.modules.web.client.javascript.debugger.filesystem.URLFileObjectMapper
4190
org.netbeans.modules.web.client.javascript.debugger.filesystem.URLFileObjectMapper
4214
org.netbeans.modules.web.client.javascript.debugger.ui.NbJSEditorUtil
4215
org.netbeans.modules.web.client.javascript.debugger.ui.breakpoints.NbJSBreakpointActionProvider
4216
org.netbeans.modules.web.core.EditQueryStringAction
4191
org.netbeans.modules.web.core.EditQueryStringAction
4217
org.netbeans.modules.web.core.JspEditorWarmUpTask
4192
org.netbeans.modules.web.core.JspEditorWarmUpTask
4218
org.netbeans.modules.web.core.QueryStringCookie
4193
org.netbeans.modules.web.core.QueryStringCookie
Lines 4226-4238 Link Here
4226
org.netbeans.modules.web.core.syntax.settings.JspMultiSettingsInitializer
4201
org.netbeans.modules.web.core.syntax.settings.JspMultiSettingsInitializer
4227
org.netbeans.modules.web.core.syntax.settings.RestoreSettings
4202
org.netbeans.modules.web.core.syntax.settings.RestoreSettings
4228
org.netbeans.modules.web.core.syntax.spi.AutoTagImporterProvider
4203
org.netbeans.modules.web.core.syntax.spi.AutoTagImporterProvider
4229
org.netbeans.modules.web.debug.Context
4230
org.netbeans.modules.web.debug.actions.JspRunToCursorActionProvider
4231
org.netbeans.modules.web.debug.actions.JspRunToCursorActionProvider$Listener
4232
org.netbeans.modules.web.debug.actions.JspToggleBreakpointActionProvider
4233
org.netbeans.modules.web.debug.actions.MainProjectManager
4234
org.netbeans.modules.web.debug.breakpoints.JspLineBreakpoint
4235
org.netbeans.modules.web.debug.util.Utils
4236
org.netbeans.modules.web.freeform.FolderTemplateLookupProviderImpl
4204
org.netbeans.modules.web.freeform.FolderTemplateLookupProviderImpl
4237
org.netbeans.modules.web.freeform.LookupProviderImpl
4205
org.netbeans.modules.web.freeform.LookupProviderImpl
4238
org.netbeans.modules.web.freeform.LookupProviderImpl$ProjectLookup
4206
org.netbeans.modules.web.freeform.LookupProviderImpl$ProjectLookup
(-)a/ruby.debugger/src/META-INF/debugger/org.netbeans.spi.debugger.ActionsProvider (-1 lines)
Line 1 Link Here
1
org.netbeans.modules.ruby.debugger.breakpoints.RubyBreakpointActionProvider
(-)a/ruby.debugger/src/org/netbeans/modules/ruby/debugger/breakpoints/RubyBreakpointActionProvider.java (+2 lines)
Lines 51-56 Link Here
51
import org.netbeans.api.debugger.DebuggerManager;
51
import org.netbeans.api.debugger.DebuggerManager;
52
import org.netbeans.modules.ruby.debugger.EditorUtil;
52
import org.netbeans.modules.ruby.debugger.EditorUtil;
53
import org.netbeans.modules.ruby.debugger.Util;
53
import org.netbeans.modules.ruby.debugger.Util;
54
import org.netbeans.spi.debugger.ActionsProvider.Registration;
54
import org.netbeans.spi.debugger.ActionsProviderSupport;
55
import org.netbeans.spi.debugger.ActionsProviderSupport;
55
import org.netbeans.spi.debugger.ui.EditorContextDispatcher;
56
import org.netbeans.spi.debugger.ui.EditorContextDispatcher;
56
import org.openide.text.Line;
57
import org.openide.text.Line;
Lines 60-65 Link Here
60
/**
61
/**
61
 * Provides actions for adding and removing Ruby breakpoints.
62
 * Provides actions for adding and removing Ruby breakpoints.
62
 */
63
 */
64
@Registration(actions={"toggleBreakpoint"}, enabledOnMIMETypes={"text/x-ruby", "application/x-httpd-eruby"})
63
public final class RubyBreakpointActionProvider extends ActionsProviderSupport
65
public final class RubyBreakpointActionProvider extends ActionsProviderSupport
64
        implements PropertyChangeListener {
66
        implements PropertyChangeListener {
65
    
67
    
(-)a/spi.debugger.ui/src/org/netbeans/spi/debugger/ui/EditorContextDispatcher.java (+14 lines)
Lines 277-282 Link Here
277
     */
277
     */
278
    public synchronized FileObject getMostRecentFile() {
278
    public synchronized FileObject getMostRecentFile() {
279
        return mostRecentFileRef.get();
279
        return mostRecentFileRef.get();
280
    }
281
282
    /** Used by unit test only */
283
    void setMostRecentFile(FileObject file) {
284
        Object oldFile;
285
        String MIMEType = null;
286
        synchronized (this) {
287
            oldFile = mostRecentFileRef.get();
288
            mostRecentFileRef = new WeakReference(file);
289
            if (file != null) {
290
                MIMEType = file.getMIMEType();
291
            }
292
        }
293
        refreshProcessor.post(new EventFirer(PROP_EDITOR, oldFile, file, MIMEType));
280
    }
294
    }
281
295
282
    /**
296
    /**
(-)a/spi.debugger.ui/test/unit/src/org/netbeans/api/debugger/ProvidersAnnotationTest.java (-2 / +221 lines)
Lines 39-47 Link Here
39
39
40
package org.netbeans.api.debugger;
40
package org.netbeans.api.debugger;
41
41
42
import java.io.FileNotFoundException;
43
import java.io.IOException;
44
import java.io.InputStream;
45
import java.io.OutputStream;
46
import java.util.Date;
47
import java.util.Enumeration;
42
import java.util.List;
48
import java.util.List;
43
49
44
import junit.framework.Test;
45
import org.netbeans.api.debugger.providers.TestActionProvider;
50
import org.netbeans.api.debugger.providers.TestActionProvider;
46
import org.netbeans.api.debugger.providers.TestAttachType;
51
import org.netbeans.api.debugger.providers.TestAttachType;
47
import org.netbeans.api.debugger.providers.TestBreakpointType;
52
import org.netbeans.api.debugger.providers.TestBreakpointType;
Lines 49-68 Link Here
49
import org.netbeans.api.debugger.providers.TestExtendedNodeModelFilter;
54
import org.netbeans.api.debugger.providers.TestExtendedNodeModelFilter;
50
import org.netbeans.api.debugger.providers.TestLazyActionsManagerListenerAnnotated;
55
import org.netbeans.api.debugger.providers.TestLazyActionsManagerListenerAnnotated;
51
import org.netbeans.api.debugger.providers.TestLazyDebuggerManagerListenerAnnotated;
56
import org.netbeans.api.debugger.providers.TestLazyDebuggerManagerListenerAnnotated;
57
import org.netbeans.api.debugger.providers.TestMIMETypeSensitiveActionProvider;
52
import org.netbeans.api.debugger.providers.TestThreeModels;
58
import org.netbeans.api.debugger.providers.TestThreeModels;
53
import org.netbeans.junit.NbModuleSuite;
54
import org.netbeans.modules.debugger.ui.models.ColumnModels;
59
import org.netbeans.modules.debugger.ui.models.ColumnModels;
55
import org.netbeans.spi.debugger.ActionsProvider;
60
import org.netbeans.spi.debugger.ActionsProvider;
61
import org.netbeans.spi.debugger.ActionsProviderListener;
56
import org.netbeans.spi.debugger.DebuggerEngineProvider;
62
import org.netbeans.spi.debugger.DebuggerEngineProvider;
57
import org.netbeans.spi.debugger.SessionProvider;
63
import org.netbeans.spi.debugger.SessionProvider;
58
import org.netbeans.spi.debugger.ui.AttachType;
64
import org.netbeans.spi.debugger.ui.AttachType;
59
import org.netbeans.spi.debugger.ui.BreakpointType;
65
import org.netbeans.spi.debugger.ui.BreakpointType;
66
import org.netbeans.spi.debugger.ui.EditorContextDispatcherManager;
60
import org.netbeans.spi.viewmodel.ColumnModel;
67
import org.netbeans.spi.viewmodel.ColumnModel;
61
import org.netbeans.spi.viewmodel.ExtendedNodeModelFilter;
68
import org.netbeans.spi.viewmodel.ExtendedNodeModelFilter;
62
import org.netbeans.spi.viewmodel.NodeModel;
69
import org.netbeans.spi.viewmodel.NodeModel;
63
import org.netbeans.spi.viewmodel.NodeModelFilter;
70
import org.netbeans.spi.viewmodel.NodeModelFilter;
64
import org.netbeans.spi.viewmodel.TableModel;
71
import org.netbeans.spi.viewmodel.TableModel;
65
import org.netbeans.spi.viewmodel.TreeModel;
72
import org.netbeans.spi.viewmodel.TreeModel;
73
import org.openide.filesystems.FileChangeListener;
74
import org.openide.filesystems.FileLock;
75
import org.openide.filesystems.FileObject;
76
import org.openide.filesystems.FileStateInvalidException;
77
import org.openide.filesystems.FileSystem;
78
import org.openide.filesystems.LocalFileSystem;
66
79
67
/**
80
/**
68
 *
81
 *
Lines 200-203 Link Here
200
        //assertEquals(ColumnModels.createLocalsToStringColumn().getDisplayName(), list.get(3).getDisplayName()); - was made hidden!
213
        //assertEquals(ColumnModels.createLocalsToStringColumn().getDisplayName(), list.get(3).getDisplayName()); - was made hidden!
201
        }
214
        }
202
    }
215
    }
216
217
    public void testMIMETypeSensitiveActionProviders() throws Exception {
218
        Lookup.MetaInf l = new Lookup.MetaInf("unittest_MIME");
219
220
        List<? extends ActionsProvider> list = l.lookup(null, ActionsProvider.class);
221
        assertEquals("No test action provider instance should be created yet!", 0, TestMIMETypeSensitiveActionProvider.INSTANCES.size());
222
        assertInstanceOf("Wrong looked up object", list.get(0), ActionsProvider.class);
223
        ActionsProvider ap = list.get(0);
224
        Object action = ap.getActions().iterator().next();
225
        assertEquals(TestMIMETypeSensitiveActionProvider.ACTION_OBJECT, action);
226
        assertEquals("No test action provider instance should be created yet!", 0, TestMIMETypeSensitiveActionProvider.INSTANCES.size());
227
        ap.isEnabled(action);
228
        assertEquals("No test action provider instance should be created yet!", 0, TestMIMETypeSensitiveActionProvider.INSTANCES.size());
229
        final Boolean[] actionStateChanged = new Boolean[] { null };
230
        ap.addActionsProviderListener(new ActionsProviderListener() {
231
            @Override
232
            public void actionStateChange(Object action, boolean enabled) {
233
                actionStateChanged[0] = enabled;
234
            }
235
        });
236
        assertEquals("No test action provider instance should be created yet!", 0, TestMIMETypeSensitiveActionProvider.INSTANCES.size());
237
238
        /*
239
        LocalFileSystem fs = new LocalFileSystem();
240
        fs.setRootDirectory(new File("/tmp"));
241
        Repository.getDefault().addFileSystem(fs);
242
         */
243
        FileObject f = createCFile();
244
        EditorContextDispatcherManager.setMostRecentFile(f);
245
        Thread.sleep(500);
246
        assertEquals("No test action provider instance should be created yet!", 0, TestMIMETypeSensitiveActionProvider.INSTANCES.size());
247
248
        f = createJavaFile();
249
        EditorContextDispatcherManager.setMostRecentFile(f);
250
        Thread.sleep(500);
251
        assertEquals("One test action provider instance should be created!", 1, TestMIMETypeSensitiveActionProvider.INSTANCES.size());
252
253
    }
254
255
    private static FileObject createCFile() throws IOException {
256
        /* Creates FileObject with unknown content type without full IDE
257
        File file = File.createTempFile("Foo", ".c");
258
        FileWriter fw = new FileWriter(file);
259
        fw.append("#include <stdio.h>\n\nmain() {\n  printf(\"Hi there!\");\n}\n");
260
        fw.flush();
261
        fw.close();
262
        fs.refresh(true);
263
        return FileUtil.toFileObject(file);
264
         */
265
        return new FileObjectWithMIMEType("text/x-c");
266
    }
267
    
268
    private static FileObject createJavaFile() throws IOException {
269
        /* Creates FileObject with unknown content type without full IDE
270
        File file = File.createTempFile("Foo", ".java");
271
        FileWriter fw = new FileWriter(file);
272
        fw.append("\nmain(String[] args) {\n  System.out.println(\"Hi there!\");\n}\n");
273
        fw.flush();
274
        fw.close();
275
        fs.refresh(true);
276
        return FileUtil.toFileObject(file);
277
         */
278
        return new FileObjectWithMIMEType("text/x-java");
279
    }
280
281
    /** Test FileObject implementation that provides a given MIME type */
282
    private static class FileObjectWithMIMEType extends FileObject {
283
284
        private String MIMEType;
285
286
        public FileObjectWithMIMEType(String MIMEType) {
287
            this.MIMEType = MIMEType;
288
        }
289
290
        @Override
291
        public String getMIMEType() {
292
            return MIMEType;
293
        }
294
295
        @Override
296
        public String getName() {
297
            return "Test Name";
298
        }
299
300
        @Override
301
        public String getExt() {
302
            return "Test ext.";
303
        }
304
305
        @Override
306
        public void rename(FileLock lock, String name, String ext) throws IOException {
307
            throw new UnsupportedOperationException("Not supported.");
308
        }
309
310
        @Override
311
        public FileSystem getFileSystem() throws FileStateInvalidException {
312
            return new LocalFileSystem();
313
        }
314
315
        @Override
316
        public FileObject getParent() {
317
            return null;
318
        }
319
320
        @Override
321
        public boolean isFolder() {
322
            return false;
323
        }
324
325
        @Override
326
        public Date lastModified() {
327
            return new Date();
328
        }
329
330
        @Override
331
        public boolean isRoot() {
332
            return false;
333
        }
334
335
        @Override
336
        public boolean isData() {
337
            return true;
338
        }
339
340
        @Override
341
        public boolean isValid() {
342
            return true;
343
        }
344
345
        @Override
346
        public void delete(FileLock lock) throws IOException {
347
            throw new UnsupportedOperationException("Not supported.");
348
        }
349
350
        @Override
351
        public Object getAttribute(String attrName) {
352
            return null;
353
        }
354
355
        @Override
356
        public void setAttribute(String attrName, Object value) throws IOException {
357
        }
358
359
        @Override
360
        public Enumeration<String> getAttributes() {
361
            return null;
362
        }
363
364
        @Override
365
        public void addFileChangeListener(FileChangeListener fcl) {
366
        }
367
368
        @Override
369
        public void removeFileChangeListener(FileChangeListener fcl) {
370
        }
371
372
        @Override
373
        public long getSize() {
374
            return 1000;
375
        }
376
377
        @Override
378
        public InputStream getInputStream() throws FileNotFoundException {
379
            throw new UnsupportedOperationException("Not supported.");
380
        }
381
382
        @Override
383
        public OutputStream getOutputStream(FileLock lock) throws IOException {
384
            throw new UnsupportedOperationException("Not supported.");
385
        }
386
387
        @Override
388
        public FileLock lock() throws IOException {
389
            throw new UnsupportedOperationException("Not supported.");
390
        }
391
392
        @Override
393
        public void setImportant(boolean b) {
394
        }
395
396
        @Override
397
        public FileObject[] getChildren() {
398
            return new FileObject[] {};
399
        }
400
401
        @Override
402
        public FileObject getFileObject(String name, String ext) {
403
            return null;
404
        }
405
406
        @Override
407
        public FileObject createFolder(String name) throws IOException {
408
            throw new UnsupportedOperationException("Not supported.");
409
        }
410
411
        @Override
412
        public FileObject createData(String name, String ext) throws IOException {
413
            throw new UnsupportedOperationException("Not supported.");
414
        }
415
416
        @Override
417
        public boolean isReadOnly() {
418
            return true;
419
        }
420
        
421
    }
203
}
422
}
(-)a/spi.debugger.ui/test/unit/src/org/netbeans/api/debugger/providers/TestMIMETypeSensitiveActionProvider.java (+86 lines)
Line 0 Link Here
1
/*
2
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
3
 *
4
 * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
5
 *
6
 * The contents of this file are subject to the terms of either the GNU
7
 * General Public License Version 2 only ("GPL") or the Common
8
 * Development and Distribution License("CDDL") (collectively, the
9
 * "License"). You may not use this file except in compliance with the
10
 * License. You can obtain a copy of the License at
11
 * http://www.netbeans.org/cddl-gplv2.html
12
 * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
13
 * specific language governing permissions and limitations under the
14
 * License.  When distributing the software, include this License Header
15
 * Notice in each file and include the License file at
16
 * nbbuild/licenses/CDDL-GPL-2-CP.  Sun designates this
17
 * particular file as subject to the "Classpath" exception as provided
18
 * by Sun in the GPL Version 2 section of the License file that
19
 * accompanied this code. If applicable, add the following below the
20
 * License Header, with the fields enclosed by brackets [] replaced by
21
 * your own identifying information:
22
 * "Portions Copyrighted [year] [name of copyright owner]"
23
 *
24
 * If you wish your version of this file to be governed by only the CDDL
25
 * or only the GPL Version 2, indicate your decision by adding
26
 * "[Contributor] elects to include this software in this distribution
27
 * under the [CDDL or GPL Version 2] license." If you do not indicate a
28
 * single choice of license, a recipient has the option to distribute
29
 * your version of this file under either the CDDL, the GPL Version 2 or
30
 * to extend the choice of license to its licensees as provided above.
31
 * However, if you add GPL Version 2 code and therefore, elected the GPL
32
 * Version 2 license, then the option applies only if the new code is
33
 * made subject to such option by the copyright holder.
34
 *
35
 * Contributor(s):
36
 *
37
 * Portions Copyrighted 2009 Sun Microsystems, Inc.
38
 */
39
40
package org.netbeans.api.debugger.providers;
41
42
import java.util.Collections;
43
import java.util.HashSet;
44
import java.util.Set;
45
import org.netbeans.spi.debugger.ActionsProvider;
46
import org.netbeans.spi.debugger.ActionsProviderListener;
47
48
/**
49
 *
50
 * @author Martin Entlicher
51
 */
52
@ActionsProvider.Registration(path="unittest_MIME", getActions={"MIMETypeSensitiveAction"}, enabledOnMIMETypes={ "text/x-java" })
53
public class TestMIMETypeSensitiveActionProvider extends ActionsProvider {
54
55
    public static Object ACTION_OBJECT = "MIMETypeSensitiveAction";
56
57
    public static Set<TestMIMETypeSensitiveActionProvider> INSTANCES = new HashSet<TestMIMETypeSensitiveActionProvider>();
58
59
    public TestMIMETypeSensitiveActionProvider() {
60
        INSTANCES.add(this);
61
    }
62
63
    @Override
64
    public Set getActions() {
65
        return Collections.singleton(ACTION_OBJECT);
66
    }
67
68
    @Override
69
    public void doAction(Object action) {
70
        throw new UnsupportedOperationException("Not supported yet.");
71
    }
72
73
    @Override
74
    public boolean isEnabled(Object action) {
75
        return true;
76
    }
77
78
    @Override
79
    public void addActionsProviderListener(ActionsProviderListener l) {
80
    }
81
82
    @Override
83
    public void removeActionsProviderListener(ActionsProviderListener l) {
84
    }
85
86
}
(-)a/spi.debugger.ui/test/unit/src/org/netbeans/spi/debugger/ui/EditorContextDispatcherManager.java (+53 lines)
Line 0 Link Here
1
/*
2
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
3
 *
4
 * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
5
 *
6
 * The contents of this file are subject to the terms of either the GNU
7
 * General Public License Version 2 only ("GPL") or the Common
8
 * Development and Distribution License("CDDL") (collectively, the
9
 * "License"). You may not use this file except in compliance with the
10
 * License. You can obtain a copy of the License at
11
 * http://www.netbeans.org/cddl-gplv2.html
12
 * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
13
 * specific language governing permissions and limitations under the
14
 * License.  When distributing the software, include this License Header
15
 * Notice in each file and include the License file at
16
 * nbbuild/licenses/CDDL-GPL-2-CP.  Sun designates this
17
 * particular file as subject to the "Classpath" exception as provided
18
 * by Sun in the GPL Version 2 section of the License file that
19
 * accompanied this code. If applicable, add the following below the
20
 * License Header, with the fields enclosed by brackets [] replaced by
21
 * your own identifying information:
22
 * "Portions Copyrighted [year] [name of copyright owner]"
23
 *
24
 * If you wish your version of this file to be governed by only the CDDL
25
 * or only the GPL Version 2, indicate your decision by adding
26
 * "[Contributor] elects to include this software in this distribution
27
 * under the [CDDL or GPL Version 2] license." If you do not indicate a
28
 * single choice of license, a recipient has the option to distribute
29
 * your version of this file under either the CDDL, the GPL Version 2 or
30
 * to extend the choice of license to its licensees as provided above.
31
 * However, if you add GPL Version 2 code and therefore, elected the GPL
32
 * Version 2 license, then the option applies only if the new code is
33
 * made subject to such option by the copyright holder.
34
 *
35
 * Contributor(s):
36
 *
37
 * Portions Copyrighted 2010 Sun Microsystems, Inc.
38
 */
39
40
package org.netbeans.spi.debugger.ui;
41
42
import org.openide.filesystems.FileObject;
43
44
/**
45
 * Manages the state of EditorContextDispatcher.
46
 * @author martin
47
 */
48
public class EditorContextDispatcherManager {
49
50
    public static void setMostRecentFile(FileObject file) {
51
        EditorContextDispatcher.getDefault().setMostRecentFile(file);
52
    }
53
}
(-)a/web.client.tools.impl/src/META-INF/debugger/org.netbeans.spi.debugger.ActionsProvider (-1 lines)
Line 1 Link Here
1
org.netbeans.modules.web.client.javascript.debugger.ui.breakpoints.NbJSBreakpointActionProvider
(-)a/web.client.tools.impl/src/org/netbeans/modules/web/client/javascript/debugger/ui/breakpoints/NbJSBreakpointActionProvider.java (+2 lines)
Lines 47-52 Link Here
47
47
48
import org.netbeans.api.debugger.ActionsManager;
48
import org.netbeans.api.debugger.ActionsManager;
49
import org.netbeans.modules.web.client.javascript.debugger.ui.NbJSEditorUtil;
49
import org.netbeans.modules.web.client.javascript.debugger.ui.NbJSEditorUtil;
50
import org.netbeans.spi.debugger.ActionsProvider.Registration;
50
import org.netbeans.spi.debugger.ActionsProviderSupport;
51
import org.netbeans.spi.debugger.ActionsProviderSupport;
51
import org.netbeans.spi.debugger.ui.EditorContextDispatcher;
52
import org.netbeans.spi.debugger.ui.EditorContextDispatcher;
52
import org.openide.util.WeakListeners;
53
import org.openide.util.WeakListeners;
Lines 54-59 Link Here
54
/**
55
/**
55
 * Provides actions for adding and removing Javascript breakpoints.
56
 * Provides actions for adding and removing Javascript breakpoints.
56
 */
57
 */
58
@Registration(actions={"toggleBreakpoint"}, enabledOnMIMETypes={"text/javascript", "text/html"})
57
public final class NbJSBreakpointActionProvider extends ActionsProviderSupport
59
public final class NbJSBreakpointActionProvider extends ActionsProviderSupport
58
        implements PropertyChangeListener {
60
        implements PropertyChangeListener {
59
61
(-)a/web.debug/src/META-INF/debugger/org.netbeans.spi.debugger.ActionsProvider (-2 lines)
Lines 1-2 Link Here
1
org.netbeans.modules.web.debug.actions.JspRunToCursorActionProvider
2
org.netbeans.modules.web.debug.actions.JspToggleBreakpointActionProvider
(-)a/web.debug/src/org/netbeans/modules/web/debug/actions/JspRunToCursorActionProvider.java (+2 lines)
Lines 60-65 Link Here
60
import org.netbeans.spi.project.ActionProvider;
60
import org.netbeans.spi.project.ActionProvider;
61
import org.netbeans.modules.web.debug.breakpoints.JspLineBreakpoint;
61
import org.netbeans.modules.web.debug.breakpoints.JspLineBreakpoint;
62
import org.netbeans.modules.web.debug.util.Utils;
62
import org.netbeans.modules.web.debug.util.Utils;
63
import org.netbeans.spi.debugger.ActionsProvider.Registration;
63
import org.netbeans.spi.debugger.ActionsProviderSupport;
64
import org.netbeans.spi.debugger.ActionsProviderSupport;
64
import org.netbeans.spi.debugger.ui.EditorContextDispatcher;
65
import org.netbeans.spi.debugger.ui.EditorContextDispatcher;
65
import org.openide.util.Exceptions;
66
import org.openide.util.Exceptions;
Lines 69-74 Link Here
69
*
70
*
70
* @author Martin Grebac, Libor Kotouc
71
* @author Martin Grebac, Libor Kotouc
71
*/
72
*/
73
@Registration(actions={"runToCursor"}, enabledOnMIMETypes={"text/x-jsp"})
72
public class JspRunToCursorActionProvider extends ActionsProviderSupport {
74
public class JspRunToCursorActionProvider extends ActionsProviderSupport {
73
    
75
    
74
    private JspLineBreakpoint breakpoint;
76
    private JspLineBreakpoint breakpoint;
(-)a/web.debug/src/org/netbeans/modules/web/debug/actions/JspToggleBreakpointActionProvider.java (+1 lines)
Lines 61-66 Link Here
61
 *
61
 *
62
 * @author Martin Grebac
62
 * @author Martin Grebac
63
 */
63
 */
64
@ActionsProvider.Registration(actions={"toggleBreakpoint"}, enabledOnMIMETypes={"text/x-jsp", "text/x-tag"})
64
public class JspToggleBreakpointActionProvider extends ActionsProviderSupport implements PropertyChangeListener {
65
public class JspToggleBreakpointActionProvider extends ActionsProviderSupport implements PropertyChangeListener {
65
    
66
    
66
    
67
    

Return to bug 177561