/******************************************************************************* * Copyright (c) 2012, 2014 Willink Transformations and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * E.D.Willink - initial API and implementation *******************************************************************************/ package org.eclipse.ocl.pivot.internal.ids; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.ocl.pivot.ids.BindingsId; import org.eclipse.ocl.pivot.ids.SpecializedId; import org.eclipse.ocl.pivot.ids.TemplateableId; public abstract class AbstractSpecializedIdImpl<T extends TemplateableId> extends AbstractTemplateableIdImpl<T> implements SpecializedId { protected final @NonNull T generalizedId; protected final @NonNull BindingsId templateBindings; public AbstractSpecializedIdImpl(@NonNull T generalizedId, @NonNull BindingsId templateBindings) { super(generalizedId.hashCode() + templateBindings.hashCode(), generalizedId.getTemplateParameters()); this.generalizedId = generalizedId; this.templateBindings = templateBindings; int generalizedTemplateParameters = generalizedId.getTemplateParameters(); int templateParameterCount = generalizedTemplateParameters; assert templateParameterCount > 0; assert templateBindings.size() == templateParameterCount; } @Override public @NonNull String getDisplayName() { StringBuilder s = new StringBuilder(); s.append(generalizedId.getDisplayName()); s.append("<"); for (int i = 0; i < templateParameters; i++) { if (i > 0) { s.append(","); } s.append("$" + i + ":"); s.append(templateBindings.get(i)); } s.append(">"); return s.toString(); } @Override public @NonNull T getGeneralizedId() { return generalizedId; } @Override public @NonNull String getMetaTypeName() { return generalizedId.getMetaTypeName(); } @Override public @NonNull String getName() { return generalizedId.getName(); } @Override public @NonNull BindingsId getTemplateBindings() { return templateBindings; } }