Merge branch 'releases/Release_2_11_1_Branch' into bug/JAL-3509hideResnum
[jalview.git] / src / jalview / viewmodel / seqfeatures / FeatureRendererModel.java
index 8efe9ac..b348766 100644 (file)
  */
 package jalview.viewmodel.seqfeatures;
 
+import java.awt.Color;
+import java.beans.PropertyChangeListener;
+import java.beans.PropertyChangeSupport;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+
 import jalview.api.AlignViewportI;
 import jalview.api.FeatureColourI;
 import jalview.api.FeaturesDisplayedI;
@@ -38,20 +52,6 @@ import jalview.renderer.seqfeatures.FeatureRenderer;
 import jalview.schemes.FeatureColour;
 import jalview.util.ColorUtils;
 
-import java.awt.Color;
-import java.beans.PropertyChangeListener;
-import java.beans.PropertyChangeSupport;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-
 public abstract class FeatureRendererModel
         implements jalview.api.FeatureRenderer
 {
@@ -1168,8 +1168,8 @@ public abstract class FeatureRendererModel
   }
 
   @Override
-  public MappedFeatures findComplementFeaturesAtResidue(SequenceI sequence,
-          int pos)
+  public MappedFeatures findComplementFeaturesAtResidue(
+          final SequenceI sequence, final int pos)
   {
     SequenceI ds = sequence.getDatasetSequence();
     if (ds == null)
@@ -1214,7 +1214,7 @@ public abstract class FeatureRendererModel
         int toRes = match.getEnd();
         mapFrom = match.getSequence();
         List<SequenceFeature> fs = findFeaturesAtResidue(
-                match.getSequence(), fromRes, toRes);
+                mapFrom, fromRes, toRes);
         for (SequenceFeature sf : fs)
         {
           if (!found.contains(sf))
@@ -1238,9 +1238,12 @@ public abstract class FeatureRendererModel
     }
 
     /*
-     * sort by renderorder, inefficiently
+     * sort by renderorder (inefficiently but ok for small scale);
+     * NB this sorts 'on top' feature to end, for rendering
      */
     List<SequenceFeature> result = new ArrayList<>();
+    final int toAdd = found.size();
+    int added = 0;
     for (String type : renderOrder)
     {
       for (SequenceFeature sf : found)
@@ -1248,11 +1251,11 @@ public abstract class FeatureRendererModel
         if (type.equals(sf.getType()))
         {
           result.add(sf);
-          if (result.size() == found.size())
-          {
-            return new MappedFeatures(mapping, mapFrom, pos, residue,
-                    result);
-          }
+          added++;
+        }
+        if (added == toAdd)
+        {
+          break;
         }
       }
     }