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 175998
Collapse All | Expand All

(-)a/java.sourceui/src/org/netbeans/modules/java/source/ui/JavaTypeProvider.java (-7 / +2 lines)
Lines 347-359 Link Here
347
                }
347
                }
348
348
349
                if (types.isEmpty() && scanInProgress) {
349
                if (types.isEmpty() && scanInProgress) {
350
                    try {
350
                    res.pendingResult();
351
                        synchronized (JavaTypeProvider.this) {
351
                    return;
352
                            this.wait(2000);
353
                        }
354
                    } catch (InterruptedException ex) {
355
                        Exceptions.printStackTrace(ex);
356
                    }
357
                }
352
                }
358
353
359
                if ( isCanceled ) {
354
                if ( isCanceled ) {
(-)a/jumpto/apichanges.xml (+16 lines)
Lines 121-126 Link Here
121
            <issue number="138345"/>
121
            <issue number="138345"/>
122
        </change>                
122
        </change>                
123
123
124
        <change id="(Provider.Result.pendingResult">
125
            <api name="general"/>
126
            <summary>Added method (Type|Symbol)Provider.Result.pendingResult()</summary>
127
            <version major="1" minor="12"/>
128
            <date day="4" month="11" year="2009"/>
129
            <author login="pflaska"/>
130
            <compatibility addition="yes"/>
131
            <description>
132
                Added method TypeProvider.Result.pendingResult() and
133
                SymbolProvider.Result.pendingResult()  to notify 
134
                provider's caller that the provider should be called again.
135
            </description>
136
            <issue number="175998"/>
137
        </change>
138
        
139
    </changes>
124
    <!-- Now the surrounding HTML text and document structure: -->
140
    <!-- Now the surrounding HTML text and document structure: -->
125
141
126
    <htmlcontents>
142
    <htmlcontents>
(-)a/jumpto/manifest.mf (-1 / +1 lines)
Lines 2-6 Link Here
2
OpenIDE-Module: org.netbeans.modules.jumpto/1
2
OpenIDE-Module: org.netbeans.modules.jumpto/1
3
OpenIDE-Module-Layer: org/netbeans/modules/jumpto/resources/layer.xml
3
OpenIDE-Module-Layer: org/netbeans/modules/jumpto/resources/layer.xml
4
OpenIDE-Module-Localizing-Bundle: org/netbeans/modules/jumpto/resources/Bundle.properties
4
OpenIDE-Module-Localizing-Bundle: org/netbeans/modules/jumpto/resources/Bundle.properties
5
OpenIDE-Module-Specification-Version: 1.11
5
OpenIDE-Module-Specification-Version: 1.12
6
AutoUpdate-Show-In-Client: false
6
AutoUpdate-Show-In-Client: false
(-)a/jumpto/src/org/netbeans/modules/jumpto/symbol/SymbolProviderAccessor.java (+3 lines)
Lines 45-50 Link Here
45
import org.netbeans.spi.jumpto.symbol.SymbolProvider;
45
import org.netbeans.spi.jumpto.symbol.SymbolProvider;
46
import org.netbeans.spi.jumpto.type.SearchType;
46
import org.netbeans.spi.jumpto.type.SearchType;
47
import org.openide.util.Exceptions;
47
import org.openide.util.Exceptions;
48
import static org.netbeans.spi.jumpto.symbol.SymbolProvider.*;
48
49
49
/**
50
/**
50
 *
51
 *
Lines 65-68 Link Here
65
    public abstract SymbolProvider.Context createContext(Project p, String text, SearchType t);
66
    public abstract SymbolProvider.Context createContext(Project p, String text, SearchType t);
66
67
67
    public abstract SymbolProvider.Result createResult(List<? super SymbolDescriptor> result, String[] message);
68
    public abstract SymbolProvider.Result createResult(List<? super SymbolDescriptor> result, String[] message);
69
70
    public abstract int getRetry(Result result);
68
}
71
}
(-)a/jumpto/src/org/netbeans/modules/jumpto/type/GoToTypeAction.java (-34 / +46 lines)
Lines 63-68 Link Here
63
import java.util.Collections;
63
import java.util.Collections;
64
import java.util.Comparator;
64
import java.util.Comparator;
65
import java.util.List;
65
import java.util.List;
66
import java.util.logging.Level;
66
import java.util.logging.Logger;
67
import java.util.logging.Logger;
67
import java.util.regex.Pattern;
68
import java.util.regex.Pattern;
68
import javax.swing.AbstractAction;
69
import javax.swing.AbstractAction;
Lines 389-428 Link Here
389
            this.text = text;
390
            this.text = text;
390
            this.createTime = System.currentTimeMillis();
391
            this.createTime = System.currentTimeMillis();
391
            LOGGER.fine( "Worker for " + text + " - created after " + ( System.currentTimeMillis() - panel.time ) + " ms."  );                
392
            LOGGER.fine( "Worker for " + text + " - created after " + ( System.currentTimeMillis() - panel.time ) + " ms."  );                
392
       }
393
        }
393
        
394
394
        public void run() {
395
        public void run() {
395
            
396
            for (;;) {
396
            LOGGER.fine( "Worker for " + text + " - started " + ( System.currentTimeMillis() - createTime ) + " ms."  );                
397
                final int[] retry = new int[1];
397
            
398
                LOGGER.fine( "Worker for " + text + " - started " + ( System.currentTimeMillis() - createTime ) + " ms."  );
398
            final List<? extends TypeDescriptor> types = getTypeNames( text );
399
399
            if ( isCanceled ) {
400
                final List<? extends TypeDescriptor> types = getTypeNames( text, retry);
400
                LOGGER.fine( "Worker for " + text + " exited after cancel " + ( System.currentTimeMillis() - createTime ) + " ms."  );                                
401
                if ( isCanceled ) {
401
                return;
402
                    LOGGER.fine( "Worker for " + text + " exited after cancel " + ( System.currentTimeMillis() - createTime ) + " ms."  );
402
            }
403
                    return;
403
            ListModel model = Models.fromList(types);
404
                }
404
            if (typeFilter != null) {
405
                ListModel model = Models.fromList(types);
405
                model = LazyListModel.create(model, GoToTypeAction.this, 0.1, "Not computed yet");
406
                if (typeFilter != null) {
406
            }
407
                    model = LazyListModel.create(model, GoToTypeAction.this, 0.1, "Not computed yet");
407
            final ListModel fmodel = model;
408
                }
408
            if ( isCanceled ) {            
409
                final ListModel fmodel = model;
409
                LOGGER.fine( "Worker for " + text + " exited after cancel " + ( System.currentTimeMillis() - createTime ) + " ms."  );                                
410
                if ( isCanceled ) {
410
                return;
411
                    LOGGER.fine( "Worker for " + text + " exited after cancel " + ( System.currentTimeMillis() - createTime ) + " ms."  );
411
            }
412
                    return;
412
            
413
                }
413
            if ( !isCanceled && fmodel != null ) {                
414
414
                LOGGER.fine( "Worker for text " + text + " finished after " + ( System.currentTimeMillis() - createTime ) + " ms."  );                
415
                if ( !isCanceled && fmodel != null ) {
415
                SwingUtilities.invokeLater(new Runnable() {
416
                    LOGGER.fine( "Worker for text " + text + " finished after " + ( System.currentTimeMillis() - createTime ) + " ms."  );
416
                    public void run() {
417
                    SwingUtilities.invokeLater(new Runnable() {
417
                        panel.setModel(fmodel);
418
                        public void run() {
418
                        if (okButton != null && !types.isEmpty()) {
419
                            if (!types.isEmpty() || retry[0] == 0) {
419
                            okButton.setEnabled (true);
420
                                panel.setModel(fmodel);
421
                            }
422
                            if (okButton != null && !types.isEmpty()) {
423
                                okButton.setEnabled (true);
424
                            }
420
                        }
425
                        }
426
                    });
427
                }
428
                if (retry[0] > 0) {
429
                    try {
430
                        Thread.sleep(retry[0]);
431
                    } catch (InterruptedException ex) {
432
                            LOGGER.log(Level.WARNING, "Waiting for retry", ex);
421
                    }
433
                    }
422
                });
434
                } else {
423
            }
435
                    return;
424
            
436
                }
425
            
437
            } // for
426
        }
438
        }
427
        
439
        
428
        public void cancel() {
440
        public void cancel() {
Lines 440-446 Link Here
440
        }
452
        }
441
453
442
        @SuppressWarnings("unchecked")
454
        @SuppressWarnings("unchecked")
443
        private List<? extends TypeDescriptor> getTypeNames(String text) {
455
        private List<? extends TypeDescriptor> getTypeNames(String text, int[] retry) {
444
            // TODO: Search twice, first for current project, then for all projects
456
            // TODO: Search twice, first for current project, then for all projects
445
            List<TypeDescriptor> items;
457
            List<TypeDescriptor> items;
446
            // Multiple providers: merge results
458
            // Multiple providers: merge results
Lines 465-472 Link Here
465
                }
477
                }
466
                long delta = System.currentTimeMillis() - start;
478
                long delta = System.currentTimeMillis() - start;
467
                LOGGER.fine("Provider '" + provider.getDisplayName() + "' took " + delta + " ms.");
479
                LOGGER.fine("Provider '" + provider.getDisplayName() + "' took " + delta + " ms.");
468
                
469
            }
480
            }
481
            retry[0] = TypeProviderAccessor.DEFAULT.getRetry(result);
470
            if ( !isCanceled ) {   
482
            if ( !isCanceled ) {   
471
                //time = System.currentTimeMillis();
483
                //time = System.currentTimeMillis();
472
                Collections.sort(items, new TypeComparator());
484
                Collections.sort(items, new TypeComparator());
Lines 513-519 Link Here
513
    final void waitSearchFinished() {
525
    final void waitSearchFinished() {
514
        task.waitFinished();
526
        task.waitFinished();
515
    }
527
    }
516
    
528
517
    private static class Renderer extends DefaultListCellRenderer implements ChangeListener {
529
    private static class Renderer extends DefaultListCellRenderer implements ChangeListener {
518
         
530
         
519
        private MyPanel rendererComponent;
531
        private MyPanel rendererComponent;
(-)a/jumpto/src/org/netbeans/modules/jumpto/type/TypeProviderAccessor.java (+2 lines)
Lines 64-67 Link Here
64
    public abstract Context createContext(Project p, String text, SearchType t);
64
    public abstract Context createContext(Project p, String text, SearchType t);
65
65
66
    public abstract Result createResult(List<? super TypeDescriptor> result, String[] message);
66
    public abstract Result createResult(List<? super TypeDescriptor> result, String[] message);
67
68
    public abstract int getRetry(Result result);
67
}
69
}
(-)a/jumpto/src/org/netbeans/spi/jumpto/symbol/SymbolProvider.java (-1 / +22 lines)
Lines 135-141 Link Here
135
                @Override
135
                @Override
136
                public Result createResult(List<? super SymbolDescriptor> result, String[] message) {
136
                public Result createResult(List<? super SymbolDescriptor> result, String[] message) {
137
                    return new Result(result, message);
137
                    return new Result(result, message);
138
                }            
138
                }
139
140
                @Override
141
                public int getRetry(Result result) {
142
                    return result.retry;
143
                }
144
145
139
            };
146
            };
140
        }
147
        }
141
        
148
        
Lines 179-184 Link Here
179
        
186
        
180
        private List<? super SymbolDescriptor> result;
187
        private List<? super SymbolDescriptor> result;
181
        private String[] message;
188
        private String[] message;
189
        private int retry;
182
190
183
        Result(List<? super SymbolDescriptor> result, String[] message) {
191
        Result(List<? super SymbolDescriptor> result, String[] message) {
184
            this.result = result;
192
            this.result = result;
Lines 213-218 Link Here
213
        public void addResult(List<? extends SymbolDescriptor> symbolDescriptor) {
221
        public void addResult(List<? extends SymbolDescriptor> symbolDescriptor) {
214
            ((List)result).addAll(symbolDescriptor);    //workaround javac issue http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6507334 
222
            ((List)result).addAll(symbolDescriptor);    //workaround javac issue http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6507334 
215
        }
223
        }
224
225
        /**
226
         * Notify caller that a provider should be called again because
227
         * of incomplete or inaccurate results.
228
         *
229
         * Method can be used when long running task blocks the provider
230
         * to complete the data.
231
         *
232
         * @since 1.12
233
         */
234
        public void pendingResult() {
235
            retry = 2000;
236
        }
216
    }
237
    }
217
238
218
}
239
}
(-)a/jumpto/src/org/netbeans/spi/jumpto/type/TypeProvider.java (+19 lines)
Lines 138-143 Link Here
138
                public Result createResult(List<? super TypeDescriptor> result, String[] message) {
138
                public Result createResult(List<? super TypeDescriptor> result, String[] message) {
139
                    return new Result(result, message);
139
                    return new Result(result, message);
140
                }
140
                }
141
142
                @Override
143
                public int getRetry(Result result) {
144
                    return result.retry;
145
                }
141
            };
146
            };
142
        }
147
        }
143
        
148
        
Lines 182-187 Link Here
182
        
187
        
183
        private List<? super TypeDescriptor> result;
188
        private List<? super TypeDescriptor> result;
184
        private String[] message;
189
        private String[] message;
190
        private int retry;
185
191
186
        Result(List<? super TypeDescriptor> result, String[] message) {
192
        Result(List<? super TypeDescriptor> result, String[] message) {
187
            this.result = result;
193
            this.result = result;
Lines 216-221 Link Here
216
        public void addResult(List<? extends TypeDescriptor> typeDescriptor) {
222
        public void addResult(List<? extends TypeDescriptor> typeDescriptor) {
217
            ((List)result).addAll(typeDescriptor);  //workaround javac issue http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6507334
223
            ((List)result).addAll(typeDescriptor);  //workaround javac issue http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6507334
218
        }
224
        }
225
226
        /**
227
         * Notify caller that a provider should be called again because
228
         * of incomplete or inaccurate results.
229
         *
230
         * Method can be used when long running task blocks the provider
231
         * to complete the data.
232
         * 
233
         * @since 1.12
234
         */
235
        public void pendingResult() {
236
            retry = 2000;
237
        }
219
    }
238
    }
220
239
221
}
240
}

Return to bug 175998