custom.fika is not where the shared migrator framework is defined, but it is an important example package for the 17.0 migration story. It shows how a catalogue package with older custom Part key history can opt in to the new PartSpecialMigrator load flow by exposing a snapper-level partSpecialMigrator prop and returning a package-specific migrator.
In Fika's case, FikaDsPartSpecialMigrator extends DsPartSpecialMigrator and overrides oldPartSpecialsKey(Part part) so older Fika drawings can still find part and option specials that were stored under pre-17.0 key formats.
FikaDsPartSpecialMigratorFikaDsPartSpecialMigrator is the package-specific migrator used by Fika snappers.
Added: public class FikaDsPartSpecialMigrator extends DsPartSpecialMigrator Added: public str oldPartSpecialsKey(Part part)
oldPartSpecialsKey(Part part) handles multiple historical key formats:
creatorKey()super(..)partSpecialMigratorFika snappers now opt in to migration by exposing a PartSpecialMigrator "partSpecialMigrator" prop/default.
Added/important usage: PartSpecialMigrator "partSpecialMigrator" { Object default(..) { return FikaDsPartSpecialMigrator(); } }
If your package has older custom key history, this is the pattern to copy: provide the prop on the snapper family and return the right subclass for that package.
Fika's migration support depends on the shared cm.core.Snapper discovery path:
Snapper.loaded1() calls initPartSpecialMigrator(formatter)getPartSpecialMigrator(init=true) resolves the snapper's partSpecialMigrator propFikaDsPartSpecialMigrator is marked pending for older drawingsSnapper.migratePartSpecials(parts) invokes the actual migrationIf the snapper does not expose the partSpecialMigrator prop, older Fika part or option specials saved under historical keys will not be migrated just because FikaDsPartSpecialMigrator exists in the package.