/*#ifndef(UMD)*/
"use strict";
/*global _gpfAssert*/ // Assertion method
/*global _GpfExtensibleObject*/ // Extensible
/*global _GpfClassDefMember*/ // GPF class member definition
/*exported _GpfClassDefinition*/ // GPF class definition
/*#endif*/

_gpfErrorDeclare("define/definition/class", {
    "classMemberAlreadyExist":
        "You can't add a member twice",
    "classInvalidVisibility":
        "Invalid visibility keyword"
});

/**
 * Extensible information about a class
 *
 * @class {_GpfClassDefinition}
 * @param {String} qName Fully qualified class name
 * @param {_GpfClassDefinition} [superClassDef=null] superClassDef Super class definition
 */
function _GpfClassDefinition (qName, superClassDef) {
    _gpfAssert(!superClassDef || superClassDef instanceof _GpfClassDefinition, "Expected a _GpfClassDefinition");
    /*jshint validthis:true*/ // constructor
    var superMembers;
    this._qName = qName;
    if (superClassDef) {
        this._super = superClassDef;
        superMembers = superClassDef._member;
    } else {
        superMembers = {};
    }
    this._members = Object.create(superMembers);
}

_GpfClassDefMember.prototype = {

    // @property {String} Fully qualified class name
    _qName: null,

    // @property {_GpfClassDefinition} Super class definition
    _super: null,

    // @property {Object} Dictionary of members
    _members: {},

    /**
     * Get a member by its name
     *
     * @param {String} name Member name
     * @return {_GpfClassDefMember|undefined} Member
     */
    getMember: function (name) {
        return this._members[name];
    },

    addMember: function (member) {
        _gpfAssert(member instanceof _GpfClassDefMember, "Expected a _GpfClassDefMember");
        var name = member.getName();
        if (this._members.hasOwnProperty(name)) {
            throw gpf.Error.classMemberAlreadyExist();
        }
        this._members[name] = member;
    }

};

_GpfClassDefinition.extension = new _GpfExtensibleObject(_GpfClassDefinition.prototype);

@@ -361,77 +361,9 @@
 ice%22
-,%0A    %22classInvalidVisibility%22:%0A        %22Invalid visibility keyword%22
 %0A
+
 %7D);%0A
@@ -1066,22 +1066,23 @@
 ClassDef
-Member
+inition
 .prototy
@@ -1530,24 +1530,170 @@
 e%5D;%0A    %7D,%0A%0A
+    /**%0A     * Add a member%0A     *%0A     * @param %7B_GpfClassDefMember%7D member Member to add%0A     * @return %7B_GpfClassDefinition%7D Chainable%0A     */%0A
     addMembe
@@ -1841,16 +1841,60 @@
 etName()
+,%0A            existing = this._members%5Bname%5D
 ;%0A      
@@ -1998,24 +1998,108 @@
 ;%0A        %7D%0A
+        if (existing) %7B%0A            existing.checkOverloadedWith(member);%0A        %7D%0A
         this
@@ -2120,24 +2120,45 @@
 %5D = member;%0A
+        return this;%0A
     %7D%0A%0A%7D;%0A%0A_

Test added member