func()

in codegen/module.go [895:981]


func (system *ModuleSystem) readInstance(
	className string,
	packageRoot string,
	baseDirectory string,
	targetGenDir string,
	instanceDirectory string,
	classConfigDir string,
	defaultDependencies []ModuleDependency,
	options Options,
) (*ModuleInstance, error) {
	classConfigPath, yamlFileName, jsonFileName := getConfigFilePath(classConfigDir, className)

	raw, readErr := ioutil.ReadFile(classConfigPath)
	if readErr != nil {
		return nil, errors.Wrapf(
			readErr,
			"Error reading ClassConfig %q",
			classConfigPath,
		)
	}

	jsonRaw := []byte{}
	if jsonFileName != "" {
		jsonRaw = raw
	}

	config, configErr := NewClassConfig(raw)
	if configErr != nil {
		return nil, errors.Wrapf(
			configErr,
			"Error unmarshal ClassConfig %q",
			classConfigPath,
		)
	}

	dependencies := readDeps(config.Dependencies)
	dependencies = append(dependencies, defaultDependencies...)

	var classPlural string
	for _, moduleClass := range system.classes {
		if moduleClass.Name == className {
			classPlural = moduleClass.NamePlural
		}
	}
	instanceName := stripModuleClassName(classPlural, instanceDirectory)

	packageInfo, err := readPackageInfo(
		packageRoot,
		baseDirectory,
		targetGenDir,
		className,
		instanceDirectory,
		config,
		options,
	)

	if err != nil {
		// TODO: We should accumulate errors and list them all here
		// Expected $class-config.yaml to exist in ...
		return nil, errors.Wrapf(
			err,
			"Error reading class package info for %q %q",
			className,
			instanceName,
		)
	}

	return &ModuleInstance{
		PackageInfo:           packageInfo,
		ClassName:             className,
		ClassType:             config.Type,
		BaseDirectory:         baseDirectory,
		Directory:             instanceDirectory,
		InstanceName:          instanceName,
		Dependencies:          dependencies,
		ResolvedDependencies:  map[string][]*ModuleInstance{},
		RecursiveDependencies: map[string][]*ModuleInstance{},
		DependencyOrder:       []string{},
		JSONFileName:          jsonFileName,
		YAMLFileName:          yamlFileName,
		JSONFileRaw:           jsonRaw,
		YAMLFileRaw:           raw,
		Config:                config.Config,
		SelectiveBuilding:     config.SelectiveBuilding,
		CustomTemplates:       options.CustomTemplates,
	}, nil
}