/* * Copyright 2003-2011 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package jetbrains.mps.newTypesystem.state.blocks; public enum RelationKind { WEAK("<=", ">=", "SubTyping", true, false, false), STRONG("<<=", ">>=", "SubTyping (strong)", false, false, false), WEAK_CHECK("<='", ">='", "Check-only subTyping", true, true, false), STRONG_CHECK("<<='", ">>='","Check-only subTyping (strong)", false, true, false), WEAK_COMPARABLE("~", "Comparable", true, false, true), STRONG_COMPARABLE("~~", "Comparable (strong)", false, false, true), WEAK_COMPARABLE_CHECK("~", "Comparable", true, true, true), STRONG_COMPARABLE_CHECK("~~", "Comparable (strong)", false, true, true), CHECK_EQUATION("=='", "Check-only equation", true, true, false); private String myRelationSign; private String myReversedRelationSign; private String myTitle; private boolean myWeak; private boolean myCheckOnly; private boolean myComparable; RelationKind(String relationSign, String title, boolean weak, boolean checkOnly, boolean comparable) { this(relationSign, relationSign, title, weak, checkOnly, comparable); } RelationKind(String relationSign, String reversedRelationSign, String title, boolean weak, boolean checkOnly, boolean comparable) { myRelationSign = relationSign; myReversedRelationSign = reversedRelationSign; myTitle = title; myWeak = weak; myCheckOnly = checkOnly; myComparable = comparable; } public String getRelationSign() { return myRelationSign; } public String getReversedRelationSign() { return myReversedRelationSign; } public String getTitle() { return myTitle; } public boolean isWeak() { return myWeak; } public boolean isCheckOnly() { return myCheckOnly; } public boolean isComparable() { return myComparable; } public static RelationKind fromFlags(boolean isWeak, boolean isCheckOnly, boolean isComparable) { if (isComparable) { if (isCheckOnly) { if (isWeak) { return WEAK_COMPARABLE_CHECK; } else { return STRONG_COMPARABLE_CHECK; } } else { if (isWeak) { return WEAK_COMPARABLE; } else { return STRONG_COMPARABLE; } } } else { if (isCheckOnly) { if (isWeak) { return WEAK_CHECK; } else { return STRONG_CHECK; } } else { if (isWeak) { return WEAK; } else { return STRONG; } } } } }