package jetbrains.mps.lang.smodel.query.typesystem; /*Generated by MPS */ import jetbrains.mps.lang.typesystem.runtime.AbstractNonTypesystemRule_Runtime; import jetbrains.mps.lang.typesystem.runtime.NonTypesystemRule_Runtime; import org.jetbrains.mps.openapi.model.SNode; import jetbrains.mps.typesystem.inference.TypeCheckingContext; import jetbrains.mps.lang.typesystem.runtime.IsApplicableStatus; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SLinkOperations; import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory; import org.jetbrains.mps.openapi.language.SConcept; import jetbrains.mps.internal.collections.runtime.Sequence; import jetbrains.mps.internal.collections.runtime.ISelector; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations; import jetbrains.mps.internal.collections.runtime.ISequence; import jetbrains.mps.internal.collections.runtime.IWhereFilter; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SConceptOperations; import jetbrains.mps.errors.messageTargets.MessageTarget; import jetbrains.mps.errors.messageTargets.NodeMessageTarget; import jetbrains.mps.errors.IErrorReporter; import org.jetbrains.mps.openapi.language.SAbstractConcept; public class check_QueryDuplicatedParameters_NonTypesystemRule extends AbstractNonTypesystemRule_Runtime implements NonTypesystemRule_Runtime { public check_QueryDuplicatedParameters_NonTypesystemRule() { } public void applyRule(final SNode queryParameterList, final TypeCheckingContext typeCheckingContext, IsApplicableStatus status) { final Iterable<SNode> parameters = SLinkOperations.getChildren(queryParameterList, MetaAdapterFactory.getContainmentLink(0x1a8554c4eb8443baL, 0x8c346f0d90c6e75aL, 0x3bc644217616ddf9L, 0x3bc6442176a262a6L, "parameter")); Iterable<SConcept> parameterConcepts = Sequence.fromIterable(parameters).select(new ISelector<SNode, SConcept>() { public SConcept select(SNode it) { return SNodeOperations.getConcept(it); } }).distinct(); Iterable<? extends Iterable<SNode>> groupedByConcepts = Sequence.fromIterable(parameterConcepts).select(new ISelector<SConcept, ISequence<SNode>>() { public ISequence<SNode> select(final SConcept c) { return Sequence.fromIterable(parameters).where(new IWhereFilter<SNode>() { public boolean accept(SNode p) { return SConceptOperations.isExactly(SNodeOperations.asSConcept(SNodeOperations.getConcept(p)), SNodeOperations.asSConcept(c)); } }); } }); for (Iterable<SNode> group : Sequence.fromIterable(groupedByConcepts)) { if (Sequence.fromIterable(group).count() > 1) { for (SNode other : Sequence.fromIterable(group).tail(Sequence.fromIterable(group).count() - 1)) { { MessageTarget errorTarget = new NodeMessageTarget(); IErrorReporter _reporter_2309309498 = typeCheckingContext.reportTypeError(other, "Duplicated parameter: " + SConceptOperations.conceptAlias(SNodeOperations.getConcept(Sequence.fromIterable(group).first())), "r:7e8cfa8a-da13-467d-9878-63b90b943128(jetbrains.mps.lang.smodel.query.typesystem)", "2284201910212797905", null, errorTarget); } } } } } public SAbstractConcept getApplicableConcept() { return MetaAdapterFactory.getConcept(0x1a8554c4eb8443baL, 0x8c346f0d90c6e75aL, 0x3bc644217616ddf9L, "jetbrains.mps.lang.smodel.query.structure.QueryParameterList"); } public IsApplicableStatus isApplicableAndPattern(SNode argument) { return new IsApplicableStatus(argument.getConcept().isSubConceptOf(getApplicableConcept()), null); } public boolean overrides() { return false; } }