protected final synchronized GenerationContext openContext(EObject sarlObject, JvmDeclaredType type,
			final Iterable<Class<? extends XtendMember>> supportedMemberTypes) {
		assert type != null;
		assert supportedMemberTypes != null;
		this.sarlSignatureProvider.clear(type);
		final GenerationContext context = new GenerationContext(sarlObject, type) {
			@Override
			public boolean isSupportedMember(XtendMember member) {
				for (final Class<? extends XtendMember> supportedMemberType : supportedMemberTypes) {
					if (supportedMemberType.isInstance(member)) {
						return true;
					}
				}
				return false;
			}
		};
		this.contextInjector.injectMembers(context);
		this.bufferedContexes.push(context);
		return context;
	}
protected final synchronized GenerationContext openContext ( EObject sarlObject , JvmDeclaredType type , final Iterable < Class < ? extends XtendMember > > supportedMemberTypes ) { assert type != null ; assert supportedMemberTypes != null ; this . sarlSignatureProvider . clear ( type ) ; final GenerationContext context = new GenerationContext ( sarlObject , type ) { @ Override public boolean isSupportedMember ( XtendMember member ) { for ( final Class < ? extends XtendMember > supportedMemberType : supportedMemberTypes ) { if ( supportedMemberType . isInstance ( member ) ) { return true ; } } return false ; } } ; this . contextInjector . injectMembers ( context ) ; this . bufferedContexes . push ( context ) ; return context ; }
Open the context for the generation of a SARL-specific element.

@param sarlObject the SARL object that is the cause of the generation.
@param type the generated type.
@param supportedMemberTypes the types of the supported members.
@return the created context.