From e622794f73e83a435357842219bcf2bcf03fd3b5 Mon Sep 17 00:00:00 2001 From: Sergey Prigogin Date: Mon, 16 Dec 2013 16:23:51 -0800 Subject: [PATCH] Revert "Bug 419301 - Operator overloading confuses CDT (with boost)" This reverts commit ebc858ec44b4ad8f58c15403a7d098b4b9f4f5d0. --- .../tests/IndexCPPTemplateResolutionTest.java | 51 ------------------- .../dom/cpp/PDOMCPPClassSpecialization.java | 4 +- .../core/pdom/dom/cpp/PDOMCPPLinkage.java | 25 ++++----- 3 files changed, 11 insertions(+), 69 deletions(-) diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPTemplateResolutionTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPTemplateResolutionTest.java index 1209dfc9783..304299688ec 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPTemplateResolutionTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPTemplateResolutionTest.java @@ -2403,55 +2403,4 @@ public class IndexCPPTemplateResolutionTest extends IndexBindingResolutionTestBa IType T = getBindingFromASTName("T", 1); assertEquals("int", ASTTypeUtil.getType(T)); } - - // template - // struct multipliable2 - // { - // friend T operator *(const U& lhs, const T& rhs); - // }; - // - // template - // struct multipliable1 - // { - // friend T operator *(const T& lhs, const T& rhs); - // }; - - // #include "header.h" - // struct overloaded : multipliable1 {}; - // - // int foo(overloaded); - // - // int main() - // { - // overloaded c, d; - // foo(c * d); - // } - public void testFriendFunctionOfClassSpecialization_419301a() throws Exception { - checkBindings(); - } - - // template - // struct multipliable2 - // { - // friend T operator *(const U& lhs, const T& rhs); - // }; - // - // template - // struct multipliable1 - // { - // friend T operator *(const T& lhs, const T& rhs) {} - // }; - - // #include "header.h" - // struct overloaded : multipliable1 {}; - // - // int foo(overloaded); - // - // int main() { - // overloaded c, d; - // foo(c * d); - // } - public void testFriendFunctionOfClassSpecialization_419301b() throws Exception { - checkBindings(); - } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassSpecialization.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassSpecialization.java index 7f49e5773a4..e27d0f3fcb5 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassSpecialization.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassSpecialization.java @@ -367,9 +367,7 @@ class PDOMCPPClassSpecialization extends PDOMCPPSpecialization implements @Override public IBinding[] getFriends(IASTNode point) { - ICPPClassScope scope= getCompositeScope(); - if (scope instanceof ICPPClassSpecializationScope) - return ((ICPPClassSpecializationScope) scope).getFriends(point); + // Not yet supported. return IBinding.EMPTY_BINDING_ARRAY; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkage.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkage.java index 6d7ae1ed05a..266ba2dfbed 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkage.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkage.java @@ -21,8 +21,6 @@ import java.util.List; import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.dom.ast.DOMException; import org.eclipse.cdt.core.dom.ast.IASTCompositeTypeSpecifier; -import org.eclipse.cdt.core.dom.ast.IASTDeclSpecifier; -import org.eclipse.cdt.core.dom.ast.IASTFunctionDefinition; import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IASTNode; import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration; @@ -1043,20 +1041,17 @@ class PDOMCPPLinkage extends PDOMLinkage implements IIndexCPPBindingConstants { } } } else if (parentNode instanceof ICPPASTFunctionDeclarator) { - IASTDeclSpecifier declSpec = null; if (parentNode.getParent() instanceof IASTSimpleDeclaration) { - declSpec = ((IASTSimpleDeclaration) parentNode.getParent()).getDeclSpecifier(); - } else if (parentNode.getParent() instanceof IASTFunctionDefinition) { - declSpec = ((IASTFunctionDefinition) parentNode.getParent()).getDeclSpecifier(); - } - if (declSpec instanceof ICPPASTDeclSpecifier) { - if (((ICPPASTDeclSpecifier) declSpec).isFriend()) { - pdomName.setIsFriendSpecifier(); - PDOMName enclClassName = (PDOMName) pdomName.getEnclosingDefinition(); - if (enclClassName != null) { - PDOMBinding enclClassBinding = enclClassName.getBinding(); - if (enclClassBinding instanceof PDOMCPPClassType) { - ((PDOMCPPClassType) enclClassBinding).addFriend(new PDOMCPPFriend(this, pdomName)); + IASTSimpleDeclaration grandparentNode = (IASTSimpleDeclaration) parentNode.getParent(); + if (grandparentNode.getDeclSpecifier() instanceof ICPPASTDeclSpecifier) { + if (((ICPPASTDeclSpecifier) grandparentNode.getDeclSpecifier()).isFriend()) { + pdomName.setIsFriendSpecifier(); + PDOMName enclClassName = (PDOMName) pdomName.getEnclosingDefinition(); + if (enclClassName != null) { + PDOMBinding enclClassBinding = enclClassName.getBinding(); + if (enclClassBinding instanceof PDOMCPPClassType) { + ((PDOMCPPClassType) enclClassBinding).addFriend(new PDOMCPPFriend(this, pdomName)); + } } } }