public List<Field> getFieldsWithAnnotation( final Class<? extends Annotation>... scenarioStageClasses ) {
        List<Class<? extends Annotation>> annotationList = ImmutableList.copyOf( scenarioStageClasses );
        List<Field> fields = fieldMap.get( annotationList );
        if( fields == null ) {
            final List<Field> newFields = Lists.newArrayList();
            ReflectionUtil.forEachField( null, clazz,
                ReflectionUtil.hasAtLeastOneAnnotation( scenarioStageClasses ),
                new ReflectionUtil.FieldAction() {
                    @Override
                    public void act( Object object, Field field ) throws Exception {
                        field.setAccessible( true );
                        newFields.add( field );
                    }
                }
                );
            fieldMap.put( annotationList, newFields );
            return newFields;
        }
        return fields;
    }
Cache to avoid multiple expensive reflection-based look-ups
@since 0.7.1
jgiven-core/src/main/java/com/tngtech/jgiven/impl/util/FieldCache.java