public VariableReferenceCount(Set<Variable> variables, boolean parameter) { this.variables = variables; this.parameter = parameter; for (ReferenceType type : ReferenceType.values()) { counters.put(type, 0); } for (Variable variable : variables) { if (variable instanceof ParameterRef && ((ParameterRef) variable).getReferredParam().getType() != null) { counters.put(ReferenceType.POSITIVE, 1); } } }
/** * @param var * @return */ private static ParameterRef initializeParameterRef(Variable var) { ParameterRef refVar = PatternLanguageFactory.eINSTANCE.createParameterRef(); refVar.setName(var.getName()); // refVar.setType(var.getType()); refVar.setReferredParam(var); return refVar; }
private void checkParameterUsageCounter(ParameterRef var, Map<Variable, VariableReferenceCount> individualCounters, Map<Set<Variable>, VariableReferenceCount> unifiedRefCounters, UnionFind<Variable> variableUnions, PatternBody body) { Variable parameter = var.getReferredParam(); VariableReferenceCount individualCounter = individualCounters.get(var); VariableReferenceCount unifiedCounter = unifiedRefCounters.get(variableUnions.getPartition(var)); if (individualCounter.getReferenceCount() == 0) { error(String.format("Parameter '%s' is never referenced in body '%s'.", parameter.getName(), getPatternBodyName(body)), parameter, PatternLanguagePackage.Literals.VARIABLE__NAME, IssueCodes.SYMBOLIC_VARIABLE_NEVER_REFERENCED); } else if (unifiedCounter.getReferenceCount(ReferenceType.POSITIVE) == 0) { error(String.format("Parameter '%s' has no positive reference in body '%s'.", var.getName(), getPatternBodyName(body)), parameter, PatternLanguagePackage.Literals.VARIABLE__NAME, IssueCodes.SYMBOLIC_VARIABLE_NO_POSITIVE_REFERENCE); } }
private String getVariableName(Variable variable, PatternModelAcceptor<?> acceptor) { if (variable instanceof ParameterRef) // handle referenced parameter variables return getVariableName(((ParameterRef) variable).getReferredParam(), acceptor); // assumed to be non-null else { return variable.getName(); } }
@Override public EClassifier getExplicitClassifierForPatternParameterVariable(Variable variable) { if (variable instanceof ParameterRef) { Variable referredParameter = ((ParameterRef) variable).getReferredParam(); return getClassifierForType(referredParameter.getType()); } else { return getClassifierForType(variable.getType()); } }