blob: 69c4e45902d7488c8946afe598400677ea091682 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004-2008 Akos Horvath, Gergely Varro and Daniel Varro
* 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:
* Akos Horvath, Gergely Varro - initial API and implementation
*******************************************************************************/
package org.eclipse.viatra2.gtasm.patternmatcher.impl.patternmatcher.internal.operation;
import org.eclipse.viatra2.gtasm.interpreter.exception.ViatraTransformationException;
import org.eclipse.viatra2.gtasm.interpreter.executionEnvironment.IExecutionEnvironment;
import org.eclipse.viatra2.gtasm.interpreter.term.rules.TermEvaluator;
import org.eclipse.viatra2.gtasm.patternmatcher.exceptions.PatternMatcherRuntimeException;
import org.eclipse.viatra2.gtasm.patternmatcher.impl.patternmatcher.internal.MatchingFrame;
import org.eclipse.viatra2.gtasm.patternmatcher.impl.patternmatcher.internal.PatternMatcherErrorStrings;
import org.eclipse.viatra2.gtasm.patternmatcher.impl.patternmatcher.term.AbstractTermCheckOperation;
import org.eclipse.viatra2.gtasm.patternmatcher.impl.patternmatcher.term.TermCheckExecutionEnvironment;
import org.eclipse.viatra2.gtasmmodel.gtasm.metamodel.asm.core.AnnotatedElement;
import org.eclipse.viatra2.gtasmmodel.gtasm.metamodel.asm.terms.Term;
import org.eclipse.viatra2.gtasmmodel.gtasm.metamodel.gt.GTPattern;
public class TermCheckOperation extends AbstractTermCheckOperation {
private IExecutionEnvironment parentEnv;
private GTPattern pattern;
private int uid;
private Term term;
public TermCheckOperation(IExecutionEnvironment parentEnv,
GTPattern pattern, int uid, Term term) {
this.parentEnv = parentEnv;
this.pattern = pattern;
this.uid = uid;
this.term = term;
}
public boolean check(MatchingFrame frame) throws PatternMatcherRuntimeException{
TermCheckExecutionEnvironment env = new TermCheckExecutionEnvironment(parentEnv, pattern, uid, frame);
Boolean result = false;
try {
result = (Boolean) TermEvaluator.getInstance().evaluate(env, term);
} catch (ViatraTransformationException e) {
throw new PatternMatcherRuntimeException(e,term);
} catch (ClassCastException e) {
String[] context = {pattern.getName()};
throw new PatternMatcherRuntimeException(
PatternMatcherErrorStrings.CHECK_EXPRESSION_NOT_EVALUATED_TO_A_BOOLEAN
,context
,term);
}
return result;
}
public AnnotatedElement getErrorfulElement(MatchingFrame frame) {
return term;
}
}