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

(-)a/cnd.refactoring/src/org/netbeans/modules/cnd/refactoring/api/WhereUsedQueryConstants.java (-1 / +2 lines)
Lines 50-54 Link Here
50
    FIND_OVERRIDING_METHODS,
50
    FIND_OVERRIDING_METHODS,
51
    FIND_SUBCLASSES,
51
    FIND_SUBCLASSES,
52
    FIND_DIRECT_SUBCLASSES,
52
    FIND_DIRECT_SUBCLASSES,
53
    SEARCH_FROM_BASECLASS;
53
    SEARCH_FROM_BASECLASS,
54
    READ_WRITE;
54
}
55
}
(-)a/cnd.refactoring/src/org/netbeans/modules/cnd/refactoring/elements/CsmRefactoringElementImpl.java (-4 / +216 lines)
Lines 30-42 Link Here
30
 */
30
 */
31
package org.netbeans.modules.cnd.refactoring.elements;
31
package org.netbeans.modules.cnd.refactoring.elements;
32
32
33
import java.util.Collection;
33
import java.util.EnumSet;
34
import java.util.EnumSet;
35
import java.util.concurrent.atomic.AtomicReference;
34
import javax.swing.Icon;
36
import javax.swing.Icon;
35
import javax.swing.text.BadLocationException;
37
import javax.swing.text.BadLocationException;
36
import javax.swing.text.StyledDocument;
38
import javax.swing.text.StyledDocument;
37
import org.netbeans.api.editor.document.LineDocumentUtils;
39
import org.netbeans.api.editor.document.LineDocumentUtils;
40
import org.netbeans.api.lexer.Token;
41
import org.netbeans.api.lexer.TokenId;
42
import org.netbeans.api.lexer.TokenSequence;
43
import org.netbeans.cnd.api.lexer.CndLexerUtilities;
44
import org.netbeans.cnd.api.lexer.CppTokenId;
38
import org.netbeans.editor.BaseDocument;
45
import org.netbeans.editor.BaseDocument;
39
import org.netbeans.modules.cnd.api.model.CsmFile;
46
import org.netbeans.modules.cnd.api.model.CsmFile;
47
import org.netbeans.modules.cnd.api.model.CsmObject;
48
import org.netbeans.modules.cnd.api.model.util.CsmKindUtilities;
40
import org.netbeans.modules.cnd.api.model.xref.CsmReference;
49
import org.netbeans.modules.cnd.api.model.xref.CsmReference;
41
import org.netbeans.modules.cnd.api.model.xref.CsmReferenceKind;
50
import org.netbeans.modules.cnd.api.model.xref.CsmReferenceKind;
42
import org.netbeans.modules.cnd.api.model.xref.CsmReferenceResolver;
51
import org.netbeans.modules.cnd.api.model.xref.CsmReferenceResolver;
Lines 60-65 Link Here
60
 */
69
 */
61
public class CsmRefactoringElementImpl extends SimpleRefactoringElementImplementation 
70
public class CsmRefactoringElementImpl extends SimpleRefactoringElementImplementation 
62
        implements FiltersManager.Filterable {
71
        implements FiltersManager.Filterable {
72
    
73
    public enum RW {
74
        Read,
75
        Write,
76
        ReadWrite
77
    }
63
    private static final boolean LAZY = false;
78
    private static final boolean LAZY = false;
64
    private final CsmReference elem;
79
    private final CsmReference elem;
65
    private final PositionBounds bounds;
80
    private final PositionBounds bounds;
Lines 72-80 Link Here
72
    private final boolean isInMacros;
87
    private final boolean isInMacros;
73
    private final boolean isInDeadCode;
88
    private final boolean isInDeadCode;
74
    private final boolean isInComments;
89
    private final boolean isInComments;
90
    private final RW rw;
75
    
91
    
76
    public CsmRefactoringElementImpl(PositionBounds bounds, 
92
    public CsmRefactoringElementImpl(PositionBounds bounds, 
77
            CsmReference elem, FileObject fo, String displayText) {
93
            CsmReference elem, FileObject fo, String displayText, CsmObject referencedObject) {
78
        this.elem = elem;
94
        this.elem = elem;
79
        this.bounds = bounds;
95
        this.bounds = bounds;
80
        this.fo = fo;
96
        this.fo = fo;
Lines 90-95 Link Here
90
        this.isInMacros = CsmReferenceResolver.getDefault().isKindOf(elem, EnumSet.of(CsmReferenceKind.IN_PREPROCESSOR_DIRECTIVE));
106
        this.isInMacros = CsmReferenceResolver.getDefault().isKindOf(elem, EnumSet.of(CsmReferenceKind.IN_PREPROCESSOR_DIRECTIVE));
91
        this.isInDeadCode = CsmReferenceResolver.getDefault().isKindOf(elem, EnumSet.of(CsmReferenceKind.IN_DEAD_BLOCK));
107
        this.isInDeadCode = CsmReferenceResolver.getDefault().isKindOf(elem, EnumSet.of(CsmReferenceKind.IN_DEAD_BLOCK));
92
        this.isInComments = CsmReferenceResolver.getDefault().isKindOf(elem, EnumSet.of(CsmReferenceKind.COMMENT));
108
        this.isInComments = CsmReferenceResolver.getDefault().isKindOf(elem, EnumSet.of(CsmReferenceKind.COMMENT));
109
        if (referencedObject != null && CsmKindUtilities.isVariable(referencedObject)) {
110
            this.rw = getRW(elem);
111
        } else {
112
            this.rw = RW.Read;
113
        }
93
    }
114
    }
94
115
95
    private boolean isScope(CsmReference ref) {
116
    private boolean isScope(CsmReference ref) {
Lines 111-117 Link Here
111
        }
132
        }
112
        return false;
133
        return false;
113
    }
134
    }
114
        
135
136
    private RW getRW(final CsmReference ref) {
137
        final AtomicReference<RW> out = new AtomicReference<>(RW.Write);
138
        CsmFile csmFile = ref.getContainingFile();
139
        CloneableEditorSupport ces = CsmUtilities.findCloneableEditorSupport(csmFile);
140
        StyledDocument stDoc = CsmUtilities.openDocument(ces);
141
        if (stDoc instanceof BaseDocument) {
142
            final BaseDocument doc = (BaseDocument) stDoc;
143
            doc.render(new Runnable() {
144
                @Override
145
                public void run() {
146
                    int offset = ref.getStartOffset();
147
                    TokenSequence<TokenId> cppTokenSequence = CndLexerUtilities.getCppTokenSequence(doc, offset, true, false);
148
                    if (cppTokenSequence == null) {
149
                        return;
150
                    }
151
                    CppTokenId nextImportantToken = null;
152
                    cppTokenSequence.move(offset);
153
                    if (cppTokenSequence.moveNext()) {
154
                        next:
155
                        while (cppTokenSequence.moveNext()) {
156
                            Token<TokenId> token = cppTokenSequence.token();
157
                            TokenId id = token.id();
158
                            if (id instanceof CppTokenId) {
159
                                switch ((CppTokenId) id) {
160
                                    // skip unimportant
161
                                    case WHITESPACE:
162
                                    case ESCAPED_LINE:
163
                                    case ESCAPED_WHITESPACE:
164
                                    case NEW_LINE:
165
                                    case LINE_COMMENT:
166
                                    case BLOCK_COMMENT:
167
                                    case DOXYGEN_COMMENT:
168
                                    case DOXYGEN_LINE_COMMENT:
169
                                        break;
170
                                    // asignments
171
                                    case EQ:
172
                                    case PLUSEQ:
173
                                    case MINUSEQ:
174
                                    case STAREQ:
175
                                    case SLASHEQ:
176
                                    case AMPEQ:
177
                                    case BAREQ:
178
                                    case CARETEQ:
179
                                    case PERCENTEQ:
180
                                    case LTLTEQ:
181
                                    case GTGTEQ:
182
                                    // increments
183
                                    case PLUSPLUS:
184
                                    case MINUSMINUS:
185
                                        out.set(RW.Write);
186
                                        return;
187
                                    // supose that binary operators have a read access
188
                                    case PLUS:
189
                                    case MINUS:
190
                                    case GT:
191
                                    case LT:
192
                                    case QUESTION:
193
                                    case EQEQ:
194
                                    case LTEQ:
195
                                    case GTEQ:
196
                                    case NOTEQ:
197
                                    case AMPAMP:
198
                                    case BARBAR:
199
                                    case STAR:
200
                                    case SLASH:
201
                                    case BAR:
202
                                    case CARET:
203
                                    case PERCENT:
204
                                    case LTLT:
205
                                    case GTGT:
206
                                        out.set(RW.Read);
207
                                        return;
208
                                    case COMMA:
209
                                    case COLON:
210
                                    case SEMICOLON:
211
                                    case RBRACKET:
212
                                    case RPAREN:
213
                                    case DOT:
214
                                    case DOTMBR:
215
                                    case ARROW:
216
                                    case ARROWMBR:
217
                                    case SCOPE:
218
                                        nextImportantToken = (CppTokenId) id;
219
                                        break next;
220
                                    default:
221
                                        break next;
222
                                }
223
                            }
224
                        }
225
                    }
226
                    
227
                    cppTokenSequence.move(offset);
228
                    prev:
229
                    while (cppTokenSequence.movePrevious()) {
230
                        Token<TokenId> token = cppTokenSequence.token();
231
                        TokenId id = token.id();
232
                        if (id instanceof CppTokenId) {
233
                            switch ((CppTokenId) id) {
234
                                // skip unimportant
235
                                case WHITESPACE:
236
                                case ESCAPED_LINE:
237
                                case ESCAPED_WHITESPACE:
238
                                case NEW_LINE:
239
                                case LINE_COMMENT:
240
                                case BLOCK_COMMENT:
241
                                case DOXYGEN_COMMENT:
242
                                case DOXYGEN_LINE_COMMENT:
243
                                    break;
244
                                // increments
245
                                case PLUSPLUS:
246
                                case MINUSMINUS:
247
                                    out.set(RW.Write);
248
                                    return;
249
                                case EQ:
250
                                case PLUSEQ:
251
                                case MINUSEQ:
252
                                case STAREQ:
253
                                case SLASHEQ:
254
                                case AMPEQ:
255
                                case BAREQ:
256
                                case CARETEQ:
257
                                case PERCENTEQ:
258
                                case LTLTEQ:
259
                                case GTGTEQ:
260
                                    out.set(RW.Read);
261
                                    return;
262
                                // supose that unary operators have a read access
263
                                case NOT:
264
                                case TILDE:
265
                                    out.set(RW.Read);
266
                                    return;
267
                                // supose that unary/binary operators have a read access
268
                                case PLUS:
269
                                case MINUS:
270
                                    out.set(RW.Read);
271
                                    return;
272
                                // supose that binary operators have a read access
273
                                case GT:
274
                                case LT:
275
                                case QUESTION:
276
                                case EQEQ:
277
                                case LTEQ:
278
                                case GTEQ:
279
                                case NOTEQ:
280
                                case AMPAMP:
281
                                case BARBAR:
282
                                case STAR:
283
                                case SLASH:
284
                                case BAR:
285
                                case CARET:
286
                                case PERCENT:
287
                                case LTLT:
288
                                case GTGT:
289
                                    out.set(RW.Read);
290
                                    return;
291
                                //needs further investigation
292
                                case COMMA:
293
                                case LPAREN:
294
                                case DOT:
295
                                case DOTMBR:
296
                                case ARROW:
297
                                case ARROWMBR:
298
                                case SCOPE:
299
                                    out.set(RW.Read);
300
                                    return;
301
                                //needs further investigation
302
                                case AMP:
303
                                    out.set(RW.Read);
304
                                    return;
305
                                //needs further investigation
306
                                default:
307
                                    out.set(RW.Read);
308
                                    return;
309
                            }
310
                        }
311
                    }
312
                }
313
            });
314
        }
315
        return out.get();
316
    }
317
    
115
    @Override
318
    @Override
116
    public String getText() {
319
    public String getText() {
117
        return elem.getText().toString();
320
        return elem.getText().toString();
Lines 153-168 Link Here
153
        return "{" + "bounds=" + bounds + ", displayText=" + displayText + ", enclosing=" + enclosing + ", fo=" + fo + '}'; // NOI18N
356
        return "{" + "bounds=" + bounds + ", displayText=" + displayText + ", enclosing=" + enclosing + ", fo=" + fo + '}'; // NOI18N
154
    }
357
    }
155
    
358
    
156
    public static RefactoringElementImplementation create(CsmReference ref,boolean nameInBold) {
359
    public static RefactoringElementImplementation create(CsmReference ref, boolean nameInBold, CsmObject referencedObject) {
157
        CsmFile csmFile = ref.getContainingFile();
360
        CsmFile csmFile = ref.getContainingFile();
158
        FileObject fo = CsmUtilities.getFileObject(csmFile);
361
        FileObject fo = CsmUtilities.getFileObject(csmFile);
159
        PositionBounds bounds = CsmUtilities.createPositionBounds(ref);
362
        PositionBounds bounds = CsmUtilities.createPositionBounds(ref);
160
        String displayText = LAZY ? null : CsmReferenceSupport.getContextLineHtml(ref, nameInBold).toString();
363
        String displayText = LAZY ? null : CsmReferenceSupport.getContextLineHtml(ref, nameInBold).toString();
161
        return new CsmRefactoringElementImpl(bounds, ref, fo, displayText);
364
        return new CsmRefactoringElementImpl(bounds, ref, fo, displayText, referencedObject);
162
    }
365
    }
163
366
164
    @Override
367
    @Override
165
    public boolean filter(FiltersManager manager) {
368
    public boolean filter(FiltersManager manager) {
369
        if (rw == RW.Read && !manager.isSelected(CsmWhereUsedFilters.READ.getKey())) {
370
            return false;
371
        }
372
        if (rw == RW.Write && !manager.isSelected(CsmWhereUsedFilters.WRITE.getKey())) {
373
            return false;
374
        }
375
        if (rw == RW.ReadWrite && !manager.isSelected(CsmWhereUsedFilters.READ_WRITE.getKey())) {
376
            return false;
377
        }
166
        if (isDecl && !manager.isSelected(CsmWhereUsedFilters.DECLARATIONS.getKey())) {
378
        if (isDecl && !manager.isSelected(CsmWhereUsedFilters.DECLARATIONS.getKey())) {
167
            return false;
379
            return false;
168
        }
380
        }
(-)a/cnd.refactoring/src/org/netbeans/modules/cnd/refactoring/plugins/Bundle.properties (+3 lines)
Lines 266-271 Link Here
266
#Find Usages Filters
266
#Find Usages Filters
267
TXT_Filter_Comments=Comments filter
267
TXT_Filter_Comments=Comments filter
268
TXT_Filter_DeadCode=Dead code filter
268
TXT_Filter_DeadCode=Dead code filter
269
TXT_Filter_Read=Read filter
270
TXT_Filter_Write=Write filter
271
TXT_Filter_ReadWrite=Read/Write filter
269
TXT_Filter_Declarations=Declarations and definitions filter
272
TXT_Filter_Declarations=Declarations and definitions filter
270
TXT_Filter_Macros=Macros filter
273
TXT_Filter_Macros=Macros filter
271
TXT_Filter_Scope=Class name in qualified name filter
274
TXT_Filter_Scope=Class name in qualified name filter
(-)a/cnd.refactoring/src/org/netbeans/modules/cnd/refactoring/plugins/CsmWhereUsedFilters.java (+3 lines)
Lines 50-55 Link Here
50
    COMMENTS("filter-comments"), // NOI18N
50
    COMMENTS("filter-comments"), // NOI18N
51
    DEAD_CODE("filter-deadcode"), // NOI18N
51
    DEAD_CODE("filter-deadcode"), // NOI18N
52
    MACROS("filter-macros"), // NOI18N
52
    MACROS("filter-macros"), // NOI18N
53
    READ("filter-read"), // NOI18N
54
    WRITE("filter-write"), // NOI18N
55
    READ_WRITE("filter-readwrite"), // NOI18N
53
    DECLARATIONS("filter-declarations"), // NOI18N
56
    DECLARATIONS("filter-declarations"), // NOI18N
54
    SCOPE("filter-scope"); // NOI18N
57
    SCOPE("filter-scope"); // NOI18N
55
    
58
    
(-)a/cnd.refactoring/src/org/netbeans/modules/cnd/refactoring/plugins/CsmWhereUsedQueryPlugin.java (-7 / +27 lines)
Lines 306-311 Link Here
306
        return refactoring.getBooleanValue(WhereUsedQueryConstants.SEARCH_FROM_BASECLASS);
306
        return refactoring.getBooleanValue(WhereUsedQueryConstants.SEARCH_FROM_BASECLASS);
307
    }
307
    }
308
308
309
    private boolean isReadWriteAccess() {
310
        return refactoring.getBooleanValue(WhereUsedQueryConstants.READ_WRITE);
311
    }
312
309
    private boolean isSearchInComments() {
313
    private boolean isSearchInComments() {
310
        return refactoring.getBooleanValue(WhereUsedQuery.SEARCH_IN_COMMENTS);
314
        return refactoring.getBooleanValue(WhereUsedQuery.SEARCH_IN_COMMENTS);
311
    }
315
    }
Lines 344-350 Link Here
344
                                        accept = !CsmReferenceResolver.getDefault().isKindOf(csmReference, EnumSet.of(CsmReferenceKind.DECLARATION, CsmReferenceKind.DEFINITION));
348
                                        accept = !CsmReferenceResolver.getDefault().isKindOf(csmReference, EnumSet.of(CsmReferenceKind.DECLARATION, CsmReferenceKind.DEFINITION));
345
                                    }
349
                                    }
346
                                    if (accept) {
350
                                    if (accept) {
347
                                        elements.add(CsmRefactoringElementImpl.create(csmReference, true));
351
                                        elements.add(CsmRefactoringElementImpl.create(csmReference, true, curObj));
348
                                    }
352
                                    }
349
                                }
353
                                }
350
                            } finally {
354
                            } finally {
Lines 464-469 Link Here
464
        filtersDescription.addFilter(CsmWhereUsedFilters.DEAD_CODE.getKey(),
468
        filtersDescription.addFilter(CsmWhereUsedFilters.DEAD_CODE.getKey(),
465
                NbBundle.getMessage(this.getClass(), "TXT_Filter_DeadCode"), true,
469
                NbBundle.getMessage(this.getClass(), "TXT_Filter_DeadCode"), true,
466
                ImageUtilities.loadImageIcon("org/netbeans/modules/cnd/refactoring/resources/found_item_dead.png", false)); //NOI18N
470
                ImageUtilities.loadImageIcon("org/netbeans/modules/cnd/refactoring/resources/found_item_dead.png", false)); //NOI18N
471
472
        filtersDescription.addFilter(CsmWhereUsedFilters.READ.getKey(), 
473
                NbBundle.getMessage(this.getClass(), "TXT_Filter_Read"), true,
474
                ImageUtilities.loadImageIcon("org/netbeans/modules/cnd/refactoring/resources/found_item_read.png", false)); //NOI18N
475
        filtersDescription.addFilter(CsmWhereUsedFilters.WRITE.getKey(),
476
                NbBundle.getMessage(this.getClass(), "TXT_Filter_Write"), true,
477
                ImageUtilities.loadImageIcon("org/netbeans/modules/cnd/refactoring/resources/found_item_write.png", false)); //NOI18N
478
        filtersDescription.addFilter(CsmWhereUsedFilters.READ_WRITE.getKey(),
479
                NbBundle.getMessage(this.getClass(), "TXT_Filter_ReadWrite"), true,
480
                ImageUtilities.loadImageIcon("org/netbeans/modules/cnd/refactoring/resources/found_item_readwrite.png", false)); //NOI18N
481
467
        filtersDescription.addFilter(CsmWhereUsedFilters.DECLARATIONS.getKey(),
482
        filtersDescription.addFilter(CsmWhereUsedFilters.DECLARATIONS.getKey(),
468
                NbBundle.getMessage(this.getClass(), "TXT_Filter_Declarations"), false,
483
                NbBundle.getMessage(this.getClass(), "TXT_Filter_Declarations"), false,
469
                ImageUtilities.loadImageIcon(CsmImageName.DECLARATION_FILTER, false));
484
                ImageUtilities.loadImageIcon(CsmImageName.DECLARATION_FILTER, false));
Lines 481-486 Link Here
481
            filtersDescription.enable(CsmWhereUsedFilters.COMMENTS.getKey());
496
            filtersDescription.enable(CsmWhereUsedFilters.COMMENTS.getKey());
482
        }
497
        }
483
        filtersDescription.enable(CsmWhereUsedFilters.DEAD_CODE.getKey());
498
        filtersDescription.enable(CsmWhereUsedFilters.DEAD_CODE.getKey());
499
        if (isReadWriteAccess()) {
500
            filtersDescription.enable(CsmWhereUsedFilters.READ.getKey());
501
            filtersDescription.enable(CsmWhereUsedFilters.WRITE.getKey());
502
            filtersDescription.enable(CsmWhereUsedFilters.READ_WRITE.getKey());
503
        }
484
        if (!isFindDirectSubclassesOnly() && !isFindSubclasses()) {
504
        if (!isFindDirectSubclassesOnly() && !isFindSubclasses()) {
485
            filtersDescription.enable(CsmWhereUsedFilters.DECLARATIONS.getKey());
505
            filtersDescription.enable(CsmWhereUsedFilters.DECLARATIONS.getKey());
486
            filtersDescription.enable(CsmWhereUsedFilters.SCOPE.getKey());
506
            filtersDescription.enable(CsmWhereUsedFilters.SCOPE.getKey());
Lines 531-537 Link Here
531
                                accept = !CsmReferenceResolver.getDefault().isKindOf(csmReference, EnumSet.of(CsmReferenceKind.DECLARATION, CsmReferenceKind.DEFINITION));
551
                                accept = !CsmReferenceResolver.getDefault().isKindOf(csmReference, EnumSet.of(CsmReferenceKind.DECLARATION, CsmReferenceKind.DEFINITION));
532
                            }
552
                            }
533
                            if (accept) {
553
                            if (accept) {
534
                                fileElems.add(CsmRefactoringElementImpl.create(csmReference, true));
554
                                fileElems.add(CsmRefactoringElementImpl.create(csmReference, true, objs.length > 0 ? objs[0] : null));
535
                            }
555
                            }
536
                        }
556
                        }
537
                    } finally {
557
                    } finally {
Lines 569-581 Link Here
569
            overrides.add(csmMethod);
589
            overrides.add(csmMethod);
570
            for (CsmMethod method : overrides) {
590
            for (CsmMethod method : overrides) {
571
                CsmReference declRef = CsmReferenceSupport.createObjectReference(method);
591
                CsmReference declRef = CsmReferenceSupport.createObjectReference(method);
572
                elements.add(CsmRefactoringElementImpl.create(declRef, false));
592
                elements.add(CsmRefactoringElementImpl.create(declRef, false, method));
573
                // find defintion of method if needed
593
                // find defintion of method if needed
574
                if (!CsmKindUtilities.isFunctionDefinition(method)) {
594
                if (!CsmKindUtilities.isFunctionDefinition(method)) {
575
                    CsmFunctionDefinition def = method.getDefinition();
595
                    CsmFunctionDefinition def = method.getDefinition();
576
                    if (def != null) {
596
                    if (def != null) {
577
                        CsmReference defRef = CsmReferenceSupport.createObjectReference(def);
597
                        CsmReference defRef = CsmReferenceSupport.createObjectReference(def);
578
                        elements.add(CsmRefactoringElementImpl.create(defRef, false));
598
                        elements.add(CsmRefactoringElementImpl.create(defRef, false, method));
579
                    }
599
                    }
580
                }
600
                }
581
            }
601
            }
Lines 606-619 Link Here
606
                for (CsmReference csmReference : refs) {
626
                for (CsmReference csmReference : refs) {
607
                    for (CsmProject prj : prjs) {
627
                    for (CsmProject prj : prjs) {
608
                        if (csmReference.getContainingFile().getProject().equals(prj)) {
628
                        if (csmReference.getContainingFile().getProject().equals(prj)) {
609
                            elements.add(CsmRefactoringElementImpl.create(csmReference, false));
629
                            elements.add(CsmRefactoringElementImpl.create(csmReference, false, csmFile));
610
                            break;
630
                            break;
611
                        }
631
                        }
612
                    }
632
                    }
613
                }
633
                }
614
            } else {
634
            } else {
615
                for (CsmReference csmReference : refs) {
635
                for (CsmReference csmReference : refs) {
616
                    elements.add(CsmRefactoringElementImpl.create(csmReference, false));
636
                    elements.add(CsmRefactoringElementImpl.create(csmReference, false, csmFile));
617
                }
637
                }
618
            }
638
            }
619
        }
639
        }
Lines 630-636 Link Here
630
                CsmClass referencedClass = (CsmClass) obj;
650
                CsmClass referencedClass = (CsmClass) obj;
631
                Collection<CsmReference> refs = CsmTypeHierarchyResolver.getDefault().getSubTypes(referencedClass, directSubtypesOnly);
651
                Collection<CsmReference> refs = CsmTypeHierarchyResolver.getDefault().getSubTypes(referencedClass, directSubtypesOnly);
632
                for (CsmReference csmReference : refs) {
652
                for (CsmReference csmReference : refs) {
633
                    elements.add(CsmRefactoringElementImpl.create(csmReference, false));
653
                    elements.add(CsmRefactoringElementImpl.create(csmReference, false, startClass));
634
                }
654
                }
635
            }
655
            }
636
        }
656
        }
(-)a/cnd.refactoring/src/org/netbeans/modules/cnd/refactoring/ui/WhereUsedQueryUI.java (+5 lines)
Lines 104-117 Link Here
104
            assert panel != null;
104
            assert panel != null;
105
            query.putValue(WhereUsedQuery.SEARCH_IN_COMMENTS,panel.isSearchInComments());
105
            query.putValue(WhereUsedQuery.SEARCH_IN_COMMENTS,panel.isSearchInComments());
106
            
106
            
107
            
107
            Collection<CsmProject> prjs = CsmRefactoringUtils.getRelatedCsmProjects(this.origObject, panel.getScopeProject());
108
            Collection<CsmProject> prjs = CsmRefactoringUtils.getRelatedCsmProjects(this.origObject, panel.getScopeProject());
108
            CsmProject[] ar = prjs.toArray(new CsmProject[prjs.size()]);
109
            CsmProject[] ar = prjs.toArray(new CsmProject[prjs.size()]);
109
            query.getContext().add(ar);
110
            query.getContext().add(ar);
110
111
112
            query.putValue(WhereUsedQueryConstants.READ_WRITE, false);
111
            CsmObject refObj = panel.getReferencedObject();
113
            CsmObject refObj = panel.getReferencedObject();
112
            if (refObj == null) {
114
            if (refObj == null) {
113
                query.setRefactoringSource(Lookup.EMPTY);
115
                query.setRefactoringSource(Lookup.EMPTY);
114
            } else {
116
            } else {
117
                if (CsmKindUtilities.isVariable(refObj)) {
118
                    query.putValue(WhereUsedQueryConstants.READ_WRITE, true);
119
                }
115
                query.setRefactoringSource(Lookups.singleton(CsmRefactoringUtils.getHandler(refObj)));
120
                query.setRefactoringSource(Lookups.singleton(CsmRefactoringUtils.getHandler(refObj)));
116
            }
121
            }
117
            if (panel.isVirtualMethod()) {
122
            if (panel.isVirtualMethod()) {

Return to bug 268402