func getChangedFieldsFromSchemaDiff()

in tools/diff-processor/detector/detector.go [56:92]


func getChangedFieldsFromSchemaDiff(schemaDiff diff.SchemaDiff) map[string]ResourceChanges {
	changedFields := make(map[string]ResourceChanges)
	for resource, resourceDiff := range schemaDiff {
		resourceChanges := make(ResourceChanges)
		for field, fieldDiff := range resourceDiff.Fields {
			if field == "project" {
				// Skip the project field.
				continue
			}
			if strings.Contains(resource, "iam") && field == "condition" {
				// Skip the condition field of iam resources because some iam resources do not support it.
				continue
			}
			if fieldDiff.New == nil {
				// Skip deleted fields.
				continue
			}
			if fieldDiff.New.Computed && !fieldDiff.New.Optional {
				// Skip output-only fields.
				continue
			}
			if _, ok := fieldDiff.New.Elem.(*schema.Resource); ok {
				// Skip parent fields.
				continue
			}
			if fieldDiff.Old == nil {
				resourceChanges[field] = &Field{Added: true}
			} else {
				resourceChanges[field] = &Field{Changed: true}
			}
		}
		if len(resourceChanges) > 0 {
			changedFields[resource] = resourceChanges
		}
	}
	return changedFields
}