From: Hannu Niemistö Date: Fri, 16 Sep 2016 14:28:01 +0000 (+0300) Subject: Small improvements to statement collision reporting. X-Git-Tag: v1.25.0~109^2 X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=commitdiff_plain;h=248798f4fad0a235508902877cffd1b4298921f7 Small improvements to statement collision reporting. Change-Id: I18469fcc69d11f1fcd652ad7f8ffd52496064d30 --- diff --git a/bundles/org.simantics.graph.compiler/src/org/simantics/graph/compiler/internal/validation/ReportCollisions.java b/bundles/org.simantics.graph.compiler/src/org/simantics/graph/compiler/internal/validation/ReportCollisions.java index 28a53381e..277ddc7b1 100644 --- a/bundles/org.simantics.graph.compiler/src/org/simantics/graph/compiler/internal/validation/ReportCollisions.java +++ b/bundles/org.simantics.graph.compiler/src/org/simantics/graph/compiler/internal/validation/ReportCollisions.java @@ -5,6 +5,7 @@ import java.util.Collection; import org.simantics.graph.compiler.GraphCompilerPreferences; import org.simantics.graph.compiler.internal.store.LocationStore; import org.simantics.graph.compiler.internal.templates.TemplateDefinitionStore; +import org.simantics.graph.query.Res; import org.simantics.graph.store.GraphStore; import org.simantics.graph.store.StatementCollision; import org.simantics.ltk.Problem; @@ -22,6 +23,13 @@ public class ReportCollisions implements Runnable { this.store = store; } + private static String abbreviateURI(Res res) { + if(res == null) + return "null"; + String uri = res.toString(); + return uri.replace("http://www.simantics.org/", ""); + } + @Override public void run() { LocationStore locations = store.getStore(LocationStore.class); @@ -41,9 +49,10 @@ public class ReportCollisions implements Runnable { for(StatementCollision collision : store.statements.getCollisions()) { problems.add(new Problem( locations.getLocation(collision.subject), - "The same statement is defined twice: " + - store.idToRes(collision.predicate) + ", " + - store.idToRes(collision.object))); + "The same statement is defined " + collision.count + " times: " + + abbreviateURI(store.idToRes(collision.subject)) + ", " + + abbreviateURI(store.idToRes(collision.predicate)) + ", " + + abbreviateURI(store.idToRes(collision.object)))); } } diff --git a/bundles/org.simantics.graph/src/org/simantics/graph/store/StatementCollision.java b/bundles/org.simantics.graph/src/org/simantics/graph/store/StatementCollision.java index 8c24b882d..3bcd4f0bf 100644 --- a/bundles/org.simantics.graph/src/org/simantics/graph/store/StatementCollision.java +++ b/bundles/org.simantics.graph/src/org/simantics/graph/store/StatementCollision.java @@ -4,11 +4,13 @@ public class StatementCollision { public final int subject; public final int predicate; public final int object; + public final int count; - public StatementCollision(int subject, int predicate, int object) { + public StatementCollision(int subject, int predicate, int object, int count) { this.subject = subject; this.predicate = predicate; this.object = object; + this.count = count; } } diff --git a/bundles/org.simantics.graph/src/org/simantics/graph/store/StatementStore.java b/bundles/org.simantics.graph/src/org/simantics/graph/store/StatementStore.java index cc82975c8..02dfddde8 100644 --- a/bundles/org.simantics.graph/src/org/simantics/graph/store/StatementStore.java +++ b/bundles/org.simantics.graph/src/org/simantics/graph/store/StatementStore.java @@ -319,13 +319,23 @@ public class StatementStore implements IStore { public boolean execute(int predicate, TIntArrayList objects) { if(objects.size() > 1) { objects.sort(); - int oldObject = objects.get(0); + int oldObject = objects.get(0); + int collisionCount = 1; for(int i=1;i 1) { + collisions.add(new StatementCollision(subject, predicate, oldObject, collisionCount)); + collisionCount = 1; + } + oldObject = curObject; + } } + if(collisionCount > 1) + collisions.add(new StatementCollision(subject, predicate, oldObject, collisionCount)); } return true; }