}
for (Constraint next : pattern.getConstraints()) {
if (next instanceof Declaration) {
continue;
}
Constraint constraint = (Constraint) next;
Declaration[] decl = constraint.getRequiredDeclarations();
for (int i = 0; i < decl.length; i++) {
Declaration resolved = resolver.getDeclaration(null,
decl[i].getIdentifier());
if (constraint instanceof MvelConstraint && ((MvelConstraint) constraint).isUnification()) {
if (ClassObjectType.DroolsQuery_ObjectType.isAssignableFrom(resolved.getPattern().getObjectType())) {
Declaration redeclaredDeclr = new Declaration(resolved.getIdentifier(), ((MvelConstraint) constraint).getFieldExtractor(), pattern, false);
pattern.addDeclaration(redeclaredDeclr);
} else if ( resolved.getPattern() != pattern ) {
((MvelConstraint) constraint).unsetUnification();
}
}
if (resolved != null && resolved != decl[i] && resolved.getPattern() != pattern) {
constraint.replaceDeclaration(decl[i],
resolved);
} else if (resolved == null) {
// it is probably an implicit declaration, so find the corresponding pattern
Pattern old = decl[i].getPattern();
Pattern current = resolver.findPatternByIndex(old.getIndex());
if (current != null && old != current) {
resolved = new Declaration(decl[i].getIdentifier(),
decl[i].getExtractor(),
current);
constraint.replaceDeclaration(decl[i],
resolved);
}
}
}
}