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

(-)a/cnd.completion/src/org/netbeans/modules/cnd/completion/csm/CsmProjectContentResolver.java (-3 / +8 lines)
Lines 1344-1350 Link Here
1344
                                }
1344
                                }
1345
                            }
1345
                            }
1346
                        }
1346
                        }
1347
                        VisibilityInfo nextInfo = getNextInheritanceInfo(minVisibility, inherit, inheritanceLevel, friend);
1347
                        VisibilityInfo nextInfo = getNextInheritanceInfo(contextDeclaration, minVisibility, inherit, inheritanceLevel, friend);
1348
                        CsmVisibility nextMinVisibility = nextInfo.visibility;
1348
                        CsmVisibility nextMinVisibility = nextInfo.visibility;
1349
                        int nextInheritanceLevel = nextInfo.inheritanceLevel;
1349
                        int nextInheritanceLevel = nextInfo.inheritanceLevel;
1350
1350
Lines 1392-1398 Link Here
1392
            CsmClass baseClass = CsmInheritanceUtilities.getCsmClass(inherit);
1392
            CsmClass baseClass = CsmInheritanceUtilities.getCsmClass(inherit);
1393
            if (baseClass != null) {
1393
            if (baseClass != null) {
1394
                if (!baseClass.equals(csmClass)) {
1394
                if (!baseClass.equals(csmClass)) {
1395
                    VisibilityInfo nextInfo = getNextInheritanceInfo(minVisibility, inherit, inheritanceLevel, friend);
1395
                    VisibilityInfo nextInfo = getNextInheritanceInfo(contextDeclaration, minVisibility, inherit, inheritanceLevel, friend);
1396
                    CsmVisibility nextMinVisibility = nextInfo.visibility;
1396
                    CsmVisibility nextMinVisibility = nextInfo.visibility;
1397
                    int nextInheritanceLevel = nextInfo.inheritanceLevel;
1397
                    int nextInheritanceLevel = nextInfo.inheritanceLevel;
1398
                    if (nextMinVisibility != CsmVisibility.NONE) {
1398
                    if (nextMinVisibility != CsmVisibility.NONE) {
Lines 1666-1678 Link Here
1666
        return new VisibilityInfo(inheritanceLevel, minVisibility, friend);
1666
        return new VisibilityInfo(inheritanceLevel, minVisibility, friend);
1667
    }
1667
    }
1668
1668
1669
    private VisibilityInfo getNextInheritanceInfo(CsmVisibility curMinVisibility, CsmInheritance inherit, int curInheritanceLevel, boolean friend) {
1669
    private VisibilityInfo getNextInheritanceInfo(CsmOffsetableDeclaration contextDeclaration, CsmVisibility curMinVisibility, CsmInheritance inherit, int curInheritanceLevel, boolean friend) {
1670
        CsmVisibility nextMinVisibility;
1670
        CsmVisibility nextMinVisibility;
1671
        int nextInheritanceLevel = curInheritanceLevel;
1671
        int nextInheritanceLevel = curInheritanceLevel;
1672
        if (curInheritanceLevel == NO_INHERITANCE) {
1672
        if (curInheritanceLevel == NO_INHERITANCE) {
1673
            if(friend) {
1673
            if(friend) {
1674
                nextMinVisibility = CsmInheritanceUtilities.mergeInheritedVisibility(curMinVisibility, inherit.getVisibility());
1674
                nextMinVisibility = CsmInheritanceUtilities.mergeInheritedVisibility(curMinVisibility, inherit.getVisibility());
1675
                nextInheritanceLevel = CHILD_INHERITANCE;
1675
                nextInheritanceLevel = CHILD_INHERITANCE;
1676
            } else if (contextDeclaration == null && curMinVisibility == CsmInheritanceUtilities.MAX_VISIBILITY && inherit.getVisibility() == CsmVisibility.PUBLIC) {
1677
                // We are in global context => it may be a definition of inner member (which must be visible)
1678
                // so keep the MAX_VISIBILITY. Note, that this is a hack and different compilers have different behavior on that matter
1679
                nextMinVisibility = CsmInheritanceUtilities.MAX_VISIBILITY;
1680
                nextInheritanceLevel = NO_INHERITANCE;
1676
            } else {
1681
            } else {
1677
                nextMinVisibility = CsmInheritanceUtilities.mergeExtInheritedVisibility(curMinVisibility, inherit.getVisibility());
1682
                nextMinVisibility = CsmInheritanceUtilities.mergeExtInheritedVisibility(curMinVisibility, inherit.getVisibility());
1678
                nextInheritanceLevel = NO_INHERITANCE;
1683
                nextInheritanceLevel = NO_INHERITANCE;
(-)106fa19e66ad (+21 lines)
Added Link Here
1
namespace bug267382 {
2
    class Base267382 {
3
    private:
4
        class Inner267382 {
5
        private:
6
            static int y267382;
7
            virtual void foo267382();
8
        };
9
    };
10
    
11
    class Middle267382 : public Base267382 {};
12
13
    class Derived267382 : public Middle267382 {};
14
15
    int Derived267382::Inner267382::y267382 = 0;
16
    
17
    void Derived267382::Inner267382::foo267382() { 
18
        y267382 = 10;
19
        return;
20
    }   
21
}
(-)a/cnd.completion/test/unit/src/org/netbeans/modules/cnd/completion/cplusplus/hyperlink/BasicHyperlinkTestCase.java (+7 lines)
Lines 1236-1241 Link Here
1236
        performTest("bug258511.cpp", 7, 10, "bug258511.cpp", 2, 3);
1236
        performTest("bug258511.cpp", 7, 10, "bug258511.cpp", 2, 3);
1237
    }
1237
    }
1238
    
1238
    
1239
    public void testBug267382() throws Exception {
1240
        // Bug 267382 - Out of class function definition is not recognized under certain conditions
1241
        performTest("bug267382.cpp", 7, 29, "bug267382.cpp", 17, 5);
1242
        performTest("bug267382.cpp", 17, 41, "bug267382.cpp", 7, 13);
1243
        performTest("bug267382.cpp", 15, 40, "bug267382.cpp", 6, 13);
1244
    }
1245
    
1239
    public static class Failed extends HyperlinkBaseTestCase {
1246
    public static class Failed extends HyperlinkBaseTestCase {
1240
1247
1241
        @Override
1248
        @Override
(-)a/cnd.modelimpl/src/org/netbeans/modules/cnd/modelimpl/csm/FunctionImplEx.java (-1 / +28 lines)
Lines 46-51 Link Here
46
46
47
import java.io.IOException;
47
import java.io.IOException;
48
import java.util.ArrayList;
48
import java.util.ArrayList;
49
import java.util.Collection;
49
import java.util.Iterator;
50
import java.util.Iterator;
50
import java.util.List;
51
import java.util.List;
51
import java.util.Map;
52
import java.util.Map;
Lines 58-69 Link Here
58
import org.netbeans.modules.cnd.api.model.CsmNamespace;
59
import org.netbeans.modules.cnd.api.model.CsmNamespace;
59
import org.netbeans.modules.cnd.api.model.CsmNamespaceDefinition;
60
import org.netbeans.modules.cnd.api.model.CsmNamespaceDefinition;
60
import org.netbeans.modules.cnd.api.model.CsmObject;
61
import org.netbeans.modules.cnd.api.model.CsmObject;
62
import org.netbeans.modules.cnd.api.model.CsmOffsetable;
61
import org.netbeans.modules.cnd.api.model.CsmOffsetableDeclaration;
63
import org.netbeans.modules.cnd.api.model.CsmOffsetableDeclaration;
62
import org.netbeans.modules.cnd.api.model.CsmQualifiedNamedElement;
64
import org.netbeans.modules.cnd.api.model.CsmQualifiedNamedElement;
63
import org.netbeans.modules.cnd.api.model.CsmScope;
65
import org.netbeans.modules.cnd.api.model.CsmScope;
66
import org.netbeans.modules.cnd.api.model.services.CsmExpressionResolver;
64
import org.netbeans.modules.cnd.api.model.services.CsmSelect;
67
import org.netbeans.modules.cnd.api.model.services.CsmSelect;
65
import org.netbeans.modules.cnd.api.model.services.CsmSelect.CsmFilter;
68
import org.netbeans.modules.cnd.api.model.services.CsmSelect.CsmFilter;
69
import org.netbeans.modules.cnd.api.model.services.CsmSymbolResolver;
70
import org.netbeans.modules.cnd.api.model.util.CsmBaseUtilities;
66
import org.netbeans.modules.cnd.api.model.util.CsmKindUtilities;
71
import org.netbeans.modules.cnd.api.model.util.CsmKindUtilities;
72
import org.netbeans.modules.cnd.apt.utils.APTUtils;
67
import org.netbeans.modules.cnd.modelimpl.content.file.FileContent;
73
import org.netbeans.modules.cnd.modelimpl.content.file.FileContent;
68
import org.netbeans.modules.cnd.modelimpl.csm.core.AstRenderer;
74
import org.netbeans.modules.cnd.modelimpl.csm.core.AstRenderer;
69
import org.netbeans.modules.cnd.modelimpl.csm.core.AstUtil;
75
import org.netbeans.modules.cnd.modelimpl.csm.core.AstUtil;
Lines 160-167 Link Here
160
	CharSequence[] cnn = classOrNspNames;
166
	CharSequence[] cnn = classOrNspNames;
161
	if( cnn != null && cnn.length > 0) {
167
	if( cnn != null && cnn.length > 0) {
162
            Resolver resolver = ResolverFactory.createResolver(this);
168
            Resolver resolver = ResolverFactory.createResolver(this);
169
            CsmObject obj = null;
163
            try {
170
            try {
164
                CsmObject obj = resolver.resolve(cnn, Resolver.CLASSIFIER | Resolver.NAMESPACE);
171
                obj = resolver.resolve(cnn, Resolver.CLASSIFIER | Resolver.NAMESPACE);
165
                if (CsmKindUtilities.isClassifier(obj)) {
172
                if (CsmKindUtilities.isClassifier(obj)) {
166
                    CsmClassifier cls = resolver.getOriginalClassifier((CsmClassifier)obj);
173
                    CsmClassifier cls = resolver.getOriginalClassifier((CsmClassifier)obj);
167
                    if (cls != null) {
174
                    if (cls != null) {
Lines 176-181 Link Here
176
            } finally {
183
            } finally {
177
                ResolverFactory.releaseResolver(resolver);
184
                ResolverFactory.releaseResolver(resolver);
178
            }
185
            }
186
            // 1) Check that resolver found nothing. It is unlikely that 
187
            //    further resolving will return different object.
188
            // 2) Check that length of qualified name is more than 1. 
189
            //    Seems that it makes no sense to resolve qualified name
190
            //    with one element any further.
191
            if (obj == null && cnn.length > 1) {
192
                StringBuilder sb = new StringBuilder(cnn[0]);
193
                for (int i = 1; i < cnn.length; ++i) {
194
                    sb.append(APTUtils.SCOPE).append(cnn[i]);
195
                }
196
                int startOffset = getStartOffset();
197
                Collection<CsmObject> resolved = CsmExpressionResolver.resolveObjects(sb.toString(), getContainingFile(), startOffset, null);
198
                if (resolved != null && !resolved.isEmpty()) {
199
                    for (CsmObject candidate : resolved) {
200
                        if (CsmKindUtilities.isClass(candidate) || CsmKindUtilities.isNamespace(candidate)) {
201
                            return candidate;
202
                        }
203
                    }
204
                }
205
            }
179
	}
206
	}
180
	return null;
207
	return null;
181
    }    
208
    }    
(-)a/cnd.modelimpl/test/unit/data/goldenfiles/org/netbeans/modules/cnd/modelimpl/trace/FileModelTest/resolver_ns_general.cc.dat (-4 / +4 lines)
Lines 27-33 Link Here
27
                        FIELD PRIVATE a [12:17/183-12:23/189]  TYPE: int TEXT=int  [12:17/183-12:20/186]  INIT: null  SCOPE: CCC 
27
                        FIELD PRIVATE a [12:17/183-12:23/189]  TYPE: int TEXT=int  [12:17/183-12:20/186]  INIT: null  SCOPE: CCC 
28
                        FIELD PRIVATE static b [13:17/206-13:40/229]  TYPE: const int TEXT=const int  [13:17/206-13:33/222]  INIT: text='5'  SCOPE: CCC 
28
                        FIELD PRIVATE static b [13:17/206-13:40/229]  TYPE: const int TEXT=const int  [13:17/206-13:33/222]  INIT: text='5'  SCOPE: CCC 
29
                        FUNCTION boo [14:25/254-14:35/264] MethodImpl SCOPE: CCC 
29
                        FUNCTION boo [14:25/254-14:35/264] MethodImpl SCOPE: CCC 
30
                            DEFINITION: null
30
                            DEFINITION: boo  [45:5/762-48:6/829]
31
                            SIGNATURE boo()
31
                            SIGNATURE boo()
32
                            UNIQUE NAME F:rng::C::CC::CCC::boo()
32
                            UNIQUE NAME F:rng::C::CC::CCC::boo()
33
                            PARAMETERS:
33
                            PARAMETERS:
Lines 63-70 Link Here
63
            STATEMENT RETURN  [42:9/741-42:18/750] SCOPE: Stmt  [40:19/712-43:6/756] text: 'return a;'
63
            STATEMENT RETURN  [42:9/741-42:18/750] SCOPE: Stmt  [40:19/712-43:6/756] text: 'return a;'
64
    FUNCTION DEFINITION boo  [45:5/762-48:6/829] FunctionDefinitionImpl SCOPE: resolver_ns_general.cc
64
    FUNCTION DEFINITION boo  [45:5/762-48:6/829] FunctionDefinitionImpl SCOPE: resolver_ns_general.cc
65
        SIGNATURE boo()
65
        SIGNATURE boo()
66
        UNIQUE NAME f:rng::CC::CCC::boo()
66
        UNIQUE NAME f:rng::C::CC::CCC::boo()
67
        DECLARATION: null
67
        DECLARATION: boo  [14:25/254-14:35/264]
68
        PARAMETERS:
68
        PARAMETERS:
69
        RETURNS int TEXT=int  [45:5/762-45:8/765]
69
        RETURNS int TEXT=int  [45:5/762-45:8/765]
70
        STATEMENT COMPOUND  [45:24/781-48:6/829] SCOPE: boo 
70
        STATEMENT COMPOUND  [45:24/781-48:6/829] SCOPE: boo 
Lines 106-112 Link Here
106
                        FIELD PRIVATE a [12:17/183-12:23/189]  TYPE: int TEXT=int  [12:17/183-12:20/186]  INIT: null  SCOPE: CCC 
106
                        FIELD PRIVATE a [12:17/183-12:23/189]  TYPE: int TEXT=int  [12:17/183-12:20/186]  INIT: null  SCOPE: CCC 
107
                        FIELD PRIVATE static b [13:17/206-13:40/229]  TYPE: const int TEXT=const int  [13:17/206-13:33/222]  INIT: text='5'  SCOPE: CCC 
107
                        FIELD PRIVATE static b [13:17/206-13:40/229]  TYPE: const int TEXT=const int  [13:17/206-13:33/222]  INIT: text='5'  SCOPE: CCC 
108
                        FUNCTION boo [14:25/254-14:35/264] MethodImpl SCOPE: CCC 
108
                        FUNCTION boo [14:25/254-14:35/264] MethodImpl SCOPE: CCC 
109
                            DEFINITION: null
109
                            DEFINITION: boo  [45:5/762-48:6/829]
110
                            SIGNATURE boo()
110
                            SIGNATURE boo()
111
                            UNIQUE NAME F:rng::C::CC::CCC::boo()
111
                            UNIQUE NAME F:rng::C::CC::CCC::boo()
112
                            PARAMETERS:
112
                            PARAMETERS:
(-)a/cnd.modelimpl/test/unit/data/goldenfiles/org/netbeans/modules/cnd/modelimpl/trace/FileModelTest/resolver_ns_using_declaration.cc.dat (-4 / +4 lines)
Lines 37-43 Link Here
37
                    MEMBERS:
37
                    MEMBERS:
38
                        FIELD PRIVATE static b [24:17/363-24:40/386]  TYPE: const int TEXT=const int  [24:17/363-24:33/379]  INIT: text='5'  SCOPE: CCC 
38
                        FIELD PRIVATE static b [24:17/363-24:40/386]  TYPE: const int TEXT=const int  [24:17/363-24:33/379]  INIT: text='5'  SCOPE: CCC 
39
                        FUNCTION boo [25:25/411-25:35/421] MethodImpl SCOPE: CCC 
39
                        FUNCTION boo [25:25/411-25:35/421] MethodImpl SCOPE: CCC 
40
                            DEFINITION: null
40
                            DEFINITION: boo  [45:1/620-48:2/657]
41
                            SIGNATURE boo()
41
                            SIGNATURE boo()
42
                            UNIQUE NAME F:rnud_2::C::CC::CCC::boo()
42
                            UNIQUE NAME F:rnud_2::C::CC::CCC::boo()
43
                            PARAMETERS:
43
                            PARAMETERS:
Lines 62-69 Link Here
62
USING NAMESPACE. ::rnud_2  [43:1/593-43:25/617]; REF NS: rnud_2 SCOPE: null
62
USING NAMESPACE. ::rnud_2  [43:1/593-43:25/617]; REF NS: rnud_2 SCOPE: null
63
FUNCTION DEFINITION boo  [45:1/620-48:2/657] FunctionDefinitionImpl SCOPE: resolver_ns_using_declaration.cc
63
FUNCTION DEFINITION boo  [45:1/620-48:2/657] FunctionDefinitionImpl SCOPE: resolver_ns_using_declaration.cc
64
    SIGNATURE boo()
64
    SIGNATURE boo()
65
    UNIQUE NAME f:CC::CCC::boo()
65
    UNIQUE NAME f:rnud_2::C::CC::CCC::boo()
66
    DECLARATION: null
66
    DECLARATION: boo  [25:25/411-25:35/421]
67
    PARAMETERS:
67
    PARAMETERS:
68
    RETURNS int TEXT=int  [45:1/620-45:4/623]
68
    RETURNS int TEXT=int  [45:1/620-45:4/623]
69
    STATEMENT COMPOUND  [45:20/639-48:2/657] SCOPE: boo 
69
    STATEMENT COMPOUND  [45:20/639-48:2/657] SCOPE: boo 
Lines 146-152 Link Here
146
                    MEMBERS:
146
                    MEMBERS:
147
                        FIELD PRIVATE static b [24:17/363-24:40/386]  TYPE: const int TEXT=const int  [24:17/363-24:33/379]  INIT: text='5'  SCOPE: CCC 
147
                        FIELD PRIVATE static b [24:17/363-24:40/386]  TYPE: const int TEXT=const int  [24:17/363-24:33/379]  INIT: text='5'  SCOPE: CCC 
148
                        FUNCTION boo [25:25/411-25:35/421] MethodImpl SCOPE: CCC 
148
                        FUNCTION boo [25:25/411-25:35/421] MethodImpl SCOPE: CCC 
149
                            DEFINITION: null
149
                            DEFINITION: boo  [45:1/620-48:2/657]
150
                            SIGNATURE boo()
150
                            SIGNATURE boo()
151
                            UNIQUE NAME F:rnud_2::C::CC::CCC::boo()
151
                            UNIQUE NAME F:rnud_2::C::CC::CCC::boo()
152
                            PARAMETERS:
152
                            PARAMETERS:

Return to bug 267382