docs: final ImmutableSet<Property> propertySet(
        TypeElement type,
        ImmutableSet<ExecutableElement> propertyMethods,
        ImmutableListMultimap<ExecutableElement, AnnotationMirror> annotatedPropertyFields,
        ImmutableListMultimap<ExecutableElement, AnnotationMirror> annotatedPropertyMethods) {
      ImmutableBiMap<ExecutableElement, String> methodToPropertyName =
          propertyNameToMethodMap(propertyMethods).inverse();
      Map<ExecutableElement, String> methodToIdentifier = new LinkedHashMap<>(methodToPropertyName);
      fixReservedIdentifiers(methodToIdentifier);
      EclipseHack eclipseHack = new EclipseHack(processingEnv);
      DeclaredType declaredType = MoreTypes.asDeclared(type.asType());
      ImmutableMap<ExecutableElement, TypeMirror> returnTypes =
          eclipseHack.methodReturnTypes(propertyMethods, declaredType);
  
      ImmutableSet.Builder<Property> props = ImmutableSet.builder();
      for (ExecutableElement propertyMethod : propertyMethods) {
        TypeMirror returnType = returnTypes.get(propertyMethod);
        String propertyType =
            TypeEncoder.encodeWithAnnotations(returnType, getExcludedAnnotationTypes(propertyMethod));
        String propertyName = methodToPropertyName.get(propertyMethod);
        String identifier = methodToIdentifier.get(propertyMethod);
        ImmutableList<String> fieldAnnotations =
            annotationStrings(annotatedPropertyFields.get(propertyMethod));
        ImmutableList<AnnotationMirror> methodAnnotationMirrors =
            annotatedPropertyMethods.get(propertyMethod);
        ImmutableList<String> methodAnnotations = annotationStrings(methodAnnotationMirrors);
        Optional<String> nullableAnnotation = nullableAnnotationForMethod(propertyMethod);
        Property p =
            new Property(
                propertyName,
                identifier,
                propertyMethod,
                propertyType,
                fieldAnnotations,
                methodAnnotations,
                nullableAnnotation);
        props.add(p);
        if (p.isNullable() && returnType.getKind().isPrimitive()) {
          errorReporter().reportError("Primitive types cannot be @Nullable", propertyMethod);
        }
      }
      return props.build();
    }