diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/wizards/classwizard/AbstractMethodStub.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/wizards/classwizard/AbstractMethodStub.java index 46970bc3395..9c014c9e81c 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/wizards/classwizard/AbstractMethodStub.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/wizards/classwizard/AbstractMethodStub.java @@ -19,17 +19,37 @@ import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility; import org.eclipse.core.runtime.CoreException; public abstract class AbstractMethodStub implements IMethodStub { - protected String fName; - protected String fDescription; - protected ASTAccessVisibility fAccess; - protected boolean fIsVirtual; - protected boolean fIsInline; + private String fName; + private String fDescription; + private ASTAccessVisibility fAccess; + private boolean fIsVirtual; + private EImplMethod fImplMethod; - public AbstractMethodStub(String name, ASTAccessVisibility access, boolean isVirtual, boolean isInline) { + public AbstractMethodStub(String name, ASTAccessVisibility access, boolean isVirtual, EImplMethod impl) { fName = name; fAccess = access; fIsVirtual = isVirtual; - fIsInline = isInline; + fImplMethod = impl; + } + + @Override + public EImplMethod getImplMethod() { + return fImplMethod; + } + + @Override + public boolean isDeleted() { + return fImplMethod == EImplMethod.DELETED; + } + + @Override + public boolean isDefault() { + return fImplMethod == EImplMethod.DEFAULT; + } + + @Override + public boolean hasDefinition() { + return fImplMethod == EImplMethod.DEFINITION; } @Override @@ -64,12 +84,12 @@ public abstract class AbstractMethodStub implements IMethodStub { @Override public boolean isInline() { - return fIsInline; + return fImplMethod == EImplMethod.INLINE; } @Override - public void setInline(boolean isInline) { - fIsInline = isInline; + public void setImplMethod(EImplMethod method) { + fImplMethod = method; } @Override @@ -83,7 +103,7 @@ public abstract class AbstractMethodStub implements IMethodStub { } @Override - public boolean canModifyInline() { + public boolean canModifyImplementation() { return true; } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/wizards/classwizard/AssignOpMethodStub.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/wizards/classwizard/AssignOpMethodStub.java index 9609dd37ed6..e8f2330ed77 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/wizards/classwizard/AssignOpMethodStub.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/wizards/classwizard/AssignOpMethodStub.java @@ -22,11 +22,11 @@ public final class AssignOpMethodStub extends AbstractMethodStub { private static String NAME = NewClassWizardMessages.NewClassCodeGeneration_stub_assign_op_name; public AssignOpMethodStub() { - this(ASTAccessVisibility.PUBLIC, false); + this(ASTAccessVisibility.PUBLIC, EImplMethod.DEFINITION); } - public AssignOpMethodStub(ASTAccessVisibility access, boolean isInline) { - super(NAME, access, false, isInline); + public AssignOpMethodStub(ASTAccessVisibility access, EImplMethod method) { + super(NAME, access, false, method); } @Override @@ -37,7 +37,7 @@ public final class AssignOpMethodStub extends AbstractMethodStub { buf.append("& operator=(const "); //$NON-NLS-1$ buf.append(className); buf.append("& other)"); //$NON-NLS-1$ - if (fIsInline) { + if (isInline()) { buf.append('{'); buf.append(lineDelimiter); String body = CodeGeneration.getMethodBodyContent(tu, className, "operator=", null, lineDelimiter); //$NON-NLS-1$ @@ -46,6 +46,10 @@ public final class AssignOpMethodStub extends AbstractMethodStub { buf.append(lineDelimiter); } buf.append('}'); + } else if (isDefault()) { + buf.append(" = default;"); //$NON-NLS-1$ + } else if (isDeleted()) { + buf.append(" = delete;"); //$NON-NLS-1$ } else { buf.append(";"); //$NON-NLS-1$ } @@ -55,7 +59,7 @@ public final class AssignOpMethodStub extends AbstractMethodStub { @Override public String createMethodImplementation(ITranslationUnit tu, String className, IBaseClassInfo[] baseClasses, String lineDelimiter) throws CoreException { - if (fIsInline) { + if (!hasDefinition()) { return ""; //$NON-NLS-1$ } StringBuilder buf = new StringBuilder(); diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/wizards/classwizard/BaseClassesLabelProvider.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/wizards/classwizard/BaseClassesLabelProvider.java index fc200736fd4..b654bf33307 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/wizards/classwizard/BaseClassesLabelProvider.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/wizards/classwizard/BaseClassesLabelProvider.java @@ -14,6 +14,7 @@ package org.eclipse.cdt.internal.ui.wizards.classwizard; import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility; +import org.eclipse.cdt.internal.ui.wizards.classwizard.IMethodStub.EImplMethod; import org.eclipse.cdt.ui.browser.typeinfo.TypeInfoLabelProvider; import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.ITableLabelProvider; @@ -26,6 +27,11 @@ public final class BaseClassesLabelProvider implements ITableLabelProvider { private static final String ACCESS_PROTECTED = NewClassWizardMessages.BaseClassesLabelProvider_access_protected_label; private static final String ACCESS_PRIVATE = NewClassWizardMessages.BaseClassesLabelProvider_access_private_label; + private static final String IMPL_DEFINITION = NewClassWizardMessages.BaseClassesLabelProvider_impl_definition; + private static final String IMPL_DEFAULT = NewClassWizardMessages.BaseClassesLabelProvider_impl_default; + private static final String IMPL_DELETED = NewClassWizardMessages.BaseClassesLabelProvider_impl_deleted; + private static final String IMPL_INLINE = NewClassWizardMessages.BaseClassesLabelProvider_impl_inline; + public static final String getYesNoText(boolean value) { return value ? YES_VALUE : NO_VALUE; } @@ -38,6 +44,20 @@ public final class BaseClassesLabelProvider implements ITableLabelProvider { return ACCESS_PUBLIC; } + public static final String getImplText(EImplMethod method) { + switch (method) { + case DELETED: + return IMPL_DELETED; + case DEFAULT: + return IMPL_DEFAULT; + case INLINE: + return IMPL_INLINE; + case DEFINITION: + default: + return IMPL_DEFINITION; + } + } + private static TypeInfoLabelProvider fTypeInfoLabelProvider = new TypeInfoLabelProvider( TypeInfoLabelProvider.SHOW_FULLY_QUALIFIED); diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/wizards/classwizard/ConstructorMethodStub.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/wizards/classwizard/ConstructorMethodStub.java index fad372aeff6..edd69c1e077 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/wizards/classwizard/ConstructorMethodStub.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/wizards/classwizard/ConstructorMethodStub.java @@ -22,11 +22,11 @@ public final class ConstructorMethodStub extends AbstractMethodStub { private static String NAME = NewClassWizardMessages.NewClassCodeGeneration_stub_constructor_name; public ConstructorMethodStub() { - this(ASTAccessVisibility.PUBLIC, false); + this(ASTAccessVisibility.PUBLIC, EImplMethod.DEFINITION); } - public ConstructorMethodStub(ASTAccessVisibility access, boolean isInline) { - super(NAME, access, false, isInline); + public ConstructorMethodStub(ASTAccessVisibility access, EImplMethod method) { + super(NAME, access, false, method); } @Override @@ -35,7 +35,7 @@ public final class ConstructorMethodStub extends AbstractMethodStub { StringBuilder buf = new StringBuilder(); buf.append(className); buf.append("()"); //$NON-NLS-1$ - if (fIsInline) { + if (isInline()) { buf.append('{'); buf.append(lineDelimiter); String body = CodeGeneration.getConstructorBodyContent(tu, className, null, lineDelimiter); @@ -44,6 +44,10 @@ public final class ConstructorMethodStub extends AbstractMethodStub { buf.append(lineDelimiter); } buf.append('}'); + } else if (isDefault()) { + buf.append(" = default;"); //$NON-NLS-1$ + } else if (isDeleted()) { + buf.append(" = delete;"); //$NON-NLS-1$ } else { buf.append(";"); //$NON-NLS-1$ } @@ -53,7 +57,7 @@ public final class ConstructorMethodStub extends AbstractMethodStub { @Override public String createMethodImplementation(ITranslationUnit tu, String className, IBaseClassInfo[] baseClasses, String lineDelimiter) throws CoreException { - if (fIsInline) { + if (!hasDefinition()) { return ""; //$NON-NLS-1$ } StringBuilder buf = new StringBuilder(); diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/wizards/classwizard/CopyConstructorMethodStub.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/wizards/classwizard/CopyConstructorMethodStub.java index 2dbae40e58d..31203faf17a 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/wizards/classwizard/CopyConstructorMethodStub.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/wizards/classwizard/CopyConstructorMethodStub.java @@ -22,11 +22,11 @@ public final class CopyConstructorMethodStub extends AbstractMethodStub { private static String NAME = NewClassWizardMessages.NewClassCodeGeneration_stub_copy_constructor_name; public CopyConstructorMethodStub() { - this(ASTAccessVisibility.PUBLIC, false); + this(ASTAccessVisibility.PUBLIC, EImplMethod.DEFINITION); } - public CopyConstructorMethodStub(ASTAccessVisibility access, boolean isInline) { - super(NAME, access, false, isInline); + public CopyConstructorMethodStub(ASTAccessVisibility access, EImplMethod method) { + super(NAME, access, false, method); } @Override @@ -37,7 +37,7 @@ public final class CopyConstructorMethodStub extends AbstractMethodStub { buf.append("(const "); //$NON-NLS-1$ buf.append(className); buf.append("& other)"); //$NON-NLS-1$ - if (fIsInline) { + if (isInline()) { buf.append('{'); buf.append(lineDelimiter); String body = CodeGeneration.getConstructorBodyContent(tu, className, null, lineDelimiter); @@ -46,6 +46,10 @@ public final class CopyConstructorMethodStub extends AbstractMethodStub { buf.append(lineDelimiter); } buf.append('}'); + } else if (isDefault()) { + buf.append(" = default;"); //$NON-NLS-1$ + } else if (isDeleted()) { + buf.append(" = delete;"); //$NON-NLS-1$ } else { buf.append(";"); //$NON-NLS-1$ } @@ -55,7 +59,7 @@ public final class CopyConstructorMethodStub extends AbstractMethodStub { @Override public String createMethodImplementation(ITranslationUnit tu, String className, IBaseClassInfo[] baseClasses, String lineDelimiter) throws CoreException { - if (fIsInline) { + if (!hasDefinition()) { return ""; //$NON-NLS-1$ } StringBuilder buf = new StringBuilder(); diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/wizards/classwizard/DestructorMethodStub.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/wizards/classwizard/DestructorMethodStub.java index 13a7c89acfa..384a10840fc 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/wizards/classwizard/DestructorMethodStub.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/wizards/classwizard/DestructorMethodStub.java @@ -24,24 +24,24 @@ public final class DestructorMethodStub extends AbstractMethodStub { private static String NAME = NewClassWizardMessages.NewClassCodeGeneration_stub_destructor_name; public DestructorMethodStub() { - this(ASTAccessVisibility.PUBLIC, true, false); + this(ASTAccessVisibility.PUBLIC, true, EImplMethod.DEFINITION); } - public DestructorMethodStub(ASTAccessVisibility access, boolean isVirtual, boolean isInline) { - super(NAME, access, isVirtual, isInline); + public DestructorMethodStub(ASTAccessVisibility access, boolean isVirtual, EImplMethod method) { + super(NAME, access, isVirtual, method); } @Override public String createMethodDeclaration(ITranslationUnit tu, String className, IBaseClassInfo[] baseClasses, String lineDelimiter) throws CoreException { StringBuilder buf = new StringBuilder(); - if (fIsVirtual) { + if (isVirtual()) { buf.append("virtual "); //$NON-NLS-1$ } buf.append("~"); //$NON-NLS-1$ buf.append(className); buf.append("()"); //$NON-NLS-1$ - if (fIsInline) { + if (isInline()) { buf.append('{'); buf.append(lineDelimiter); String body = CodeGeneration.getDestructorBodyContent(tu, className, null, lineDelimiter); @@ -50,6 +50,10 @@ public final class DestructorMethodStub extends AbstractMethodStub { buf.append(lineDelimiter); } buf.append('}'); + } else if (isDefault()) { + buf.append(" = default;"); //$NON-NLS-1$ + } else if (isDeleted()) { + buf.append(" = delete;"); //$NON-NLS-1$ } else { buf.append(";"); //$NON-NLS-1$ } @@ -59,7 +63,7 @@ public final class DestructorMethodStub extends AbstractMethodStub { @Override public String createMethodImplementation(ITranslationUnit tu, String className, IBaseClassInfo[] baseClasses, String lineDelimiter) throws CoreException { - if (fIsInline) { + if (!hasDefinition()) { return ""; //$NON-NLS-1$ } StringBuilder buf = new StringBuilder(); diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/wizards/classwizard/IMethodStub.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/wizards/classwizard/IMethodStub.java index 7191ce89130..cb3b2a84547 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/wizards/classwizard/IMethodStub.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/wizards/classwizard/IMethodStub.java @@ -19,6 +19,10 @@ import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility; import org.eclipse.core.runtime.CoreException; public interface IMethodStub { + public enum EImplMethod { + DEFINITION, INLINE, DEFAULT, DELETED + } + public String getName(); public String getDescription(); @@ -35,11 +39,19 @@ public interface IMethodStub { public void setVirtual(boolean isVirtual); + public EImplMethod getImplMethod(); + public boolean isInline(); - public boolean canModifyInline(); + public boolean isDeleted(); - public void setInline(boolean isVirtual); + public boolean isDefault(); + + public boolean hasDefinition(); + + public boolean canModifyImplementation(); + + public void setImplMethod(EImplMethod method); public boolean isConstructor(); diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/wizards/classwizard/MethodStubsLabelProvider.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/wizards/classwizard/MethodStubsLabelProvider.java index 22e9e26514e..58261eb0ab2 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/wizards/classwizard/MethodStubsLabelProvider.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/wizards/classwizard/MethodStubsLabelProvider.java @@ -54,7 +54,7 @@ public final class MethodStubsLabelProvider implements ITableLabelProvider { case 2: return BaseClassesLabelProvider.getYesNoText(stub.isVirtual()); case 3: - return BaseClassesLabelProvider.getYesNoText(stub.isInline()); + return BaseClassesLabelProvider.getImplText(stub.getImplMethod()); default: return null; } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/wizards/classwizard/MethodStubsListDialogField.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/wizards/classwizard/MethodStubsListDialogField.java index 8b6b2aea2c3..e2e87d7b8b7 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/wizards/classwizard/MethodStubsListDialogField.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/wizards/classwizard/MethodStubsListDialogField.java @@ -17,6 +17,7 @@ package org.eclipse.cdt.internal.ui.wizards.classwizard; import java.util.List; import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility; +import org.eclipse.cdt.internal.ui.wizards.classwizard.IMethodStub.EImplMethod; import org.eclipse.cdt.internal.ui.wizards.dialogfields.CheckedListDialogField; import org.eclipse.cdt.internal.ui.wizards.dialogfields.IListAdapter; import org.eclipse.cdt.internal.ui.wizards.dialogfields.ListDialogField; @@ -38,13 +39,18 @@ public class MethodStubsListDialogField extends CheckedListDialogField