mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
NPE for illegal friend declarations on global scope, bug 292174.
This commit is contained in:
parent
241e84b54e
commit
0cfed67288
1 changed files with 20 additions and 14 deletions
|
@ -891,22 +891,26 @@ class PDOMCPPLinkage extends PDOMLinkage implements IIndexCPPBindingConstants {
|
||||||
ICPPASTElaboratedTypeSpecifier elaboratedSpecifier = (ICPPASTElaboratedTypeSpecifier)parentNode;
|
ICPPASTElaboratedTypeSpecifier elaboratedSpecifier = (ICPPASTElaboratedTypeSpecifier)parentNode;
|
||||||
if (elaboratedSpecifier.isFriend()) {
|
if (elaboratedSpecifier.isFriend()) {
|
||||||
pdomName.setIsFriendSpecifier(true);
|
pdomName.setIsFriendSpecifier(true);
|
||||||
PDOMName enclClassName= (PDOMName) pdomName.getEnclosingDefinition();
|
PDOMName enclClassName = (PDOMName) pdomName.getEnclosingDefinition();
|
||||||
PDOMBinding enclClassBinding= enclClassName.getBinding();
|
if (enclClassName != null) {
|
||||||
|
PDOMBinding enclClassBinding = enclClassName.getBinding();
|
||||||
if (enclClassBinding instanceof PDOMCPPClassType) {
|
if (enclClassBinding instanceof PDOMCPPClassType) {
|
||||||
((PDOMCPPClassType)enclClassBinding).addFriend(new PDOMCPPFriend(this, pdomName));
|
((PDOMCPPClassType) enclClassBinding).addFriend(new PDOMCPPFriend(this, pdomName));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (parentNode instanceof ICPPASTFunctionDeclarator) {
|
} else if (parentNode instanceof ICPPASTFunctionDeclarator) {
|
||||||
if (parentNode.getParent() instanceof IASTSimpleDeclaration) {
|
if (parentNode.getParent() instanceof IASTSimpleDeclaration) {
|
||||||
IASTSimpleDeclaration grandparentNode = (IASTSimpleDeclaration) parentNode.getParent();
|
IASTSimpleDeclaration grandparentNode = (IASTSimpleDeclaration) parentNode.getParent();
|
||||||
if (grandparentNode.getDeclSpecifier() instanceof ICPPASTDeclSpecifier) {
|
if (grandparentNode.getDeclSpecifier() instanceof ICPPASTDeclSpecifier) {
|
||||||
if (((ICPPASTDeclSpecifier)grandparentNode.getDeclSpecifier()).isFriend()) {
|
if (((ICPPASTDeclSpecifier) grandparentNode.getDeclSpecifier()).isFriend()) {
|
||||||
pdomName.setIsFriendSpecifier(true);
|
pdomName.setIsFriendSpecifier(true);
|
||||||
PDOMName enclClassName= (PDOMName) pdomName.getEnclosingDefinition();
|
PDOMName enclClassName = (PDOMName) pdomName.getEnclosingDefinition();
|
||||||
PDOMBinding enclClassBinding= enclClassName.getBinding();
|
if (enclClassName != null) {
|
||||||
|
PDOMBinding enclClassBinding = enclClassName.getBinding();
|
||||||
if (enclClassBinding instanceof PDOMCPPClassType) {
|
if (enclClassBinding instanceof PDOMCPPClassType) {
|
||||||
((PDOMCPPClassType)enclClassBinding).addFriend(new PDOMCPPFriend(this, pdomName));
|
((PDOMCPPClassType) enclClassBinding).addFriend(new PDOMCPPFriend(this, pdomName));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -951,14 +955,16 @@ class PDOMCPPLinkage extends PDOMLinkage implements IIndexCPPBindingConstants {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (pdomName.isFriendSpecifier()) {
|
if (pdomName.isFriendSpecifier()) {
|
||||||
PDOMName enclClassName= (PDOMName) pdomName.getEnclosingDefinition();
|
PDOMName enclClassName = (PDOMName) pdomName.getEnclosingDefinition();
|
||||||
PDOMBinding enclClassBinding= enclClassName.getBinding();
|
if (enclClassName != null) {
|
||||||
|
PDOMBinding enclClassBinding = enclClassName.getBinding();
|
||||||
if (enclClassBinding instanceof PDOMCPPClassType) {
|
if (enclClassBinding instanceof PDOMCPPClassType) {
|
||||||
PDOMCPPClassType ownerClass = (PDOMCPPClassType)enclClassBinding;
|
PDOMCPPClassType ownerClass = (PDOMCPPClassType) enclClassBinding;
|
||||||
ownerClass.removeFriend(pdomName);
|
ownerClass.removeFriend(pdomName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected PDOMFile getLocalToFile(IBinding binding, PDOMBinding glob) throws CoreException {
|
protected PDOMFile getLocalToFile(IBinding binding, PDOMBinding glob) throws CoreException {
|
||||||
|
|
Loading…
Add table
Reference in a new issue