1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-23 22:52:11 +02:00

Bug 427730 - Fix for missing suggestion in content assist for typedef

Change-Id: I1395ab30b73ab972bd7edf90205c206e363b7fd8
Signed-off-by: Thomas Corbat <tcorbat@hsr.ch>
Reviewed-on: https://git.eclipse.org/r/22233
Reviewed-by: Sergey Prigogin <eclipse.sprigogin@gmail.com>
This commit is contained in:
Thomas Corbat 2014-02-19 13:25:47 +01:00
parent 6677a74ae0
commit 7b74217a34
2 changed files with 55 additions and 9 deletions

View file

@ -1,5 +1,5 @@
/******************************************************************************* /*******************************************************************************
* Copyright (c) 2009, 2013 Google, Inc and others. * Copyright (c) 2009, 2014 Google, Inc and others.
* All rights reserved. This program and the accompanying materials * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0 * are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
@ -7,13 +7,16 @@
* *
* Contributors: * Contributors:
* Sergey Prigogin (Google) - initial API and implementation * Sergey Prigogin (Google) - initial API and implementation
* Thomas Corbat (IFS)
*******************************************************************************/ *******************************************************************************/
package org.eclipse.cdt.core.parser.tests.ast2; package org.eclipse.cdt.core.parser.tests.ast2;
import static org.eclipse.cdt.core.parser.tests.VisibilityAsserts.assertVisibility;
import junit.framework.TestSuite; import junit.framework.TestSuite;
import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IASTName;
import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.IBinding;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType;
import org.eclipse.cdt.core.parser.ParserLanguage; import org.eclipse.cdt.core.parser.ParserLanguage;
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.AccessContext; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.AccessContext;
import org.eclipse.cdt.internal.core.parser.ParserException; import org.eclipse.cdt.internal.core.parser.ParserException;
@ -169,4 +172,55 @@ public class AccessControlTests extends AST2TestBase {
ah.assertAccessible("mi=5;", 2); ah.assertAccessible("mi=5;", 2);
} }
// class A {
// private:
// typedef int Waldo;
// };
// A::Waldo waldo;
public void testPrivateTypedef_427730() throws Exception {
AccessAssertionHelper ah = getAssertionHelper();
ah.assertNotAccessible("Waldo waldo", 5);
}
// class A {
// private:
// class B {};
// public:
// typedef B Waldo;
// };
// A::Waldo waldo;
public void testPublicTypedefForPrivateMemberClass_427730() throws Exception {
AccessAssertionHelper ah = getAssertionHelper();
ah.assertAccessible("Waldo waldo", 5);
}
// class A {
// private:
// class B {};
// friend class C;
// };
// class C {
// public:
// typedef A::B Waldo;
// };
// C::Waldo waldo;
public void testPublicTypedefForFriendClass_427730() throws Exception {
AccessAssertionHelper ah = getAssertionHelper();
ah.assertAccessible("Waldo waldo", 5);
}
// class Outer {
// class Inner {};
// protected:
// using AliasInner = Inner;
// typedef Inner TypedefInner;
// };
public void testAccessibilityForAliasedTypeInSameClass_427730() throws Exception {
BindingAssertionHelper bh = getAssertionHelper();
ICPPClassType outerClass = bh.assertNonProblem("Outer");
IBinding aliasInner = bh.assertNonProblem("AliasInner");
assertVisibility(ICPPClassType.v_protected, outerClass.getVisibility(aliasInner));
IBinding typedefInner = bh.assertNonProblem("TypedefInner");
assertVisibility(ICPPClassType.v_protected, outerClass.getVisibility(typedefInner));
}
} }

View file

@ -952,10 +952,6 @@ public class ClassTypeHelper {
if (member.equals(memberBinding)) { if (member.equals(memberBinding)) {
return visibility; return visibility;
} }
if (member instanceof IType && memberBinding instanceof IType &&
((IType) member).isSameType((IType) memberBinding)) {
return visibility;
}
} else if (declSpec instanceof ICPPASTElaboratedTypeSpecifier } else if (declSpec instanceof ICPPASTElaboratedTypeSpecifier
&& memberDeclaration.getDeclarators().length == 0) { && memberDeclaration.getDeclarators().length == 0) {
IBinding memberBinding = IBinding memberBinding =
@ -968,10 +964,6 @@ public class ClassTypeHelper {
if (member.equals(enumerationBinding)) { if (member.equals(enumerationBinding)) {
return visibility; return visibility;
} }
if (member instanceof IType && enumerationBinding instanceof IType &&
((IType) member).isSameType((IType) enumerationBinding)) {
return visibility;
}
} }
} else if (hostMember instanceof IASTFunctionDefinition) { } else if (hostMember instanceof IASTFunctionDefinition) {
IASTDeclarator declarator = ((IASTFunctionDefinition) hostMember).getDeclarator(); IASTDeclarator declarator = ((IASTFunctionDefinition) hostMember).getDeclarator();