aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/language/src/main/java/tools/refinery/language/utils/ProblemUtil.java
diff options
context:
space:
mode:
Diffstat (limited to 'subprojects/language/src/main/java/tools/refinery/language/utils/ProblemUtil.java')
-rw-r--r--subprojects/language/src/main/java/tools/refinery/language/utils/ProblemUtil.java25
1 files changed, 15 insertions, 10 deletions
diff --git a/subprojects/language/src/main/java/tools/refinery/language/utils/ProblemUtil.java b/subprojects/language/src/main/java/tools/refinery/language/utils/ProblemUtil.java
index f70893e0..9daa8f61 100644
--- a/subprojects/language/src/main/java/tools/refinery/language/utils/ProblemUtil.java
+++ b/subprojects/language/src/main/java/tools/refinery/language/utils/ProblemUtil.java
@@ -1,5 +1,5 @@
1/* 1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> 2 * SPDX-FileCopyrightText: 2021-2024 The Refinery Authors <https://refinery.tools/>
3 * 3 *
4 * SPDX-License-Identifier: EPL-2.0 4 * SPDX-License-Identifier: EPL-2.0
5 */ 5 */
@@ -81,6 +81,9 @@ public final class ProblemUtil {
81 } 81 }
82 82
83 public static boolean hasMultiplicityConstraint(ReferenceDeclaration referenceDeclaration) { 83 public static boolean hasMultiplicityConstraint(ReferenceDeclaration referenceDeclaration) {
84 if (referenceDeclaration.getReferenceType() instanceof DatatypeDeclaration) {
85 return false;
86 }
84 var opposite = referenceDeclaration.getOpposite(); 87 var opposite = referenceDeclaration.getOpposite();
85 if (opposite != null && opposite.getKind() == ReferenceKind.CONTAINMENT) { 88 if (opposite != null && opposite.getKind() == ReferenceKind.CONTAINMENT) {
86 return false; 89 return false;
@@ -95,17 +98,19 @@ public final class ProblemUtil {
95 return true; 98 return true;
96 } 99 }
97 100
98 public static int getArity(Relation relation) { 101 public static boolean isTypeLike(Relation relation) {
99 if (relation instanceof ClassDeclaration || relation instanceof EnumDeclaration) { 102 if (relation instanceof ClassDeclaration || relation instanceof EnumDeclaration ||
100 return 1; 103 relation instanceof DatatypeDeclaration) {
101 } 104 return true;
102 if (relation instanceof ReferenceDeclaration) {
103 return 2;
104 } 105 }
105 if (relation instanceof PredicateDefinition predicateDefinition) { 106 if (relation instanceof PredicateDefinition predicateDefinition) {
106 return predicateDefinition.getParameters().size(); 107 return predicateDefinition.getParameters().size() == 1;
107 } 108 }
108 throw new IllegalArgumentException("Unknown Relation: " + relation); 109 return false;
110 }
111
112 public static boolean isContainmentReference(ReferenceDeclaration referenceDeclaration) {
113 return referenceDeclaration.getKind() == ReferenceKind.CONTAINMENT;
109 } 114 }
110 115
111 public static boolean isContainerReference(ReferenceDeclaration referenceDeclaration) { 116 public static boolean isContainerReference(ReferenceDeclaration referenceDeclaration) {
@@ -116,7 +121,7 @@ public final class ProblemUtil {
116 return switch (kind) { 121 return switch (kind) {
117 case CONTAINMENT -> false; 122 case CONTAINMENT -> false;
118 case CONTAINER -> true; 123 case CONTAINER -> true;
119 case REFERENCE -> { 124 case DEFAULT, REFERENCE -> {
120 var opposite = referenceDeclaration.getOpposite(); 125 var opposite = referenceDeclaration.getOpposite();
121 if (opposite == null) { 126 if (opposite == null) {
122 yield false; 127 yield false;