setNsURI(eNS_URI);
// Obtain other dependent packages
CommonsPackage theCommonsPackage = (CommonsPackage)EPackage.Registry.INSTANCE.getEPackage(CommonsPackage.eNS_URI);
TypesPackage theTypesPackage = (TypesPackage)EPackage.Registry.INSTANCE.getEPackage(TypesPackage.eNS_URI);
ClassifiersPackage theClassifiersPackage = (ClassifiersPackage)EPackage.Registry.INSTANCE.getEPackage(ClassifiersPackage.eNS_URI);
ReferencesPackage theReferencesPackage = (ReferencesPackage)EPackage.Registry.INSTANCE.getEPackage(ReferencesPackage.eNS_URI);
ArraysPackage theArraysPackage = (ArraysPackage)EPackage.Registry.INSTANCE.getEPackage(ArraysPackage.eNS_URI);
InstantiationsPackage theInstantiationsPackage = (InstantiationsPackage)EPackage.Registry.INSTANCE.getEPackage(InstantiationsPackage.eNS_URI);
StatementsPackage theStatementsPackage = (StatementsPackage)EPackage.Registry.INSTANCE.getEPackage(StatementsPackage.eNS_URI);
ParametersPackage theParametersPackage = (ParametersPackage)EPackage.Registry.INSTANCE.getEPackage(ParametersPackage.eNS_URI);
ModifiersPackage theModifiersPackage = (ModifiersPackage)EPackage.Registry.INSTANCE.getEPackage(ModifiersPackage.eNS_URI);
VariablesPackage theVariablesPackage = (VariablesPackage)EPackage.Registry.INSTANCE.getEPackage(VariablesPackage.eNS_URI);
AnnotationsPackage theAnnotationsPackage = (AnnotationsPackage)EPackage.Registry.INSTANCE.getEPackage(AnnotationsPackage.eNS_URI);
// Create type parameters
// Set bounds for type parameters
// Add supertypes to classes
exceptionThrowerEClass.getESuperTypes().add(theCommonsPackage.getCommentable());
memberEClass.getESuperTypes().add(theCommonsPackage.getNamedElement());
memberContainerEClass.getESuperTypes().add(theCommonsPackage.getCommentable());
additionalFieldEClass.getESuperTypes().add(theReferencesPackage.getReferenceableElement());
additionalFieldEClass.getESuperTypes().add(theArraysPackage.getArrayTypeable());
additionalFieldEClass.getESuperTypes().add(theInstantiationsPackage.getInitializable());
constructorEClass.getESuperTypes().add(this.getMember());
constructorEClass.getESuperTypes().add(theStatementsPackage.getStatementListContainer());
constructorEClass.getESuperTypes().add(theParametersPackage.getParametrizable());
constructorEClass.getESuperTypes().add(this.getExceptionThrower());
constructorEClass.getESuperTypes().add(theModifiersPackage.getAnnotableAndModifiable());
emptyMemberEClass.getESuperTypes().add(this.getMember());
fieldEClass.getESuperTypes().add(this.getMember());
fieldEClass.getESuperTypes().add(theInstantiationsPackage.getInitializable());
fieldEClass.getESuperTypes().add(theVariablesPackage.getVariable());
fieldEClass.getESuperTypes().add(theReferencesPackage.getReferenceableElement());
fieldEClass.getESuperTypes().add(theModifiersPackage.getAnnotableAndModifiable());
methodEClass.getESuperTypes().add(this.getMember());
methodEClass.getESuperTypes().add(theTypesPackage.getTypedElement());
methodEClass.getESuperTypes().add(theArraysPackage.getArrayTypeable());
methodEClass.getESuperTypes().add(theParametersPackage.getParametrizable());
methodEClass.getESuperTypes().add(theReferencesPackage.getReferenceableElement());
interfaceMethodEClass.getESuperTypes().add(this.getMethod());
classMethodEClass.getESuperTypes().add(this.getMethod());
classMethodEClass.getESuperTypes().add(theStatementsPackage.getStatementListContainer());
enumConstantEClass.getESuperTypes().add(theReferencesPackage.getReferenceableElement());
enumConstantEClass.getESuperTypes().add(theReferencesPackage.getArgumentable());
enumConstantEClass.getESuperTypes().add(theAnnotationsPackage.getAnnotable());
// Initialize classes and features; add operations and parameters
initEClass(exceptionThrowerEClass, ExceptionThrower.class, "ExceptionThrower", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
initEReference(getExceptionThrower_Exceptions(), theTypesPackage.getNamespaceClassifierReference(), null, "exceptions", null, 0, -1, ExceptionThrower.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
initEClass(memberEClass, Member.class, "Member", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
initEClass(memberContainerEClass, MemberContainer.class, "MemberContainer", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
initEReference(getMemberContainer_Members(), this.getMember(), null, "members", null, 0, -1, MemberContainer.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
initEReference(getMemberContainer_DefaultMembers(), this.getMember(), null, "defaultMembers", null, 0, -1, MemberContainer.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
EOperation op = addEOperation(memberContainerEClass, theClassifiersPackage.getConcreteClassifier(), "getContainedClassifier", 0, 1, IS_UNIQUE, IS_ORDERED);
addEParameter(op, ecorePackage.getEString(), "name", 0, 1, IS_UNIQUE, IS_ORDERED);
op = addEOperation(memberContainerEClass, this.getField(), "getContainedField", 0, 1, IS_UNIQUE, IS_ORDERED);
addEParameter(op, ecorePackage.getEString(), "name", 0, 1, IS_UNIQUE, IS_ORDERED);
op = addEOperation(memberContainerEClass, this.getMethod(), "getContainedMethod", 0, 1, IS_UNIQUE, IS_ORDERED);
addEParameter(op, ecorePackage.getEString(), "name", 0, 1, IS_UNIQUE, IS_ORDERED);
initEClass(additionalFieldEClass, AdditionalField.class, "AdditionalField", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
addEOperation(additionalFieldEClass, ecorePackage.getELong(), "getArrayDimension", 0, 1, IS_UNIQUE, IS_ORDERED);
initEClass(constructorEClass, Constructor.class, "Constructor", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
initEClass(emptyMemberEClass, EmptyMember.class, "EmptyMember", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
initEClass(fieldEClass, Field.class, "Field", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
initEReference(getField_AdditionalFields(), this.getAdditionalField(), null, "additionalFields", null, 0, -1, Field.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
initEClass(methodEClass, Method.class, "Method", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
op = addEOperation(methodEClass, ecorePackage.getEBoolean(), "isMethodForCall", 0, 1, IS_UNIQUE, IS_ORDERED);
addEParameter(op, theReferencesPackage.getMethodCall(), "methodCall", 0, 1, IS_UNIQUE, IS_ORDERED);
addEParameter(op, ecorePackage.getEBoolean(), "needsPerfectMatch", 0, 1, IS_UNIQUE, IS_ORDERED);
op = addEOperation(methodEClass, ecorePackage.getEBoolean(), "isSomeMethodForCall", 0, 1, IS_UNIQUE, IS_ORDERED);
addEParameter(op, theReferencesPackage.getMethodCall(), "methodCall", 0, 1, IS_UNIQUE, IS_ORDERED);
op = addEOperation(methodEClass, ecorePackage.getEBoolean(), "isBetterMethodForCall", 0, 1, IS_UNIQUE, IS_ORDERED);
addEParameter(op, this.getMethod(), "otherMethod", 0, 1, IS_UNIQUE, IS_ORDERED);
addEParameter(op, theReferencesPackage.getMethodCall(), "methodCall", 0, 1, IS_UNIQUE, IS_ORDERED);
addEOperation(methodEClass, ecorePackage.getELong(), "getArrayDimension", 0, 1, IS_UNIQUE, IS_ORDERED);
initEClass(interfaceMethodEClass, InterfaceMethod.class, "InterfaceMethod", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
initEClass(classMethodEClass, ClassMethod.class, "ClassMethod", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
initEClass(enumConstantEClass, EnumConstant.class, "EnumConstant", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
initEReference(getEnumConstant_AnonymousClass(), theClassifiersPackage.getAnonymousClass(), null, "anonymousClass", null, 0, 1, EnumConstant.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
// Create resource
createResource(eNS_URI);
}