From 6ccc179ea305fc27ae121253b1d1f172bad676fd Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Tue, 13 Dec 2022 03:21:58 +0100 Subject: refactor(store): simplify return types Prefers sealed non-generic interfaces over wildcard types to avoid confusion about method return types, especially in collections (see SonarQube rule java:S1452). --- .../query/viatra/ViatraQueryableModelStore.java | 28 ++++++++++++---------- .../query/viatra/internal/RelationalScope.java | 7 +++--- .../viatra/internal/ViatraQueryableModel.java | 8 ++++--- .../internal/context/RelationalRuntimeContext.java | 28 +++++++++++----------- .../query/viatra/internal/pquery/DNF2PQuery.java | 15 ++++++++---- .../internal/pquery/RelationViewWrapper.java | 6 ++--- .../internal/viewupdate/ModelUpdateListener.java | 21 +++++++++------- .../internal/viewupdate/ViewUpdateTranslator.java | 5 ++-- 8 files changed, 67 insertions(+), 51 deletions(-) (limited to 'subprojects/store-query-viatra/src') diff --git a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/ViatraQueryableModelStore.java b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/ViatraQueryableModelStore.java index 37cd91a6..94d2db4f 100644 --- a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/ViatraQueryableModelStore.java +++ b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/ViatraQueryableModelStore.java @@ -5,13 +5,17 @@ import tools.refinery.store.model.ModelDiffCursor; import tools.refinery.store.model.ModelStore; import tools.refinery.store.model.ModelStoreImpl; import tools.refinery.store.model.RelationLike; +import tools.refinery.store.model.representation.AnyDataRepresentation; import tools.refinery.store.model.representation.DataRepresentation; -import tools.refinery.store.query.*; +import tools.refinery.store.query.DNF; +import tools.refinery.store.query.DNFAnd; +import tools.refinery.store.query.QueryableModel; +import tools.refinery.store.query.QueryableModelStore; import tools.refinery.store.query.atom.*; import tools.refinery.store.query.viatra.internal.RawPatternMatcher; import tools.refinery.store.query.viatra.internal.ViatraQueryableModel; import tools.refinery.store.query.viatra.internal.pquery.DNF2PQuery; -import tools.refinery.store.query.view.RelationView; +import tools.refinery.store.query.view.AnyRelationView; import java.util.Collections; import java.util.HashMap; @@ -21,11 +25,11 @@ import java.util.Set; public class ViatraQueryableModelStore implements QueryableModelStore { protected final ModelStore store; - protected final Set> relationViews; + protected final Set relationViews; protected final Map> predicates; - public ViatraQueryableModelStore(ModelStore store, Set> relationViews, + public ViatraQueryableModelStore(ModelStore store, Set relationViews, Set predicates) { this.store = store; validateViews(store.getDataRepresentations(), relationViews); @@ -34,13 +38,13 @@ public class ViatraQueryableModelStore implements QueryableModelStore { this.predicates = initPredicates(predicates); } - public ViatraQueryableModelStore(Set> dataRepresentations, - Set> relationViews, Set predicates) { + public ViatraQueryableModelStore(Set dataRepresentations, + Set relationViews, Set predicates) { this(new ModelStoreImpl(dataRepresentations), relationViews, predicates); } - private void validateViews(Set> dataRepresentations, Set> relationViews) { - for (RelationView relationView : relationViews) { + private void validateViews(Set dataRepresentations, Set relationViews) { + for (var relationView : relationViews) { if (!dataRepresentations.contains(relationView.getRepresentation())) { throw new IllegalArgumentException("%s %s added to %s without a referred representation.".formatted( DataRepresentation.class.getSimpleName(), relationView.getName(), @@ -49,7 +53,7 @@ public class ViatraQueryableModelStore implements QueryableModelStore { } } - private void validatePredicates(Set> relationViews, Set predicates) { + private void validatePredicates(Set relationViews, Set predicates) { for (DNF dnfPredicate : predicates) { for (DNFAnd clause : dnfPredicate.getClauses()) { for (DNFAtom atom : clause.constraints()) { @@ -65,7 +69,7 @@ public class ViatraQueryableModelStore implements QueryableModelStore { } } - private void validateRelationAtom(Set> relationViews, DNF dnfPredicate, + private void validateRelationAtom(Set relationViews, DNF dnfPredicate, RelationViewAtom relationViewAtom) { if (!relationViews.contains(relationViewAtom.getTarget())) { throw new IllegalArgumentException( @@ -100,12 +104,12 @@ public class ViatraQueryableModelStore implements QueryableModelStore { } @Override - public Set> getDataRepresentations() { + public Set getDataRepresentations() { return store.getDataRepresentations(); } @Override - public Set> getViews() { + public Set getViews() { return this.relationViews; } diff --git a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/RelationalScope.java b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/RelationalScope.java index 5ddad67d..133c4c72 100644 --- a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/RelationalScope.java +++ b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/RelationalScope.java @@ -6,19 +6,20 @@ import org.eclipse.viatra.query.runtime.api.scope.IEngineContext; import org.eclipse.viatra.query.runtime.api.scope.IIndexingErrorListener; import org.eclipse.viatra.query.runtime.api.scope.QueryScope; import tools.refinery.store.model.Model; -import tools.refinery.store.tuple.Tuple; import tools.refinery.store.model.representation.Relation; import tools.refinery.store.query.viatra.internal.context.RelationalEngineContext; import tools.refinery.store.query.viatra.internal.viewupdate.ModelUpdateListener; -import tools.refinery.store.query.view.RelationView; +import tools.refinery.store.query.view.AnyRelationView; +import tools.refinery.store.tuple.Tuple; import java.util.Set; public class RelationalScope extends QueryScope { private final Model model; + private final ModelUpdateListener updateListener; - public RelationalScope(Model model, Set> relationViews) { + public RelationalScope(Model model, Set relationViews) { this.model = model; this.updateListener = new ModelUpdateListener(relationViews); } diff --git a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/ViatraQueryableModel.java b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/ViatraQueryableModel.java index cd9fb180..5b06e266 100644 --- a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/ViatraQueryableModel.java +++ b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/ViatraQueryableModel.java @@ -8,6 +8,7 @@ import tools.refinery.store.map.Cursor; import tools.refinery.store.map.DiffCursor; import tools.refinery.store.model.Model; import tools.refinery.store.model.ModelDiffCursor; +import tools.refinery.store.model.representation.AnyDataRepresentation; import tools.refinery.store.model.representation.DataRepresentation; import tools.refinery.store.model.representation.Relation; import tools.refinery.store.query.QueryableModel; @@ -66,7 +67,7 @@ public class ViatraQueryableModel implements QueryableModel { } @Override - public Set> getDataRepresentations() { + public Set getDataRepresentations() { return model.getDataRepresentations(); } @@ -113,7 +114,7 @@ public class ViatraQueryableModel implements QueryableModel { } @Override - public long getSize(DataRepresentation representation) { + public long getSize(AnyDataRepresentation representation) { return model.getSize(representation); } @@ -207,7 +208,8 @@ public class ViatraQueryableModel implements QueryableModel { private void restoreWithDiffReplay(long state) { var modelDiffCursor = getDiffCursor(state); - for (DataRepresentation dataRepresentation : this.getDataRepresentations()) { + for (AnyDataRepresentation anyDataRepresentation : this.getDataRepresentations()) { + var dataRepresentation = (DataRepresentation) anyDataRepresentation; restoreRepresentationWithDiffReplay(modelDiffCursor, dataRepresentation); } } diff --git a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/context/RelationalRuntimeContext.java b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/context/RelationalRuntimeContext.java index c007d630..e01525e0 100644 --- a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/context/RelationalRuntimeContext.java +++ b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/context/RelationalRuntimeContext.java @@ -9,6 +9,7 @@ import org.eclipse.viatra.query.runtime.matchers.util.Accuracy; import tools.refinery.store.model.Model; import tools.refinery.store.query.viatra.internal.pquery.RelationViewWrapper; import tools.refinery.store.query.viatra.internal.viewupdate.ModelUpdateListener; +import tools.refinery.store.query.view.AnyRelationView; import tools.refinery.store.query.view.RelationView; import java.lang.reflect.InvocationTargetException; @@ -53,7 +54,7 @@ public class RelationalRuntimeContext implements IQueryRuntimeContext { @Override public boolean isIndexed(IInputKey key, IndexingService service) { if (key instanceof RelationView relationalKey) { - return this.modelUpdateListener.containsRelationalView(relationalKey); + return this.modelUpdateListener.containsRelationView(relationalKey); } else { return false; } @@ -66,11 +67,10 @@ public class RelationalRuntimeContext implements IQueryRuntimeContext { } } - @SuppressWarnings("squid:S1452") - RelationView checkKey(IInputKey key) { + AnyRelationView checkKey(IInputKey key) { if (key instanceof RelationViewWrapper wrappedKey) { var relationViewKey = wrappedKey.getWrappedKey(); - if (modelUpdateListener.containsRelationalView(relationViewKey)) { + if (modelUpdateListener.containsRelationView(relationViewKey)) { return relationViewKey; } else { throw new IllegalStateException("Query is asking for non-indexed key"); @@ -82,8 +82,8 @@ public class RelationalRuntimeContext implements IQueryRuntimeContext { @Override public int countTuples(IInputKey key, TupleMask seedMask, ITuple seed) { - RelationView relationalViewKey = checkKey(key); - Iterable allObjects = relationalViewKey.getAll(model); + var relationViewKey = checkKey(key); + Iterable allObjects = relationViewKey.getAll(model); Iterable filteredBySeed = filter(allObjects, objectArray -> isMatching(objectArray, seedMask, seed)); Iterator iterator = filteredBySeed.iterator(); int result = 0; @@ -101,8 +101,8 @@ public class RelationalRuntimeContext implements IQueryRuntimeContext { @Override public Iterable enumerateTuples(IInputKey key, TupleMask seedMask, ITuple seed) { - RelationView relationalViewKey = checkKey(key); - Iterable allObjects = relationalViewKey.getAll(model); + var relationViewKey = checkKey(key); + Iterable allObjects = relationViewKey.getAll(model); Iterable filteredBySeed = filter(allObjects, objectArray -> isMatching(objectArray, seedMask, seed)); return map(filteredBySeed, Tuples::flatTupleOf); } @@ -125,21 +125,21 @@ public class RelationalRuntimeContext implements IQueryRuntimeContext { @Override public boolean containsTuple(IInputKey key, ITuple seed) { - RelationView relationalViewKey = checkKey(key); - return relationalViewKey.get(model, seed.getElements()); + var relationViewKey = checkKey(key); + return relationViewKey.get(model, seed.getElements()); } @Override public void addUpdateListener(IInputKey key, Tuple seed, IQueryRuntimeContextListener listener) { - RelationView relationalKey = checkKey(key); - this.modelUpdateListener.addListener(key, relationalKey, seed, listener); + var relationViewKey = (RelationView) checkKey(key); + this.modelUpdateListener.addListener(key, relationViewKey, seed, listener); } @Override public void removeUpdateListener(IInputKey key, Tuple seed, IQueryRuntimeContextListener listener) { - RelationView relationalKey = checkKey(key); - this.modelUpdateListener.removeListener(key, relationalKey, seed, listener); + var relationViewKey = checkKey(key); + this.modelUpdateListener.removeListener(key, relationViewKey, seed, listener); } @Override diff --git a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/pquery/DNF2PQuery.java b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/pquery/DNF2PQuery.java index 98054161..aa3fba6e 100644 --- a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/pquery/DNF2PQuery.java +++ b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/pquery/DNF2PQuery.java @@ -2,7 +2,10 @@ package tools.refinery.store.query.viatra.internal.pquery; import org.eclipse.viatra.query.runtime.matchers.psystem.PBody; import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable; -import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.*; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Equality; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Inequality; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.NegativePatternCall; import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.BinaryTransitiveClosure; import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.ConstantValue; import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.PositivePatternCall; @@ -10,9 +13,11 @@ import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeCo import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter; import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple; import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples; -import tools.refinery.store.query.*; +import tools.refinery.store.query.DNF; +import tools.refinery.store.query.DNFAnd; +import tools.refinery.store.query.Variable; import tools.refinery.store.query.atom.*; -import tools.refinery.store.query.view.RelationView; +import tools.refinery.store.query.view.AnyRelationView; import java.util.*; import java.util.stream.Collectors; @@ -22,7 +27,7 @@ public class DNF2PQuery { private final Map dnf2PQueryMap = new HashMap<>(); - private final Map, RelationViewWrapper> view2WrapperMap = new HashMap<>(); + private final Map view2WrapperMap = new HashMap<>(); public SimplePQuery translate(DNF dnfQuery) { if (translating.contains(dnfQuery)) { @@ -115,7 +120,7 @@ public class DNF2PQuery { return Tuples.flatTupleOf(variables); } - private RelationViewWrapper wrapView(RelationView relationView) { + private RelationViewWrapper wrapView(AnyRelationView relationView) { return view2WrapperMap.computeIfAbsent(relationView, RelationViewWrapper::new); } diff --git a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/pquery/RelationViewWrapper.java b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/pquery/RelationViewWrapper.java index 2a4148dc..e48648bf 100644 --- a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/pquery/RelationViewWrapper.java +++ b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/pquery/RelationViewWrapper.java @@ -1,10 +1,10 @@ package tools.refinery.store.query.viatra.internal.pquery; import org.eclipse.viatra.query.runtime.matchers.context.common.BaseInputKeyWrapper; -import tools.refinery.store.query.view.RelationView; +import tools.refinery.store.query.view.AnyRelationView; -public class RelationViewWrapper extends BaseInputKeyWrapper> { - public RelationViewWrapper(RelationView wrappedKey) { +public class RelationViewWrapper extends BaseInputKeyWrapper { + public RelationViewWrapper(AnyRelationView wrappedKey) { super(wrappedKey); } diff --git a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/viewupdate/ModelUpdateListener.java b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/viewupdate/ModelUpdateListener.java index 1a2fcee7..6a1d06a9 100644 --- a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/viewupdate/ModelUpdateListener.java +++ b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/viewupdate/ModelUpdateListener.java @@ -3,6 +3,8 @@ package tools.refinery.store.query.viatra.internal.viewupdate; import org.eclipse.viatra.query.runtime.matchers.context.IInputKey; import org.eclipse.viatra.query.runtime.matchers.context.IQueryRuntimeContextListener; import org.eclipse.viatra.query.runtime.matchers.tuple.ITuple; +import tools.refinery.store.model.representation.AnyRelation; +import tools.refinery.store.query.view.AnyRelationView; import tools.refinery.store.tuple.Tuple; import tools.refinery.store.model.representation.Relation; import tools.refinery.store.query.view.RelationView; @@ -16,24 +18,24 @@ public class ModelUpdateListener { /** * Collections of Relations and their Views. */ - private final Map, Set>> relation2View; + private final Map> relation2View; /** * Collection of Views and their buffers. */ - private final Map, Set>> view2Buffers; + private final Map>> view2Buffers; - public ModelUpdateListener(Set> relationViews) { + public ModelUpdateListener(Set relationViews) { this.relation2View = new HashMap<>(); this.view2Buffers = new HashMap<>(); - for (RelationView relationView : relationViews) { + for (var relationView : relationViews) { registerView(relationView); } } - private void registerView(RelationView view) { - Relation relation = view.getRepresentation(); + private void registerView(AnyRelationView view) { + AnyRelation relation = view.getRepresentation(); // 1. register views to relations, if necessary var views = relation2View.computeIfAbsent(relation, x -> new HashSet<>()); @@ -43,7 +45,7 @@ public class ModelUpdateListener { view2Buffers.computeIfAbsent(view, x -> new HashSet<>()); } - public boolean containsRelationalView(RelationView relationalKey) { + public boolean containsRelationView(AnyRelationView relationalKey) { return view2Buffers.containsKey(relationalKey); } @@ -58,7 +60,7 @@ public class ModelUpdateListener { } } - public void removeListener(IInputKey key, RelationView relationView, ITuple seed, + public void removeListener(IInputKey key, AnyRelationView relationView, ITuple seed, IQueryRuntimeContextListener listener) { if (view2Buffers.containsKey(relationView)) { Set> buffers = this.view2Buffers.get(relationView); @@ -92,8 +94,9 @@ public class ModelUpdateListener { public boolean hasChanges() { for (var bufferCollection : this.view2Buffers.values()) { for (ViewUpdateBuffer buffer : bufferCollection) { - if (buffer.hasChanges()) + if (buffer.hasChanges()) { return true; + } } } return false; diff --git a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/viewupdate/ViewUpdateTranslator.java b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/viewupdate/ViewUpdateTranslator.java index 74d0b366..c324c84a 100644 --- a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/viewupdate/ViewUpdateTranslator.java +++ b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/viewupdate/ViewUpdateTranslator.java @@ -4,8 +4,9 @@ import org.eclipse.viatra.query.runtime.matchers.context.IInputKey; import org.eclipse.viatra.query.runtime.matchers.context.IQueryRuntimeContextListener; import org.eclipse.viatra.query.runtime.matchers.tuple.ITuple; import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples; -import tools.refinery.store.tuple.Tuple; +import tools.refinery.store.query.view.AnyRelationView; import tools.refinery.store.query.view.RelationView; +import tools.refinery.store.tuple.Tuple; import java.util.Objects; @@ -27,7 +28,7 @@ public class ViewUpdateTranslator { this.listener = listener; } - public boolean equals(IInputKey wrappedKey, RelationView relationView, ITuple seed, + public boolean equals(IInputKey wrappedKey, AnyRelationView relationView, ITuple seed, IQueryRuntimeContextListener listener) { return this.wrappedKey == wrappedKey && key == relationView && filter.equals(seed) && this.listener == listener; } -- cgit v1.2.3-54-g00ecf