mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Bug 402878 - Implementation of Member Accessibility on Type Level
Change-Id: Ifd134d9cb573aecd4714c296f38eda6b13a80f06
This commit is contained in:
parent
f94d9f8c3d
commit
53561a6686
24 changed files with 512 additions and 45 deletions
|
@ -10266,4 +10266,56 @@ public class AST2CPPTests extends AST2TestBase {
|
|||
|
||||
assertEquals(NamespaceNS.getNamespaceScope(), Inner.getScope());
|
||||
}
|
||||
|
||||
// class AClass {
|
||||
// int defaultMemberVariable;
|
||||
// void defaultMemberFunction();
|
||||
// class defaultNestedClass {};
|
||||
// public:
|
||||
// int publicMemberVariable;
|
||||
// void publicMemberFunction();
|
||||
// class publicNestedClass {};
|
||||
// protected:
|
||||
// int protectedMemberVariable;
|
||||
// void protectedMemberFunction();
|
||||
// class protectedNestedClass {};
|
||||
// private:
|
||||
// int privateMemberVariable;
|
||||
// void privateMemberFunction();
|
||||
// class privateNestedClass {};
|
||||
// };
|
||||
public void testMemberAccessibilities() throws Exception {
|
||||
String code = getAboveComment();
|
||||
BindingAssertionHelper bh = new BindingAssertionHelper(code, true);
|
||||
|
||||
ICPPClassType aClass = bh.assertNonProblem("AClass", 6);
|
||||
|
||||
ICPPField defaultMemberVariable = bh.assertNonProblem("defaultMemberVariable", 21);
|
||||
assertAccessibility(ICPPClassType.a_private, aClass.getAccessibility(defaultMemberVariable));
|
||||
ICPPMethod defaultMemberFunction = bh.assertNonProblem("defaultMemberFunction", 21);
|
||||
assertAccessibility(ICPPClassType.a_private, aClass.getAccessibility(defaultMemberFunction));
|
||||
ICPPClassType defaultNestedClass = bh.assertNonProblem("defaultNestedClass", 18);
|
||||
assertAccessibility(ICPPClassType.a_private, aClass.getAccessibility(defaultNestedClass));
|
||||
|
||||
ICPPField publicMemberVariable = bh.assertNonProblem("publicMemberVariable", 20);
|
||||
assertAccessibility(ICPPClassType.a_public, aClass.getAccessibility(publicMemberVariable));
|
||||
ICPPMethod publicMemberFunction = bh.assertNonProblem("publicMemberFunction", 20);
|
||||
assertAccessibility(ICPPClassType.a_public, aClass.getAccessibility(publicMemberFunction));
|
||||
ICPPClassType publicNestedClass = bh.assertNonProblem("publicNestedClass", 17);
|
||||
assertAccessibility(ICPPClassType.a_public, aClass.getAccessibility(publicNestedClass));
|
||||
|
||||
ICPPField protectedMemberVariable = bh.assertNonProblem("protectedMemberVariable", 23);
|
||||
assertAccessibility(ICPPClassType.a_protected, aClass.getAccessibility(protectedMemberVariable));
|
||||
ICPPMethod protectedMemberFunction = bh.assertNonProblem("protectedMemberFunction", 23);
|
||||
assertAccessibility(ICPPClassType.a_protected, aClass.getAccessibility(protectedMemberFunction));
|
||||
ICPPClassType protectedNestedClass = bh.assertNonProblem("protectedNestedClass", 20);
|
||||
assertAccessibility(ICPPClassType.a_protected, aClass.getAccessibility(protectedNestedClass));
|
||||
|
||||
ICPPField privateMemberVariable = bh.assertNonProblem("privateMemberVariable", 21);
|
||||
assertAccessibility(ICPPClassType.a_private, aClass.getAccessibility(privateMemberVariable));
|
||||
ICPPMethod privateMemberFunction = bh.assertNonProblem("privateMemberFunction", 21);
|
||||
assertAccessibility(ICPPClassType.a_private, aClass.getAccessibility(privateMemberFunction));
|
||||
ICPPClassType privateNestedClass = bh.assertNonProblem("privateNestedClass", 18);
|
||||
assertAccessibility(ICPPClassType.a_private, aClass.getAccessibility(privateNestedClass));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7610,4 +7610,67 @@ public class AST2TemplateTests extends AST2TestBase {
|
|||
public void testTemplateBaseClassConstructorCall_402602() throws Exception {
|
||||
parseAndCheckBindings();
|
||||
}
|
||||
|
||||
// template<typename T>
|
||||
// class ATemplate {
|
||||
// int defaultMemberVariable;
|
||||
// public:
|
||||
// int publicMemberVariable;
|
||||
// protected:
|
||||
// int protectedMemberVariable;
|
||||
// private:
|
||||
// int privateMemberVariable;
|
||||
// };
|
||||
public void testTemplateMemberAccessibilities() throws Exception {
|
||||
String code = getAboveComment();
|
||||
BindingAssertionHelper bh = new BindingAssertionHelper(code, true);
|
||||
|
||||
ICPPClassTemplate aTemplate = bh.assertNonProblem("ATemplate", 9);
|
||||
|
||||
ICPPField defaultMemberVariable = bh.assertNonProblem("defaultMemberVariable", 21);
|
||||
assertAccessibility(ICPPClassType.a_private, aTemplate.getAccessibility(defaultMemberVariable));
|
||||
|
||||
ICPPField publicMemberVariable = bh.assertNonProblem("publicMemberVariable", 20);
|
||||
assertAccessibility(ICPPClassType.a_public, aTemplate.getAccessibility(publicMemberVariable));
|
||||
|
||||
ICPPField protectedMemberVariable = bh.assertNonProblem("protectedMemberVariable", 23);
|
||||
assertAccessibility(ICPPClassType.a_protected, aTemplate.getAccessibility(protectedMemberVariable));
|
||||
|
||||
ICPPField privateMemberVariable = bh.assertNonProblem("privateMemberVariable", 21);
|
||||
assertAccessibility(ICPPClassType.a_private, aTemplate.getAccessibility(privateMemberVariable));
|
||||
}
|
||||
|
||||
// template<typename T>
|
||||
// class ATemplate {};
|
||||
//
|
||||
// class A{};
|
||||
//
|
||||
// template<>
|
||||
// class ATemplate<A> {
|
||||
// int specializedDefaultVariable;
|
||||
// public:
|
||||
// int specializedPublicVariable;
|
||||
// protected:
|
||||
// int specializedProtectedVariable;
|
||||
// private:
|
||||
// int specializedPrivateVariable;
|
||||
// };
|
||||
public void testTemplateSpecializationMemberAccessibilities() throws Exception {
|
||||
String code = getAboveComment();
|
||||
BindingAssertionHelper bh = new BindingAssertionHelper(code, true);
|
||||
|
||||
ICPPClassSpecialization aTemplateSpecialization = bh.assertNonProblem("ATemplate<A>", 12);
|
||||
|
||||
ICPPField defaultMemberVariable = bh.assertNonProblem("specializedDefaultVariable", 26);
|
||||
assertAccessibility(ICPPClassType.a_private, aTemplateSpecialization.getAccessibility(defaultMemberVariable));
|
||||
|
||||
ICPPField publicMemberVariable = bh.assertNonProblem("specializedPublicVariable", 25);
|
||||
assertAccessibility(ICPPClassType.a_public, aTemplateSpecialization.getAccessibility(publicMemberVariable));
|
||||
|
||||
ICPPField protectedMemberVariable = bh.assertNonProblem("specializedProtectedVariable", 28);
|
||||
assertAccessibility(ICPPClassType.a_protected, aTemplateSpecialization.getAccessibility(protectedMemberVariable));
|
||||
|
||||
ICPPField privateMemberVariable = bh.assertNonProblem("specializedPrivateVariable", 26);
|
||||
assertAccessibility(ICPPClassType.a_private, aTemplateSpecialization.getAccessibility(privateMemberVariable));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -62,6 +62,7 @@ import org.eclipse.cdt.core.dom.ast.IVariable;
|
|||
import org.eclipse.cdt.core.dom.ast.c.ICASTTypeIdInitializerExpression;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTLinkageSpecification;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNamespaceDefinition;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType;
|
||||
import org.eclipse.cdt.core.dom.parser.IScannerExtensionConfiguration;
|
||||
import org.eclipse.cdt.core.dom.parser.c.ANSICParserExtensionConfiguration;
|
||||
import org.eclipse.cdt.core.dom.parser.c.GCCParserExtensionConfiguration;
|
||||
|
@ -865,4 +866,26 @@ public class AST2TestBase extends BaseTestCase {
|
|||
assertInstance(stmt, IASTExpressionStatement.class);
|
||||
return (T) ((IASTExpressionStatement) stmt).getExpression();
|
||||
}
|
||||
|
||||
protected void assertAccessibility(int expected, int actual) {
|
||||
String expectedAccessibility = accessibilityName(expected);
|
||||
String actualAccessibility = accessibilityName(actual);
|
||||
String message = "Expected access specifier:<" + expectedAccessibility + "> but was:<" + actualAccessibility + "> -";
|
||||
assertEquals(message, expected, actual);
|
||||
}
|
||||
|
||||
private String accessibilityName(int expected) {
|
||||
switch(expected){
|
||||
case ICPPClassType.a_private:
|
||||
return "private";
|
||||
case ICPPClassType.a_protected:
|
||||
return "protected";
|
||||
case ICPPClassType.a_public:
|
||||
return "public";
|
||||
case ICPPClassType.a_unspecified:
|
||||
return "unspecified";
|
||||
default:
|
||||
return "illegal access specifier";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -79,19 +79,19 @@ public class CPPFieldTests extends PDOMTestBase {
|
|||
}
|
||||
|
||||
public void testDefaultPrivateField() throws Exception {
|
||||
assertVisibility(pdom, "Class1::defaultField", ICPPMember.v_private);
|
||||
assertAccessibility(pdom, "Class1::defaultField", ICPPMember.v_private);
|
||||
}
|
||||
|
||||
public void testPrivateField() throws Exception {
|
||||
assertVisibility(pdom, "Class1::privateField", ICPPMember.v_private);
|
||||
assertAccessibility(pdom, "Class1::privateField", ICPPMember.v_private);
|
||||
}
|
||||
|
||||
public void testProtectedField() throws Exception {
|
||||
assertVisibility(pdom, "Class1::protectedField", ICPPMember.v_protected);
|
||||
assertAccessibility(pdom, "Class1::protectedField", ICPPMember.v_protected);
|
||||
}
|
||||
|
||||
public void testPublicField() throws Exception {
|
||||
assertVisibility(pdom, "Class1::publicField", ICPPMember.v_public);
|
||||
assertAccessibility(pdom, "Class1::publicField", ICPPMember.v_public);
|
||||
}
|
||||
|
||||
public void testMutableField() throws Exception {
|
||||
|
|
|
@ -163,19 +163,19 @@ public class MethodTests extends PDOMTestBase {
|
|||
}
|
||||
|
||||
public void testDefaultPrivateMethod() throws Exception {
|
||||
assertVisibility(pdom, "Class3::defaultMethod", ICPPMember.v_private);
|
||||
assertAccessibility(pdom, "Class3::defaultMethod", ICPPMember.v_private);
|
||||
}
|
||||
|
||||
public void testPrivateMethod() throws Exception {
|
||||
assertVisibility(pdom, "Class3::privateMethod", ICPPMember.v_private);
|
||||
assertAccessibility(pdom, "Class3::privateMethod", ICPPMember.v_private);
|
||||
}
|
||||
|
||||
public void testProtectedMethod() throws Exception {
|
||||
assertVisibility(pdom, "Class3::protectedMethod", ICPPMember.v_protected);
|
||||
assertAccessibility(pdom, "Class3::protectedMethod", ICPPMember.v_protected);
|
||||
}
|
||||
|
||||
public void testPublicMethod() throws Exception {
|
||||
assertVisibility(pdom, "Class3::publicMethod", ICPPMember.v_public);
|
||||
assertAccessibility(pdom, "Class3::publicMethod", ICPPMember.v_public);
|
||||
}
|
||||
|
||||
public void testInlineMethod() throws Exception {
|
||||
|
|
|
@ -202,11 +202,11 @@ public class PDOMTestBase extends BaseTestCase {
|
|||
assertTrue(c.isAssignableFrom(bindings[0].getClass()));
|
||||
}
|
||||
|
||||
protected void assertVisibility(PDOM pdom, String name, int visibility) throws CoreException, DOMException {
|
||||
protected void assertAccessibility(PDOM pdom, String name, int accessibility) throws CoreException, DOMException {
|
||||
IBinding[] bindings = findQualifiedName(pdom, name);
|
||||
assertEquals(1, bindings.length);
|
||||
ICPPMember member = (ICPPMember) bindings[0];
|
||||
assertEquals(visibility, member.getVisibility());
|
||||
assertEquals(accessibility, member.getVisibility());
|
||||
}
|
||||
|
||||
public static final void assertFunctionRefCount(PDOM pdom, Class[] args, IBinding[] bindingPool, int refCount) throws CoreException {
|
||||
|
|
|
@ -50,6 +50,7 @@ public class PDOMTests extends TestSuite {
|
|||
suite.addTest(CPPFunctionTemplateTests.suite());
|
||||
suite.addTest(MethodTests.suite());
|
||||
suite.addTest(NamespaceTests.suite());
|
||||
suite.addTest(AccessibilityTests.suite());
|
||||
|
||||
suite.addTest(CFunctionTests.suite());
|
||||
suite.addTest(CVariableTests.suite());
|
||||
|
|
|
@ -11,6 +11,9 @@
|
|||
******************************************************************************/
|
||||
package org.eclipse.cdt.core.dom.ast.cpp;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.eclipse.cdt.core.dom.ast.IBinding;
|
||||
import org.eclipse.cdt.core.dom.ast.ICompositeType;
|
||||
import org.eclipse.cdt.core.dom.ast.IField;
|
||||
|
@ -24,6 +27,26 @@ import org.eclipse.cdt.core.dom.ast.IField;
|
|||
public interface ICPPClassType extends ICompositeType, ICPPBinding {
|
||||
public static final ICPPClassType[] EMPTY_CLASS_ARRAY = {};
|
||||
public static final int k_class = ICPPASTCompositeTypeSpecifier.k_class;
|
||||
/**
|
||||
* @since 5.5
|
||||
*/
|
||||
public static final Map<IBinding, Integer> EMPTY_ACCESSIBILITY_MAP = new HashMap<IBinding, Integer>();
|
||||
/**
|
||||
* @since 5.5
|
||||
*/
|
||||
public static final int a_unspecified = 0;
|
||||
/**
|
||||
* @since 5.5
|
||||
*/
|
||||
public static final int a_public = 1;
|
||||
/**
|
||||
* @since 5.5
|
||||
*/
|
||||
public static final int a_protected = 2;
|
||||
/**
|
||||
* @since 5.5
|
||||
*/
|
||||
public static final int a_private = 3;
|
||||
|
||||
/**
|
||||
* Returns an array of base class relationships. The returned array is empty if there
|
||||
|
@ -107,4 +130,27 @@ public interface ICPPClassType extends ICompositeType, ICPPBinding {
|
|||
* @since 5.5
|
||||
*/
|
||||
public boolean isFinal();
|
||||
|
||||
/**
|
||||
* Gets the access specifier of the <code>member</code>.
|
||||
*
|
||||
* @param member The binding of the member to get the accessibility for.
|
||||
*
|
||||
* @return Returns the accessibility of the specified member. If
|
||||
* <code>member</code> is not a member of this type ICPPClassType.v_unspecified
|
||||
* is returned.
|
||||
*
|
||||
* @since 5.5
|
||||
*/
|
||||
public int getAccessibility(IBinding member);
|
||||
|
||||
/**
|
||||
* Gets the access specifiers of all the class members.
|
||||
*
|
||||
* @return Returns a map of all the class members to their corresponding
|
||||
* accessibility.
|
||||
*
|
||||
* @since 5.5
|
||||
*/
|
||||
public Map<IBinding, Integer> getMemberAccessibilities();
|
||||
}
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
package org.eclipse.cdt.internal.core.dom.parser.cpp;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import org.eclipse.cdt.core.CCorePlugin;
|
||||
|
@ -447,4 +448,18 @@ public class CPPClassSpecialization extends CPPSpecialization
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getAccessibility(IBinding member) {
|
||||
Map<IBinding, Integer> memberAccessibilities = ClassTypeHelper.getMemberAccessibilities(this);
|
||||
if(memberAccessibilities.containsKey(member)){
|
||||
return memberAccessibilities.get(member);
|
||||
}
|
||||
return a_unspecified;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<IBinding, Integer> getMemberAccessibilities() {
|
||||
return ClassTypeHelper.getMemberAccessibilities(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,6 +14,8 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.cdt.internal.core.dom.parser.cpp;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import org.eclipse.cdt.core.dom.ast.ASTTypeUtil;
|
||||
import org.eclipse.cdt.core.dom.ast.DOMException;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTName;
|
||||
|
@ -254,4 +256,18 @@ public class CPPClassTemplate extends CPPTemplateDefinition implements ICPPClass
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getAccessibility(IBinding member) {
|
||||
Map<IBinding, Integer> memberAccessibilities = ClassTypeHelper.getMemberAccessibilities(this);
|
||||
if(memberAccessibilities.containsKey(member)){
|
||||
return memberAccessibilities.get(member);
|
||||
}
|
||||
return a_unspecified;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<IBinding, Integer> getMemberAccessibilities() {
|
||||
return ClassTypeHelper.getMemberAccessibilities(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,6 +14,8 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.cdt.internal.core.dom.parser.cpp;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import org.eclipse.cdt.core.dom.ILinkage;
|
||||
import org.eclipse.cdt.core.dom.ast.DOMException;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTCompositeTypeSpecifier;
|
||||
|
@ -109,6 +111,14 @@ public class CPPClassType extends PlatformObject implements ICPPInternalClassTyp
|
|||
public boolean isFinal() {
|
||||
return false;
|
||||
}
|
||||
@Override
|
||||
public int getAccessibility(IBinding member) {
|
||||
return a_unspecified;
|
||||
}
|
||||
@Override
|
||||
public Map<IBinding, Integer> getMemberAccessibilities() {
|
||||
return EMPTY_ACCESSIBILITY_MAP;
|
||||
}
|
||||
}
|
||||
|
||||
private IASTName definition;
|
||||
|
@ -412,4 +422,18 @@ public class CPPClassType extends PlatformObject implements ICPPInternalClassTyp
|
|||
}
|
||||
return name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getAccessibility(IBinding member) {
|
||||
Map<IBinding, Integer> memberAccessibilities = ClassTypeHelper.getMemberAccessibilities(this);
|
||||
if(memberAccessibilities.containsKey(member)){
|
||||
return memberAccessibilities.get(member);
|
||||
}
|
||||
return a_unspecified;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<IBinding, Integer> getMemberAccessibilities() {
|
||||
return ClassTypeHelper.getMemberAccessibilities(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,6 +14,7 @@ package org.eclipse.cdt.internal.core.dom.parser.cpp;
|
|||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.eclipse.cdt.core.dom.ILinkage;
|
||||
import org.eclipse.cdt.core.dom.IName;
|
||||
|
@ -344,6 +345,16 @@ public class CPPClosureType extends PlatformObject implements ICPPClassType, ICP
|
|||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getAccessibility(IBinding member) {
|
||||
return a_unspecified;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<IBinding, Integer> getMemberAccessibilities() {
|
||||
return EMPTY_ACCESSIBILITY_MAP;
|
||||
}
|
||||
|
||||
|
||||
private final class ClassScope implements ICPPClassScope {
|
||||
@Override
|
||||
|
|
|
@ -12,6 +12,8 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.cdt.internal.core.dom.parser.cpp;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import org.eclipse.cdt.core.dom.ast.ASTTypeUtil;
|
||||
import org.eclipse.cdt.core.dom.ast.DOMException;
|
||||
import org.eclipse.cdt.core.dom.ast.IBinding;
|
||||
|
@ -246,4 +248,14 @@ public class CPPDeferredClassInstance extends CPPUnknownBinding implements ICPPD
|
|||
}
|
||||
return new PDOMCPPDeferredClassInstance(fragment, (ICPPClassTemplate) template, args);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getAccessibility(IBinding member) {
|
||||
return a_unspecified;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<IBinding, Integer> getMemberAccessibilities() {
|
||||
return EMPTY_ACCESSIBILITY_MAP;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,6 +13,8 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.cdt.internal.core.dom.parser.cpp;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import org.eclipse.cdt.core.dom.ast.ASTTypeUtil;
|
||||
import org.eclipse.cdt.core.dom.ast.DOMException;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTExpression;
|
||||
|
@ -246,4 +248,14 @@ public class CPPTemplateTemplateParameter extends CPPTemplateParameter implement
|
|||
public boolean isFinal() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getAccessibility(IBinding member) {
|
||||
return a_unspecified;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<IBinding, Integer> getMemberAccessibilities() {
|
||||
return EMPTY_ACCESSIBILITY_MAP;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,6 +13,8 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.cdt.internal.core.dom.parser.cpp;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import org.eclipse.cdt.core.dom.ast.ASTTypeUtil;
|
||||
import org.eclipse.cdt.core.dom.ast.IBinding;
|
||||
import org.eclipse.cdt.core.dom.ast.IField;
|
||||
|
@ -133,4 +135,14 @@ public class CPPUnknownMemberClass extends CPPUnknownMember implements ICPPUnkno
|
|||
public boolean isFinal() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getAccessibility(IBinding member) {
|
||||
return a_unspecified;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<IBinding, Integer> getMemberAccessibilities() {
|
||||
return EMPTY_ACCESSIBILITY_MAP;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -47,6 +47,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTDeclSpecifier;
|
|||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTElaboratedTypeSpecifier;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateDeclaration;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTUsingDeclaration;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTVisibilityLabel;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPBase;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPBinding;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassScope;
|
||||
|
@ -882,6 +883,58 @@ public class ClassTypeHelper {
|
|||
return resultArray;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Collects the accessibility specifiers for the declarations in a class.
|
||||
*
|
||||
* @param host The class to get the members accessibility specifiers of.
|
||||
* @return A map containing all members of the class and their corresponding accessibility.
|
||||
*/
|
||||
public static Map<IBinding, Integer> getMemberAccessibilities(ICPPInternalClassTypeMixinHost host) {
|
||||
if (host.getDefinition() == null) {
|
||||
host.checkForDefinition();
|
||||
if (host.getDefinition() == null) {
|
||||
ICPPClassType backup = getBackupDefinition(host);
|
||||
if (backup != null) {
|
||||
return backup.getMemberAccessibilities();
|
||||
}
|
||||
return new HashMap<IBinding, Integer>();
|
||||
}
|
||||
}
|
||||
|
||||
Map<IBinding, Integer> accessibilities = new HashMap<IBinding, Integer>();
|
||||
int accessibility = host.getKey() == ICPPClassType.k_class ? ICPPClassType.a_private
|
||||
: ICPPClassType.a_public;
|
||||
|
||||
IASTDeclaration[] members = host.getCompositeTypeSpecifier().getMembers();
|
||||
for (IASTDeclaration member : members) {
|
||||
if (member instanceof ICPPASTVisibilityLabel) {
|
||||
accessibility = ((ICPPASTVisibilityLabel) member).getVisibility();
|
||||
}
|
||||
if (member instanceof IASTSimpleDeclaration) {
|
||||
IASTSimpleDeclaration memberDeclaration = (IASTSimpleDeclaration) member;
|
||||
for (IASTDeclarator memberDeclarator : memberDeclaration.getDeclarators()) {
|
||||
IBinding memberBinding = ASTQueries.findInnermostDeclarator(memberDeclarator)
|
||||
.getName().resolveBinding();
|
||||
accessibilities.put(memberBinding, accessibility);
|
||||
}
|
||||
|
||||
IASTDeclSpecifier declSpec = memberDeclaration.getDeclSpecifier();
|
||||
if (declSpec instanceof ICPPASTCompositeTypeSpecifier) {
|
||||
IBinding memberBinding = ((ICPPASTCompositeTypeSpecifier) declSpec).getName()
|
||||
.resolveBinding();
|
||||
accessibilities.put(memberBinding, accessibility);
|
||||
} else if (declSpec instanceof ICPPASTElaboratedTypeSpecifier
|
||||
&& memberDeclaration.getDeclarators().length == 0) {
|
||||
IBinding memberBinding = ((ICPPASTElaboratedTypeSpecifier) declSpec).getName()
|
||||
.resolveBinding();
|
||||
accessibilities.put(memberBinding, accessibility);
|
||||
}
|
||||
}
|
||||
}
|
||||
return accessibilities;
|
||||
}
|
||||
|
||||
private static Map<String, List<ICPPMethod>> collectPureVirtualMethods(ICPPClassType classType,
|
||||
Map<ICPPClassType, Map<String, List<ICPPMethod>>> cache, IASTNode point) {
|
||||
Map<String, List<ICPPMethod>> result = cache.get(classType);
|
||||
|
|
|
@ -17,6 +17,7 @@ import static org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.SemanticUti
|
|||
import static org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.SemanticUtil.getNestedType;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Map;
|
||||
|
||||
import org.eclipse.cdt.core.dom.IName;
|
||||
import org.eclipse.cdt.core.dom.ast.IBinding;
|
||||
|
@ -215,4 +216,14 @@ class CompositeCPPClassType extends CompositeCPPBinding implements ICPPClassType
|
|||
public boolean isFinal() {
|
||||
return ((ICPPClassType) rbinding).isFinal();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getAccessibility(IBinding member) {
|
||||
return ((ICPPClassType) rbinding).getAccessibility(member);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<IBinding, Integer> getMemberAccessibilities() {
|
||||
return ((ICPPClassType) rbinding).getMemberAccessibilities();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,6 +12,8 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.cdt.internal.core.index.composite.cpp;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import org.eclipse.cdt.core.dom.ast.DOMException;
|
||||
import org.eclipse.cdt.core.dom.ast.IBinding;
|
||||
import org.eclipse.cdt.core.dom.ast.IField;
|
||||
|
@ -179,4 +181,14 @@ public class CompositeCPPTemplateTemplateParameter extends CompositeCPPBinding
|
|||
public boolean isFinal() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getAccessibility(IBinding member) {
|
||||
return a_unspecified;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<IBinding, Integer> getMemberAccessibilities() {
|
||||
return EMPTY_ACCESSIBILITY_MAP;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,6 +11,8 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.cdt.internal.core.pdom.dom;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import org.eclipse.cdt.core.dom.ILinkage;
|
||||
import org.eclipse.cdt.core.dom.ast.ASTNodeProperty;
|
||||
import org.eclipse.cdt.core.dom.ast.ASTTypeUtil;
|
||||
|
@ -621,6 +623,16 @@ public class PDOMASTAdapter {
|
|||
public boolean isFinal() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getAccessibility(IBinding member) {
|
||||
return ((ICPPClassType) fDelegate).getAccessibility(member);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<IBinding, Integer> getMemberAccessibilities() {
|
||||
return ((ICPPClassType) fDelegate).getMemberAccessibilities();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
package org.eclipse.cdt.internal.core.pdom.dom.cpp;
|
||||
|
||||
import org.eclipse.cdt.core.dom.IPDOMVisitor;
|
||||
import org.eclipse.cdt.core.dom.ast.IBinding;
|
||||
import org.eclipse.cdt.core.dom.ast.IScope;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType;
|
||||
import org.eclipse.cdt.core.index.IIndexName;
|
||||
|
@ -33,4 +34,11 @@ public interface IPDOMCPPClassType extends ICPPClassType, IPDOMBinding, IIndexTy
|
|||
* Returns the scope name, for use in {@link IScope#getScopeName()}
|
||||
*/
|
||||
IIndexName getScopeName();
|
||||
|
||||
/**
|
||||
* Sets the accessibility specifier of a given member.
|
||||
* @param member The binding specifying the member.
|
||||
* @param accessibility The accessibility of the <code>member</code>.
|
||||
*/
|
||||
void setAccessibility(IBinding member, int accessibility);
|
||||
}
|
||||
|
|
|
@ -18,6 +18,7 @@ import java.util.ArrayList;
|
|||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import org.eclipse.cdt.core.CCorePlugin;
|
||||
|
@ -43,7 +44,6 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.ClassTypeHelper;
|
|||
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPClassSpecializationScope;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPTemplates;
|
||||
import org.eclipse.cdt.internal.core.index.IIndexCPPBindingConstants;
|
||||
import org.eclipse.cdt.internal.core.pdom.db.PDOMNodeLinkedList;
|
||||
import org.eclipse.cdt.internal.core.pdom.dom.IPDOMMemberOwner;
|
||||
import org.eclipse.cdt.internal.core.pdom.dom.PDOMBinding;
|
||||
import org.eclipse.cdt.internal.core.pdom.dom.PDOMLinkage;
|
||||
|
@ -57,14 +57,14 @@ import org.eclipse.core.runtime.CoreException;
|
|||
class PDOMCPPClassSpecialization extends PDOMCPPSpecialization implements
|
||||
ICPPClassSpecialization, IPDOMMemberOwner, IPDOMCPPClassType {
|
||||
private static final int FIRST_BASE = PDOMCPPSpecialization.RECORD_SIZE + 0;
|
||||
private static final int MEMBER_LIST = PDOMCPPSpecialization.RECORD_SIZE + 4;
|
||||
private static final int FINAL = PDOMCPPSpecialization.RECORD_SIZE + 8; // byte
|
||||
private static final int MEMBERLIST = FIRST_BASE + 4;
|
||||
private static final int FINAL = MEMBERLIST + PDOMCPPMemberBlock.RECORD_SIZE; // byte
|
||||
|
||||
/**
|
||||
* The size in bytes of a PDOMCPPClassSpecialization record in the database.
|
||||
*/
|
||||
@SuppressWarnings("hiding")
|
||||
protected static final int RECORD_SIZE = PDOMCPPSpecialization.RECORD_SIZE + 9;
|
||||
protected static final int RECORD_SIZE = FINAL + 1;
|
||||
|
||||
private volatile ICPPClassScope fScope;
|
||||
private ObjectMap specializationMap; // Obtained from the synchronized PDOM cache
|
||||
|
@ -442,14 +442,14 @@ class PDOMCPPClassSpecialization extends PDOMCPPSpecialization implements
|
|||
|
||||
@Override
|
||||
public void addChild(PDOMNode member) throws CoreException {
|
||||
PDOMNodeLinkedList list = new PDOMNodeLinkedList(getLinkage(), record + MEMBER_LIST);
|
||||
list.addMember(member);
|
||||
PDOMCPPMemberBlock members = new PDOMCPPMemberBlock(getLinkage(), record + MEMBERLIST);
|
||||
members.addMember(member);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void acceptUncached(IPDOMVisitor visitor) throws CoreException {
|
||||
PDOMNodeLinkedList list = new PDOMNodeLinkedList(getLinkage(), record + MEMBER_LIST);
|
||||
list.accept(visitor);
|
||||
PDOMCPPMemberBlock members = new PDOMCPPMemberBlock(getLinkage(), record + MEMBERLIST);
|
||||
members.accept(visitor);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -475,4 +475,36 @@ class PDOMCPPClassSpecialization extends PDOMCPPSpecialization implements
|
|||
private void setFinal(ICPPClassType ct) throws CoreException {
|
||||
getDB().putByte(record + FINAL, (byte) (ct.isFinal() ? 1 : 0));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setAccessibility(IBinding member, int accessibility) {
|
||||
try {
|
||||
PDOMCPPMemberBlock members = new PDOMCPPMemberBlock(getLinkage(), record + MEMBERLIST);
|
||||
members.setAccessibility(member, accessibility);
|
||||
} catch(CoreException e) {
|
||||
CCorePlugin.log(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getAccessibility(IBinding member) {
|
||||
try {
|
||||
PDOMCPPMemberBlock members = new PDOMCPPMemberBlock(getLinkage(), record + MEMBERLIST);
|
||||
return members.getAccessibility(member);
|
||||
} catch(CoreException e) {
|
||||
CCorePlugin.log(e);
|
||||
return ICPPClassType.a_unspecified;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<IBinding, Integer> getMemberAccessibilities() {
|
||||
try {
|
||||
PDOMCPPMemberBlock members = new PDOMCPPMemberBlock(getLinkage(), record + MEMBERLIST);
|
||||
return members.getAccessibilities();
|
||||
} catch(CoreException e) {
|
||||
CCorePlugin.log(e);
|
||||
return EMPTY_ACCESSIBILITY_MAP;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,6 +15,11 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.cdt.internal.core.pdom.dom.cpp;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.eclipse.cdt.core.CCorePlugin;
|
||||
import org.eclipse.cdt.core.dom.IPDOMVisitor;
|
||||
import org.eclipse.cdt.core.dom.ast.ASTTypeUtil;
|
||||
|
@ -35,29 +40,24 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.SemanticUtil;
|
|||
import org.eclipse.cdt.internal.core.index.IIndexCPPBindingConstants;
|
||||
import org.eclipse.cdt.internal.core.pdom.PDOM;
|
||||
import org.eclipse.cdt.internal.core.pdom.db.Database;
|
||||
import org.eclipse.cdt.internal.core.pdom.db.PDOMNodeLinkedList;
|
||||
import org.eclipse.cdt.internal.core.pdom.dom.IPDOMMemberOwner;
|
||||
import org.eclipse.cdt.internal.core.pdom.dom.PDOMLinkage;
|
||||
import org.eclipse.cdt.internal.core.pdom.dom.PDOMName;
|
||||
import org.eclipse.cdt.internal.core.pdom.dom.PDOMNode;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Doug Schaefer
|
||||
*/
|
||||
class PDOMCPPClassType extends PDOMCPPBinding implements IPDOMCPPClassType, IPDOMMemberOwner {
|
||||
private static final int FIRSTBASE = PDOMCPPBinding.RECORD_SIZE + 0;
|
||||
private static final int MEMBERLIST = PDOMCPPBinding.RECORD_SIZE + 4;
|
||||
private static final int FIRSTFRIEND = PDOMCPPBinding.RECORD_SIZE + 8;
|
||||
private static final int KEY = PDOMCPPBinding.RECORD_SIZE + 12; // byte
|
||||
private static final int ANONYMOUS= PDOMCPPBinding.RECORD_SIZE + 13; // byte
|
||||
private static final int FINAL = PDOMCPPBinding.RECORD_SIZE + 14; // byte
|
||||
private static final int FIRSTBASE = PDOMCPPBinding.RECORD_SIZE;
|
||||
private static final int MEMBERLIST = FIRSTBASE + 4;
|
||||
private static final int FIRSTFRIEND = MEMBERLIST + PDOMCPPMemberBlock.RECORD_SIZE;
|
||||
private static final int KEY = FIRSTFRIEND + 4; // byte
|
||||
private static final int ANONYMOUS = KEY + 1; // byte
|
||||
private static final int FINAL = ANONYMOUS + 1; // byte
|
||||
@SuppressWarnings("hiding")
|
||||
protected static final int RECORD_SIZE = PDOMCPPBinding.RECORD_SIZE + 15;
|
||||
protected static final int RECORD_SIZE = FINAL + 1;
|
||||
|
||||
private PDOMCPPClassScope fScope; // No need for volatile, all fields of PDOMCPPClassScope are final.
|
||||
|
||||
|
@ -111,14 +111,14 @@ class PDOMCPPClassType extends PDOMCPPBinding implements IPDOMCPPClassType, IPDO
|
|||
public boolean mayHaveChildren() {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public final void addChild(PDOMNode member) throws CoreException {
|
||||
PDOMNodeLinkedList list = new PDOMNodeLinkedList(getLinkage(), record + MEMBERLIST);
|
||||
list.addMember(member);
|
||||
PDOMCPPMemberBlock members = new PDOMCPPMemberBlock(getLinkage(), record + MEMBERLIST);
|
||||
members.addMember(member);
|
||||
PDOMCPPClassScope.updateCache(this, member);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void accept(IPDOMVisitor visitor) throws CoreException {
|
||||
PDOMCPPClassScope.acceptViaCache(this, visitor, false);
|
||||
|
@ -130,7 +130,7 @@ class PDOMCPPClassType extends PDOMCPPBinding implements IPDOMCPPClassType, IPDO
|
|||
@Override
|
||||
public void acceptUncached(IPDOMVisitor visitor) throws CoreException {
|
||||
super.accept(visitor);
|
||||
PDOMNodeLinkedList list = new PDOMNodeLinkedList(getLinkage(), record + MEMBERLIST);
|
||||
PDOMCPPMemberBlock list = new PDOMCPPMemberBlock(getLinkage(), record + MEMBERLIST);
|
||||
list.accept(visitor);
|
||||
}
|
||||
|
||||
|
@ -143,7 +143,7 @@ class PDOMCPPClassType extends PDOMCPPBinding implements IPDOMCPPClassType, IPDO
|
|||
long rec = base != null ? base.getRecord() : 0;
|
||||
getDB().putRecPtr(record + FIRSTBASE, rec);
|
||||
}
|
||||
|
||||
|
||||
public void addBases(PDOMName classDefName, ICPPBase[] bases) throws CoreException {
|
||||
getPDOM().removeCachedResult(record + PDOMCPPLinkage.CACHE_BASES);
|
||||
final PDOMLinkage linkage = getLinkage();
|
||||
|
@ -192,7 +192,7 @@ class PDOMCPPClassType extends PDOMCPPBinding implements IPDOMCPPClassType, IPDO
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void addFriend(PDOMCPPFriend friend) throws CoreException {
|
||||
PDOMCPPFriend firstFriend = getFirstFriend();
|
||||
friend.setNextFriend(firstFriend);
|
||||
|
@ -255,7 +255,7 @@ class PDOMCPPClassType extends PDOMCPPBinding implements IPDOMCPPClassType, IPDO
|
|||
return getDB().getByte(record + ANONYMOUS) != 0;
|
||||
} catch (CoreException e) {
|
||||
CCorePlugin.log(e);
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -263,7 +263,7 @@ class PDOMCPPClassType extends PDOMCPPBinding implements IPDOMCPPClassType, IPDO
|
|||
public boolean isFinal() {
|
||||
try {
|
||||
return getDB().getByte(record + FINAL) != 0;
|
||||
} catch (CoreException e){
|
||||
} catch (CoreException e) {
|
||||
CCorePlugin.log(e);
|
||||
return false;
|
||||
}
|
||||
|
@ -309,7 +309,7 @@ class PDOMCPPClassType extends PDOMCPPBinding implements IPDOMCPPClassType, IPDO
|
|||
ICPPBase[] bases= (ICPPBase[]) getPDOM().getCachedResult(key);
|
||||
if (bases != null)
|
||||
return bases;
|
||||
|
||||
|
||||
try {
|
||||
List<PDOMCPPBase> list = new ArrayList<PDOMCPPBase>();
|
||||
for (PDOMCPPBase base = getFirstBase(); base != null; base = base.getNextBase())
|
||||
|
@ -388,7 +388,7 @@ class PDOMCPPClassType extends PDOMCPPBinding implements IPDOMCPPClassType, IPDO
|
|||
}
|
||||
|
||||
@Override
|
||||
public ICPPMethod[] getMethods() {
|
||||
public ICPPMethod[] getMethods() {
|
||||
return ClassTypeHelper.getMethods(this, null);
|
||||
}
|
||||
|
||||
|
@ -396,23 +396,55 @@ class PDOMCPPClassType extends PDOMCPPBinding implements IPDOMCPPClassType, IPDO
|
|||
public ICPPMethod[] getAllDeclaredMethods() {
|
||||
return ClassTypeHelper.getAllDeclaredMethods(this, null);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public IField[] getFields() {
|
||||
return ClassTypeHelper.getFields(this, null);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public IField findField(String name) {
|
||||
return ClassTypeHelper.findField(this, name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object clone() {
|
||||
public Object clone() {
|
||||
try {
|
||||
return super.clone();
|
||||
} catch (CloneNotSupportedException e) {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setAccessibility(IBinding member, int visibility) {
|
||||
try {
|
||||
PDOMCPPMemberBlock members = new PDOMCPPMemberBlock(getLinkage(), record + MEMBERLIST);
|
||||
members.setAccessibility(member, visibility);
|
||||
} catch(CoreException e) {
|
||||
CCorePlugin.log(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getAccessibility(IBinding member) {
|
||||
try {
|
||||
PDOMCPPMemberBlock members = new PDOMCPPMemberBlock(getLinkage(), record + MEMBERLIST);
|
||||
return members.getAccessibility(member);
|
||||
} catch(CoreException e) {
|
||||
CCorePlugin.log(e);
|
||||
return ICPPClassType.a_unspecified;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<IBinding, Integer> getMemberAccessibilities() {
|
||||
try {
|
||||
PDOMCPPMemberBlock members = new PDOMCPPMemberBlock(getLinkage(), record + MEMBERLIST);
|
||||
return members.getAccessibilities();
|
||||
} catch(CoreException e) {
|
||||
CCorePlugin.log(e);
|
||||
return EMPTY_ACCESSIBILITY_MAP;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -361,7 +361,12 @@ class PDOMCPPLinkage extends PDOMLinkage implements IIndexCPPBindingConstants {
|
|||
if (inputBinding instanceof CPPClosureType) {
|
||||
addImplicitMethods(pdomBinding, (ICPPClassType) binding, fromName);
|
||||
}
|
||||
|
||||
else if (parent instanceof IPDOMCPPClassType) {
|
||||
IBinding bindingOwner = binding.getOwner();
|
||||
if(bindingOwner instanceof ICPPClassType){
|
||||
((IPDOMCPPClassType) parent).setAccessibility(pdomBinding, ((ICPPClassType) bindingOwner).getAccessibility(binding));
|
||||
}
|
||||
}
|
||||
// Synchronize the tags associated with the persistent binding to match
|
||||
// the set that is associated with the input binding.
|
||||
TagManager.getInstance().syncTags(pdomBinding, inputBinding);
|
||||
|
@ -573,6 +578,9 @@ class PDOMCPPLinkage extends PDOMLinkage implements IIndexCPPBindingConstants {
|
|||
PDOMBinding pdomBinding= adaptBinding(method);
|
||||
if (pdomBinding == null) {
|
||||
pdomBinding = createBinding(type, method, fileLocalRec);
|
||||
if (type instanceof IPDOMCPPClassType) {
|
||||
((IPDOMCPPClassType) type).setAccessibility(pdomBinding, ICPPClassType.a_public);
|
||||
}
|
||||
} else if (!getPDOM().hasLastingDefinition(pdomBinding)) {
|
||||
pdomBinding.update(this, method);
|
||||
old.remove(pdomBinding);
|
||||
|
|
|
@ -11,6 +11,8 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.cdt.internal.core.pdom.dom.cpp;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import org.eclipse.cdt.core.CCorePlugin;
|
||||
import org.eclipse.cdt.core.dom.IPDOMVisitor;
|
||||
import org.eclipse.cdt.core.dom.ast.DOMException;
|
||||
|
@ -365,4 +367,14 @@ public class PDOMCPPTemplateTemplateParameter extends PDOMCPPBinding
|
|||
public ICPPDeferredClassInstance asDeferredInstance() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getAccessibility(IBinding member) {
|
||||
return a_unspecified;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<IBinding, Integer> getMemberAccessibilities() {
|
||||
return EMPTY_ACCESSIBILITY_MAP;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue