in mapper/src/main/java/jetbrains/jetpad/mapper/Mapper.java [157:211]
final void attach(MappingContext ctx) {
if (myMappingContext != null) {
throw new IllegalStateException("Mapper is already attached");
}
if (myState != State.NOT_ATTACHED) {
throw new IllegalStateException("Mapper can't be reused because it was already detached");
}
try {
onBeforeAttach(ctx);
} catch (Throwable t) {
ThrowableHandlers.handle(t);
}
myState = State.ATTACHING_SYNCHRONIZERS;
myMappingContext = ctx;
instantiateSynchronizers();
myMappingContext.register(this);
for (Object part : myParts) {
if (part instanceof Synchronizer) {
Synchronizer s = (Synchronizer) part;
s.attach(new SynchronizerContext() {
@Override
public MappingContext getMappingContext() {
return myMappingContext;
}
@Override
public Mapper<?, ?> getMapper() {
return Mapper.this;
}
});
}
}
myState = State.ATTACHING_CHILDREN;
for (Object part : myParts) {
if (part instanceof ChildContainer) {
for (Mapper<?, ?> m : (ChildContainer<?>) part) {
m.attach(ctx);
}
}
}
myState = State.ATTACHED;
try {
onAttach(ctx);
} catch (Throwable t) {
ThrowableHandlers.handle(t);
}
}