/** * Copyright (c) 2008 Borland Software Corp. * * 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: * Alexander Shatalin (Borland) - initial API and implementation */ package org.eclipse.gmf.internal.xpand.migration; import java.util.HashSet; import java.util.Set; import org.eclipse.gmf.internal.xpand.expression.ast.Identifier; public class OclKeywordManager { private static final Set<String> OCL_KEYWORDS = new HashSet<String>(); static { OCL_KEYWORDS.add("self"); OCL_KEYWORDS.add("if"); OCL_KEYWORDS.add("then"); OCL_KEYWORDS.add("else"); OCL_KEYWORDS.add("endif"); OCL_KEYWORDS.add("and"); OCL_KEYWORDS.add("or"); OCL_KEYWORDS.add("xor"); OCL_KEYWORDS.add("not"); OCL_KEYWORDS.add("implies"); OCL_KEYWORDS.add("let"); OCL_KEYWORDS.add("in"); OCL_KEYWORDS.add("true"); OCL_KEYWORDS.add("false"); OCL_KEYWORDS.add("init"); OCL_KEYWORDS.add("null"); OCL_KEYWORDS.add("Set"); OCL_KEYWORDS.add("Bag"); OCL_KEYWORDS.add("Sequence"); OCL_KEYWORDS.add("Collection"); OCL_KEYWORDS.add("OrderedSet"); OCL_KEYWORDS.add("iterate"); OCL_KEYWORDS.add("forAll"); OCL_KEYWORDS.add("exists"); OCL_KEYWORDS.add("isUnique"); OCL_KEYWORDS.add("any"); OCL_KEYWORDS.add("one"); OCL_KEYWORDS.add("collect"); OCL_KEYWORDS.add("select"); OCL_KEYWORDS.add("reject"); OCL_KEYWORDS.add("collectNested"); OCL_KEYWORDS.add("sortedBy"); OCL_KEYWORDS.add("closure"); OCL_KEYWORDS.add("oclIsKindOf"); OCL_KEYWORDS.add("oclIsTypeOf"); OCL_KEYWORDS.add("oclAsType"); OCL_KEYWORDS.add("oclIsNew"); OCL_KEYWORDS.add("oclIsUndefined"); OCL_KEYWORDS.add("oclIsInvalid"); OCL_KEYWORDS.add("oclIsInState"); OCL_KEYWORDS.add("allInstances"); OCL_KEYWORDS.add("String"); OCL_KEYWORDS.add("Integer"); OCL_KEYWORDS.add("UnlimitedNatural"); OCL_KEYWORDS.add("Real"); OCL_KEYWORDS.add("Boolean"); OCL_KEYWORDS.add("Tuple"); OCL_KEYWORDS.add("OclAny"); OCL_KEYWORDS.add("OclVoid"); OCL_KEYWORDS.add("Invalid"); OCL_KEYWORDS.add("OclMessage"); OCL_KEYWORDS.add("OclInvalid"); OCL_KEYWORDS.add("end"); OCL_KEYWORDS.add("while"); OCL_KEYWORDS.add("out"); OCL_KEYWORDS.add("object"); OCL_KEYWORDS.add("transformation"); OCL_KEYWORDS.add("import"); OCL_KEYWORDS.add("library"); OCL_KEYWORDS.add("metamodel"); OCL_KEYWORDS.add("mapping"); OCL_KEYWORDS.add("query"); OCL_KEYWORDS.add("helper"); OCL_KEYWORDS.add("inout"); OCL_KEYWORDS.add("when"); OCL_KEYWORDS.add("var"); OCL_KEYWORDS.add("configuration"); OCL_KEYWORDS.add("intermediate"); OCL_KEYWORDS.add("property"); OCL_KEYWORDS.add("class"); OCL_KEYWORDS.add("population"); OCL_KEYWORDS.add("map"); OCL_KEYWORDS.add("new"); OCL_KEYWORDS.add("xmap"); OCL_KEYWORDS.add("late"); OCL_KEYWORDS.add("log"); OCL_KEYWORDS.add("assert"); OCL_KEYWORDS.add("with"); OCL_KEYWORDS.add("resolve"); OCL_KEYWORDS.add("resolveone"); OCL_KEYWORDS.add("resolveIn"); OCL_KEYWORDS.add("resolveoneIn"); OCL_KEYWORDS.add("invresolve"); OCL_KEYWORDS.add("invresolveone"); OCL_KEYWORDS.add("invresolveIn"); OCL_KEYWORDS.add("invresolveoneIn"); OCL_KEYWORDS.add("modeltype"); OCL_KEYWORDS.add("uses"); OCL_KEYWORDS.add("where"); OCL_KEYWORDS.add("refines"); // was removed from QVT lexer? OCL_KEYWORDS.add("enforcing"); OCL_KEYWORDS.add("access"); OCL_KEYWORDS.add("extends"); OCL_KEYWORDS.add("blackbox"); OCL_KEYWORDS.add("abstract"); OCL_KEYWORDS.add("static"); OCL_KEYWORDS.add("result"); OCL_KEYWORDS.add("main"); OCL_KEYWORDS.add("this"); OCL_KEYWORDS.add("switch"); OCL_KEYWORDS.add("case"); OCL_KEYWORDS.add("xselect"); OCL_KEYWORDS.add("xcollect"); OCL_KEYWORDS.add("selectOne"); OCL_KEYWORDS.add("collectOne"); OCL_KEYWORDS.add("collectselect"); OCL_KEYWORDS.add("collectselectOne"); OCL_KEYWORDS.add("return"); OCL_KEYWORDS.add("rename"); OCL_KEYWORDS.add("disjuncts"); OCL_KEYWORDS.add("merges"); OCL_KEYWORDS.add("inherits"); OCL_KEYWORDS.add("forEach"); OCL_KEYWORDS.add("forOne"); OCL_KEYWORDS.add("compute"); OCL_KEYWORDS.add("Dict"); OCL_KEYWORDS.add("List"); OCL_KEYWORDS.add("break"); OCL_KEYWORDS.add("composes"); OCL_KEYWORDS.add("constructor"); OCL_KEYWORDS.add("continue"); OCL_KEYWORDS.add("datatype"); OCL_KEYWORDS.add("default"); OCL_KEYWORDS.add("derived"); OCL_KEYWORDS.add("do"); OCL_KEYWORDS.add("elif"); OCL_KEYWORDS.add("enum"); OCL_KEYWORDS.add("except"); OCL_KEYWORDS.add("exception"); OCL_KEYWORDS.add("from"); OCL_KEYWORDS.add("literal"); OCL_KEYWORDS.add("ordered"); OCL_KEYWORDS.add("primitive"); OCL_KEYWORDS.add("raise"); OCL_KEYWORDS.add("readonly"); OCL_KEYWORDS.add("references"); OCL_KEYWORDS.add("tag"); OCL_KEYWORDS.add("try"); OCL_KEYWORDS.add("typedef"); OCL_KEYWORDS.add("unlimited"); OCL_KEYWORDS.add("invalid"); } /** * @return true if passed identifier was recognized as OCL keyword and * should be escaped during migration */ public boolean isOclKeyword(Identifier identifier) { return isOclKeyword(identifier.getValue()); } public boolean isOclKeyword(String identifier) { return OCL_KEYWORDS.contains(identifier); } /** * @return original identifier value if passed identifier is not an OCL * keyword or escaped identifier value in case it should be escaped */ public String getValidIdentifierValue(Identifier identifier) { return getValidIdentifierValue(identifier.getValue()); } public String getValidIdentifierValue(String identifier) { if (!isOclKeyword(identifier)) { return identifier; } return OclCs.ESCAPE_PREFIX + identifier; } }