diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/ClassTypeHelperTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/ClassTypeHelperTests.java
index f3454e8e5cd..aadfeac5678 100644
--- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/ClassTypeHelperTests.java
+++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/ClassTypeHelperTests.java
@@ -59,11 +59,11 @@ public class ClassTypeHelperTests extends AST2BaseTest {
public void testHasTrivialCopyCtor() throws Exception {
BindingAssertionHelper helper = getAssertionHelper();
ICPPClassType classA = helper.assertNonProblem("A {", 1, ICPPClassType.class);
- assertFalse(ClassTypeHelper.hasTrivialCopyCtor(classA));
+ assertFalse(ClassTypeHelper.hasTrivialCopyCtor(classA, null));
ICPPClassType classB = helper.assertNonProblem("B {", 1, ICPPClassType.class);
- assertTrue(ClassTypeHelper.hasTrivialCopyCtor(classB));
+ assertTrue(ClassTypeHelper.hasTrivialCopyCtor(classB, null));
ICPPClassType classC = helper.assertNonProblem("C {", 1, ICPPClassType.class);
- assertFalse(ClassTypeHelper.hasTrivialCopyCtor(classC));
+ assertFalse(ClassTypeHelper.hasTrivialCopyCtor(classC, null));
}
// struct A {
@@ -87,11 +87,11 @@ public class ClassTypeHelperTests extends AST2BaseTest {
public void testHasTrivialDestructor() throws Exception {
BindingAssertionHelper helper = getAssertionHelper();
ICPPClassType classA = helper.assertNonProblem("A {", 1, ICPPClassType.class);
- assertFalse(ClassTypeHelper.hasTrivialDestructor(classA));
+ assertFalse(ClassTypeHelper.hasTrivialDestructor(classA, null));
ICPPClassType classB = helper.assertNonProblem("B {", 1, ICPPClassType.class);
- assertTrue(ClassTypeHelper.hasTrivialDestructor(classB));
+ assertTrue(ClassTypeHelper.hasTrivialDestructor(classB, null));
ICPPClassType classC = helper.assertNonProblem("C {", 1, ICPPClassType.class);
- assertFalse(ClassTypeHelper.hasTrivialDestructor(classC));
+ assertFalse(ClassTypeHelper.hasTrivialDestructor(classC, null));
}
// struct A {
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/rewrite/TypeHelper.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/rewrite/TypeHelper.java
index 254059fb287..6283e41a767 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/rewrite/TypeHelper.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/rewrite/TypeHelper.java
@@ -29,7 +29,6 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.SemanticUtil;
* @since 5.4
*/
public class TypeHelper {
-
// Do not instantiate - all methods are static.
private TypeHelper() {
}
@@ -49,8 +48,8 @@ public class TypeHelper {
if (type instanceof ICompositeType) {
if (type instanceof ICPPClassType) {
ICPPClassType classType = ((ICPPClassType) type);
- if (!ClassTypeHelper.hasTrivialCopyCtor(classType) ||
- !ClassTypeHelper.hasTrivialDestructor(classType)) {
+ if (!ClassTypeHelper.hasTrivialCopyCtor(classType, ast) ||
+ !ClassTypeHelper.hasTrivialDestructor(classType, ast)) {
return true;
}
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/ClassTypeHelper.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/ClassTypeHelper.java
index 44689aa71d6..3ddeba3b2fb 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/ClassTypeHelper.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/ClassTypeHelper.java
@@ -870,7 +870,7 @@ public class ClassTypeHelper {
* @param classTarget the class to check
* @return true
if the class has a trivial copy constructor
*/
- public static boolean hasTrivialCopyCtor(ICPPClassType classTarget) {
+ public static boolean hasTrivialCopyCtor(ICPPClassType classTarget, IASTNode point) {
if (getImplicitCopyCtor(classTarget) == null)
return false;
if (isPolymorphic(classTarget))
@@ -879,8 +879,8 @@ public class ClassTypeHelper {
if (base.isVirtual())
return false;
}
- for (ICPPClassType baseClass : getAllBases(classTarget, null)) {
- if (!classTarget.isSameType(baseClass) && !hasTrivialCopyCtor(baseClass))
+ for (ICPPClassType baseClass : getAllBases(classTarget, point)) {
+ if (!classTarget.isSameType(baseClass) && !hasTrivialCopyCtor(baseClass, point))
return false;
}
for (ICPPField field : classTarget.getDeclaredFields()) {
@@ -888,7 +888,7 @@ public class ClassTypeHelper {
IType type = field.getType();
type = SemanticUtil.getNestedType(type, TDEF | CVTYPE | ARRAY);
if (type instanceof ICPPClassType && !classTarget.isSameType(type) &&
- !hasTrivialCopyCtor((ICPPClassType) type)) {
+ !hasTrivialCopyCtor((ICPPClassType) type, point)) {
return false;
}
}
@@ -924,23 +924,24 @@ public class ClassTypeHelper {
* Similar to std::tr1::has_trivial_default_constructor
.
*
* @param classTarget the class to check
+ * @param point
* @return true
if the class has a trivial default constructor
*/
- public static boolean hasTrivialDefaultConstructor(ICPPClassType classTarget) {
- for (ICPPConstructor ctor : classTarget.getConstructors()) {
+ public static boolean hasTrivialDefaultConstructor(ICPPClassType classTarget, IASTNode point) {
+ for (ICPPConstructor ctor : getConstructors(classTarget, point)) {
if (!ctor.isImplicit() && ctor.getParameters().length == 0)
return false;
}
for (ICPPClassType baseClass : getAllBases(classTarget, null)) {
- if (!classTarget.isSameType(baseClass) && !hasTrivialDefaultConstructor(baseClass))
+ if (!classTarget.isSameType(baseClass) && !hasTrivialDefaultConstructor(baseClass, point))
return false;
}
- for (ICPPField field : classTarget.getDeclaredFields()) {
+ for (ICPPField field : getDeclaredFields(classTarget, point)) {
if (!field.isStatic()) {
IType type = field.getType();
type = SemanticUtil.getNestedType(type, TDEF | CVTYPE | ARRAY);
if (type instanceof ICPPClassType && !classTarget.isSameType(type) &&
- !hasTrivialDefaultConstructor((ICPPClassType) type)) {
+ !hasTrivialDefaultConstructor((ICPPClassType) type, point)) {
return false;
}
}
@@ -962,21 +963,21 @@ public class ClassTypeHelper {
* @param classTarget the class to check
* @return true
if the class has a trivial destructor
*/
- public static boolean hasTrivialDestructor(ICPPClassType classTarget) {
- for (ICPPMethod method : classTarget.getDeclaredMethods()) {
+ public static boolean hasTrivialDestructor(ICPPClassType classTarget, IASTNode point) {
+ for (ICPPMethod method : getDeclaredMethods(classTarget, point)) {
if (method.isDestructor())
return false;
}
for (ICPPClassType baseClass : getAllBases(classTarget, null)) {
- if (!classTarget.isSameType(baseClass) && !hasTrivialDestructor(baseClass))
+ if (!classTarget.isSameType(baseClass) && !hasTrivialDestructor(baseClass, point))
return false;
}
- for (ICPPField field : classTarget.getDeclaredFields()) {
+ for (ICPPField field : getDeclaredFields(classTarget, point)) {
if (!field.isStatic()) {
IType type = field.getType();
type = SemanticUtil.getNestedType(type, TDEF | CVTYPE | ARRAY);
if (type instanceof ICPPClassType && !classTarget.isSameType(type) &&
- !hasTrivialDestructor((ICPPClassType) type)) {
+ !hasTrivialDestructor((ICPPClassType) type, point)) {
return false;
}
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVariableReadWriteFlags.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVariableReadWriteFlags.java
index cb3e0dad436..4086f1bd98c 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVariableReadWriteFlags.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVariableReadWriteFlags.java
@@ -61,7 +61,7 @@ public final class CPPVariableReadWriteFlags extends VariableReadWriteFlags {
IType type = CPPVisitor.createType(parent);
if (type instanceof ICPPUnknownType ||
type instanceof ICPPClassType &&
- !ClassTypeHelper.hasTrivialDefaultConstructor((ICPPClassType) type)) {
+ !ClassTypeHelper.hasTrivialDefaultConstructor((ICPPClassType) type, parent)) {
return WRITE;
}
return super.rwInDeclarator(parent, indirection);