package org.eclipse.dltk.tcl.internal.core.search.mixin; import java.util.HashMap; import java.util.Map; import org.eclipse.dltk.core.DLTKLanguageManager; import org.eclipse.dltk.core.IScriptProject; import org.eclipse.dltk.core.ISourceModule; import org.eclipse.dltk.core.mixin.IMixinElement; import org.eclipse.dltk.core.mixin.MixinModel; import org.eclipse.dltk.core.mixin.MixinModel.IMixinObjectInitializeListener; import org.eclipse.dltk.tcl.core.TclNature; import org.eclipse.dltk.tcl.internal.core.search.mixin.model.ITclMixinElement; public class TclMixinModel { public static final String NAMESPACE_PRERIX = "@"; public static final String PACKAGE_PRERIX = "&"; private static TclMixinModel instance; private final Map<IScriptProject, MixinModel> instances = new HashMap<IScriptProject, MixinModel>(); public static synchronized TclMixinModel getInstance() { if (instance == null) { instance = new TclMixinModel(); } return instance; } private TclMixinModel() { } private void bindObjectInitialization(MixinModel model) { model.addObjectInitializeListener(new IMixinObjectInitializeListener() { public void initialize(IMixinElement element, Object object, ISourceModule module) { if (object != null && object instanceof ITclMixinElement) { ((ITclMixinElement) object).initialize(element, module, TclMixinModel.this); } } }); } public MixinModel getMixin(IScriptProject project) { // Assert.isNotNull(project); synchronized (instances) { MixinModel mixinModel = instances.get(project); if (mixinModel == null) { mixinModel = new MixinModel(DLTKLanguageManager .getLanguageToolkit(TclNature.NATURE_ID), project); instances.put(project, mixinModel); bindObjectInitialization(mixinModel); } return mixinModel; } } }