diff options
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.java | 25 |
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; |