Skip to content

Commit

Permalink
Fixed incorrect detection of duplicate IDs in attribute parameters
Browse files Browse the repository at this point in the history
  • Loading branch information
a-sr authored and lhstrh committed Jan 24, 2024
1 parent b9e4795 commit 2665f11
Showing 1 changed file with 34 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -1,7 +1,13 @@
package org.lflang.validation;

import java.util.Map;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.xtext.naming.QualifiedName;
import org.eclipse.xtext.resource.IEObjectDescription;
import org.eclipse.xtext.validation.NamesAreUniqueValidationHelper;
import org.eclipse.xtext.validation.ValidationMessageAcceptor;
import org.lflang.lf.AttrParm;
import org.lflang.lf.Attribute;
import org.lflang.lf.LfPackage;

public class LFNamesAreUniqueValidationHelper extends NamesAreUniqueValidationHelper {
Expand All @@ -22,4 +28,32 @@ public EClass getAssociatedClusterType(EClass eClass) {
}
return super.getAssociatedClusterType(eClass);
}

/** {@inheritDoc} */
@Override
@SuppressWarnings("deprecation")
protected void checkDescriptionForDuplicatedName(
IEObjectDescription description,
Map<EClass, Map<QualifiedName, IEObjectDescription>> clusterTypeToName,
ValidationMessageAcceptor acceptor) {
// Special handling for value id in AttrParm
if (description.getEClass() == LfPackage.eINSTANCE.getAttrParm()) {
var param = (AttrParm) description.getEObjectOrProxy();
var clusterType = getAssociatedClusterType(param.eClass());
if (param.eContainer() instanceof Attribute attribute) {
// Only check for duplicates in the same attribute
for (int i = 0; i < attribute.getAttrParms().indexOf(param); i++) {
var prev = attribute.getAttrParms().get(i);
if (param.getName() == null
? param.getName() == prev.getName()
: param.getName().equals(prev.getName())) {
createDuplicateNameError(description, clusterType, acceptor);
return;
}
}
}
} else {
super.checkDescriptionForDuplicatedName(description, clusterTypeToName, acceptor);
}
}
}

0 comments on commit 2665f11

Please sign in to comment.