1f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project/* Copyright (C) 2003 Vladimir Roubtsov. All rights reserved.
2f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project *
3f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * This program and the accompanying materials are made available under
4f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * the terms of the Common Public License v1.0 which accompanies this distribution,
5f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * and is available at http://www.eclipse.org/legal/cpl-v10.html
6f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project *
7f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * $Id: CoverageData.java,v 1.1.1.1 2004/05/09 16:57:31 vlad_r Exp $
8f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project */
9f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectpackage com.vladium.emma.data;
10f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
11f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport java.io.DataInput;
12f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport java.io.DataOutput;
13f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport java.io.IOException;
14f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport java.util.HashMap;
15f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport java.util.Iterator;
16f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport java.util.Map;
17f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
18f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport com.vladium.util.asserts.$assert;
19f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
20f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project// ----------------------------------------------------------------------------
21f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project/**
22f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @author Vlad Roubtsov, (C) 2003
23f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project */
24f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectfinal class CoverageData implements ICoverageData, Cloneable
25f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project{
26f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    // public: ................................................................
27f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
28f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    // TODO: duplicate issue
29f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
30f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    public Object lock ()
31f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
32f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        return m_coverageMap;
33f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
34f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
35f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    public ICoverageData shallowCopy ()
36f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
37f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        final CoverageData _clone;
38f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        try
39f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        {
40f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            _clone = (CoverageData) super.clone ();
41f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        }
42f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        catch (CloneNotSupportedException cnse)
43f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        {
44f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            throw new Error (cnse.toString ());
45f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        }
46f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
47f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        final HashMap _coverageMap;
48f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
49f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        synchronized (lock ())
50f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        {
51f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            _coverageMap = (HashMap) m_coverageMap.clone ();
52f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        }
53f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
54f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        _clone.m_coverageMap = _coverageMap;
55f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
56f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        return _clone;
57f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
58f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
59f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    public int size ()
60f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
61f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        return m_coverageMap.size ();
62f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
63f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
64f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    public DataHolder getCoverage (final ClassDescriptor cls)
65f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
66f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        if (cls == null) throw new IllegalArgumentException ("null input: cls");
67f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
68f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        return (DataHolder) m_coverageMap.get (cls.getClassVMName ());
69f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
70f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
71f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    public void addClass (final boolean [][] coverage, final String classVMName, final long stamp)
72f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
73f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        m_coverageMap.put (classVMName, new DataHolder (coverage, stamp));
74f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
75f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
76f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    // IMergeable:
77f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
78f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    public boolean isEmpty ()
79f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
80f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        return m_coverageMap.isEmpty ();
81f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
82f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
83f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    /*
84f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project     * This method is not MT-safe wrt addClass() etc.
85f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project     *
86f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project     * note: rhs entries override current entries if they have different stamps;
87f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project     * otherwise, the data is merged
88f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project     */
89f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    public IMergeable merge (final IMergeable rhs)
90f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
91f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        if ((rhs == null) || rhs.isEmpty () || (rhs == this))
92f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            return this;
93f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        else
94f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        {
95f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            final CoverageData rhscdata = (CoverageData) rhs; // TODO: redesign so that the cast is not necessary
96f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            final Map rhscoverageData = rhscdata.m_coverageMap;
97f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
98f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            for (Iterator entries = rhscoverageData.entrySet ().iterator (); entries.hasNext (); )
99f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            {
100f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                final Map.Entry entry = (Map.Entry) entries.next ();
101f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                final String classVMName = (String) entry.getKey ();
102f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
103f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                final DataHolder rhsdata = (DataHolder) entry.getValue ();
104f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                // [assertion: rhsdata != null]
105f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
106f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                final DataHolder data = (DataHolder) m_coverageMap.get (classVMName);
107f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
108f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                if (data == null)
109f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                    m_coverageMap.put (classVMName, rhsdata);
110f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                else
111f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                {
112f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                    if (rhsdata.m_stamp != data.m_stamp)
113f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                        m_coverageMap.put (classVMName, rhsdata);
114f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                    else // merge two runtime profiles
115f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                    {
116f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                        final boolean [][] rhscoverage = rhsdata.m_coverage;
117f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                        final boolean [][] coverage = data.m_coverage;
118f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
119f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                        // [assertion: both coverage and rhscoverage aren't null]
120f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
121f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                        if ($assert.ENABLED) $assert.ASSERT (coverage.length == rhscoverage.length, "coverage.length [" + coverage.length + "] != rhscoverage.length [" + rhscoverage.length + "]");
122f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                        for (int m = 0, mLimit = coverage.length; m < mLimit; ++ m)
123f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                        {
124f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                            final boolean [] rhsmcoverage = rhscoverage [m];
125f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                            final boolean [] mcoverage = coverage [m];
126f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
127f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                            if (mcoverage == null)
128f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                            {
129f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                                if ($assert.ENABLED) $assert.ASSERT (rhsmcoverage == null, "mcoverage == null but rhsmcoverage != null");
130f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
131f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                                // [nothing to merge]
132f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                            }
133f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                            else
134f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                            {
135f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                                if ($assert.ENABLED) $assert.ASSERT (rhsmcoverage != null, "mcoverage != null but rhsmcoverage == null");
136f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                                if ($assert.ENABLED) $assert.ASSERT (mcoverage.length == rhsmcoverage.length, "mcoverage.length [" + mcoverage.length + "] != rhsmcoverage.length [" + rhsmcoverage.length + "]");
137f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
138f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                                for (int b = 0, bLimit = mcoverage.length; b < bLimit; ++ b)
139f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                                {
140f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                                    if (rhsmcoverage [b]) mcoverage [b] = true;
141f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                                }
142f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                            }
143f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                        }
144f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                    }
145f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                }
146f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            }
147f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
148f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            return this;
149f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        }
150f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
151f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
152f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    // protected: .............................................................
153f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
154f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    // package: ...............................................................
155f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
156f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
157f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    CoverageData ()
158f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
159f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        m_coverageMap = new HashMap ();
160f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
161f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
162f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
163f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    static CoverageData readExternal (final DataInput in)
164f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        throws IOException
165f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
166f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        final int size = in.readInt ();
167f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        final HashMap coverageMap = new HashMap (size);
168f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
169f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        for (int i = 0; i < size; ++ i)
170f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        {
171f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            final String classVMName = in.readUTF ();
172f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            final long stamp = in.readLong ();
173f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
174f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            final int length = in.readInt ();
175f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            final boolean [][] coverage = new boolean [length][];
176f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            for (int c = 0; c < length; ++ c)
177f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            {
178f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                coverage [c] = DataFactory.readBooleanArray (in);
179f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            }
180f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
181f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            coverageMap.put (classVMName, new DataHolder (coverage, stamp));
182f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        }
183f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
184f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        return new CoverageData (coverageMap);
185f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
186f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
187f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    static void writeExternal (final CoverageData cdata, final DataOutput out)
188f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        throws IOException
189f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
190f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        final Map coverageMap = cdata.m_coverageMap;
191f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
192f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        final int size = coverageMap.size ();
193f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        out.writeInt (size);
194f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
195f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        final Iterator entries = coverageMap.entrySet ().iterator ();
196f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        for (int i = 0; i < size; ++ i)
197f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        {
198f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            final Map.Entry entry = (Map.Entry) entries.next ();
199f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
200f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            final String classVMName = (String) entry.getKey ();
201f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            final DataHolder data = (DataHolder) entry.getValue ();
202f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
203f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            final boolean [][] coverage = data.m_coverage;
204f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
205f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            out.writeUTF (classVMName);
206f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            out.writeLong (data.m_stamp);
207f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
208f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            final int length = coverage.length;
209f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            out.writeInt (length);
210f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            for (int c = 0; c < length; ++ c)
211f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            {
212f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                DataFactory.writeBooleanArray (coverage [c], out);
213f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            }
214f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        }
215f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
216f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
217f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    // private: ...............................................................
218f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
219f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
220f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    private CoverageData (final HashMap coverageMap)
221f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
222f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        if ($assert.ENABLED) $assert.ASSERT (coverageMap != null, "coverageMap is null");
223f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        m_coverageMap = coverageMap;
224f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
225f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
226f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
227f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    private /*final*/ HashMap /* String(classVMName) -> DataHolder */ m_coverageMap; // never null
228f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
229f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project} // end of class
230f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project// ----------------------------------------------------------------------------