ProducedType qualifyingType = Metamodel.getModel(container);
Metamodel.checkQualifyingType(qualifyingType, declaration);
Metamodel.checkTypeArguments(qualifyingType, declaration, producedTypes);
// find the proper qualifying type
ProducedType memberQualifyingType = qualifyingType.getSupertype((TypeDeclaration) declaration.getContainer());
ProducedReference producedReference = declaration.getProducedReference(memberQualifyingType, producedTypes);
final ProducedType appliedType = producedReference.getType();
return (Member<Container, Kind>) Metamodel.getAppliedMetamodel(appliedType);
}