JAL-2647 more iterators
[jalview.git] / src / jalview / analysis / Dna.java
index a10b037..c3408bd 100644 (file)
@@ -56,19 +56,19 @@ public class Dna
    * 'final' variables describe the inputs to the translation, which should not
    * be modified.
    */
-  final private List<SequenceI> selection;
+  private final List<SequenceI> selection;
 
-  final private String[] seqstring;
+  private final String[] seqstring;
 
-  final private int[] contigs;
+  private final List<int[]> contigs;
 
-  final private char gapChar;
+  private final char gapChar;
 
-  final private AlignmentAnnotation[] annotations;
+  private final AlignmentAnnotation[] annotations;
 
-  final private int dnaWidth;
+  private final int dnaWidth;
 
-  final private AlignmentI dataset;
+  private final AlignmentI dataset;
 
   /*
    * Working variables for the translation.
@@ -91,7 +91,7 @@ public class Dna
    * @param viewport
    * @param visibleContigs
    */
-  public Dna(AlignViewportI viewport, int[] visibleContigs)
+  public Dna(AlignViewportI viewport, List<int[]> visibleContigs)
   {
     this.selection = Arrays.asList(viewport.getSequenceSelection());
     this.seqstring = viewport.getViewAsString(true);
@@ -161,7 +161,7 @@ public class Dna
 
     int s;
     int sSize = selection.size();
-    List<SequenceI> pepseqs = new ArrayList<SequenceI>();
+    List<SequenceI> pepseqs = new ArrayList<>();
     for (s = 0; s < sSize; s++)
     {
       SequenceI newseq = translateCodingRegion(selection.get(s),
@@ -213,7 +213,7 @@ public class Dna
       if (dnarefs != null)
       {
         // intersect with pep
-        List<DBRefEntry> mappedrefs = new ArrayList<DBRefEntry>();
+        List<DBRefEntry> mappedrefs = new ArrayList<>();
         DBRefEntry[] refs = dna.getDBRefs();
         for (int d = 0; d < refs.length; d++)
         {
@@ -391,26 +391,30 @@ public class Dna
           String seqstring, AlignedCodonFrame acf,
           List<SequenceI> proteinSeqs)
   {
-    List<int[]> skip = new ArrayList<int[]>();
+    List<int[]> skip = new ArrayList<>();
     int skipint[] = null;
     ShiftList vismapping = new ShiftList(); // map from viscontigs to seqstring
     // intervals
-    int vc;
-    int[] scontigs = new int[contigs.length];
+    int vc = 0;
+    int[] scontigs = new int[contigs.size() * 2];
     int npos = 0;
-    for (vc = 0; vc < contigs.length; vc += 2)
+    int[] lastregion = null;
+    for (int[] region : contigs)
     {
-      if (vc == 0)
+      if (lastregion == null)
       {
-        vismapping.addShift(npos, contigs[vc]);
+        vismapping.addShift(npos, region[0]);
       }
       else
       {
         // hidden region
-        vismapping.addShift(npos, contigs[vc] - contigs[vc - 1] + 1);
+        vismapping.addShift(npos, region[0] - lastregion[1] + 1);
       }
-      scontigs[vc] = contigs[vc];
-      scontigs[vc + 1] = contigs[vc + 1];
+      lastregion = region;
+
+      scontigs[vc] = region[0];
+      scontigs[vc + 1] = region[1];
+      vc++;
     }
 
     // allocate a roughly sized buffer for the protein sequence
@@ -800,7 +804,7 @@ public class Dna
   public AlignmentI reverseCdna(boolean complement)
   {
     int sSize = selection.size();
-    List<SequenceI> reversed = new ArrayList<SequenceI>();
+    List<SequenceI> reversed = new ArrayList<>();
     for (int s = 0; s < sSize; s++)
     {
       SequenceI newseq = reverseSequence(selection.get(s).getName(),