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: AbstractReportGenerator.java,v 1.1.1.1.2.4 2005/04/24 23:51:37 vlad_r Exp $
8f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project */
9f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectpackage com.vladium.emma.report;
10f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
11f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport java.util.Iterator;
12f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport java.util.Set;
13f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport java.util.TreeSet;
14f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
15f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport com.vladium.logging.Logger;
16f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport com.vladium.util.Descriptors;
17f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport com.vladium.util.IProperties;
18f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport com.vladium.util.IntIntMap;
19f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport com.vladium.util.IntVector;
20f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport com.vladium.util.ObjectIntMap;
21f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport com.vladium.emma.EMMARuntimeException;
22f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport com.vladium.emma.data.ClassDescriptor;
23f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport com.vladium.emma.data.ICoverageData;
24f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport com.vladium.emma.data.IMetaData;
25f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
26f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project// ----------------------------------------------------------------------------
27f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project/**
28f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @author Vlad Roubtsov, (C) 2003
29f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project */
30f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectpublic
31f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectabstract class AbstractReportGenerator extends AbstractItemVisitor
32f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                                       implements IReportGenerator
33f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project{
34f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    // public: ................................................................
35f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
36f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
37f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    public static IReportGenerator create (final String type)
38f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
39f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        if ((type == null) || (type.length () == 0))
40f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            throw new IllegalArgumentException ("null/empty input: type");
41f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
42f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        // TODO: proper pluggability pattern here
43f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
44f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        if ("html".equals (type))
45f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            return new com.vladium.emma.report.html.ReportGenerator ();
460b5519af3cd5ac3a90a29d110fea49345e8e286bTim Baverstock        else if ("lcov".equals (type))
47536663200dc497eb27df655d205bfa32f057340bTim Baverstock            return new com.vladium.emma.report.lcov.ReportGenerator ();
48f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        else if ("txt".equals (type))
49f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            return new com.vladium.emma.report.txt.ReportGenerator ();
50f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        else if ("xml".equals (type))
51f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            return new com.vladium.emma.report.xml.ReportGenerator ();
52f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        else // TODO: error code
53f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            throw new EMMARuntimeException ("no report generator class found for type [" + type + "]");
54f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
55f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
56f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
57f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    public void initialize (final IMetaData mdata, final ICoverageData cdata,
58f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                            final SourcePathCache cache, final IProperties properties)
59f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        throws EMMARuntimeException
60f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
61f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        m_log = Logger.getLogger ();
62f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        m_verbose = m_log.atVERBOSE ();
63f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
64f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        m_settings = ReportProperties.parseProperties (properties, getType ());
65f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
66f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        m_cache = cache;
67f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
68f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        m_hasSrcFileInfo = mdata.hasSrcFileData ();
69f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        m_hasLineNumberInfo = mdata.hasLineNumberData ();
70f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
71f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        boolean debugInfoWarning = false;
72f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        boolean bailOut = false;
73f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
74f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        // src view is not possible if 'm_hasSrcFileInfo' is false:
75f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        if (! mdata.hasSrcFileData () && (m_settings.getViewType () == IReportDataView.HIER_SRC_VIEW))
76f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        {
77f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            debugInfoWarning = true;
78f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
79f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            m_log.warning ("not all instrumented classes were compiled with source file");
80f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            m_log.warning ("debug data: no sources will be embedded in the report.");
81f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
82f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            m_settings.setViewType (IReportDataView.HIER_CLS_VIEW);
83f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        }
84f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
85f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        // line coverage column must be removed if 'm_hasLineNumberInfo' is false:
86f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        if (! m_hasLineNumberInfo)
87f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        {
88f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            final int [] userColumnIDs = m_settings.getColumnOrder ();
89f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            final IntVector columnIDs = new IntVector ();
90f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
91f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            boolean removed = false;
92f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            for (int c = 0; c < userColumnIDs.length; ++ c)
93f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            {
94f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                if (userColumnIDs [c] == IItemAttribute.ATTRIBUTE_LINE_COVERAGE_ID)
95f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                    removed = true;
96f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                else
97f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                    columnIDs.add (userColumnIDs [c]);
98f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            }
99f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
100f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            // at this point it is possible that there are no columns left: bail out
101f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            if (removed)
102f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            {
103f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                debugInfoWarning = true;
104f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
105f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                if (columnIDs.size () == 0)
106f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                {
107f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                    m_log.warning ("line coverage requested in a report of type [" + getType () + "] but");
108f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                    m_log.warning ("not all instrumented classes were compiled with line number");
109f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                    m_log.warning ("debug data: since this was the only requested column, no report will be generated.");
110f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
111f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                    bailOut = true;
112f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                }
113f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                else
114f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                {
115f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                    m_log.warning ("line coverage requested in a report of type [" + getType () + "] but");
116f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                    m_log.warning ("not all instrumented classes were compiled with line number");
117f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                    m_log.warning ("debug data: this column will be removed from the report.");
118f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
119f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                    m_settings.setColumnOrder (columnIDs.values ());
120f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
121f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                    final int [] userSort = m_settings.getSortOrder ();
122f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                    final IntVector sort = new IntVector ();
123f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
124f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                    for (int c = 0; c < userSort.length; c += 2)
125f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                    {
126f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                        if (Math.abs (userSort [c]) != IItemAttribute.ATTRIBUTE_LINE_COVERAGE_ID)
127f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                        {
128f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                            sort.add (userSort [c]);
129f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                            sort.add (userSort [c + 1]);
130f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                        }
131f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                    }
132f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
133f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                    m_settings.setSortOrder (sort.values ());
134f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                }
135f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            }
136f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        }
137f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        // note: no need to adjust m_metrics due to possible column removal above
138f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
139f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        // SF FR 971176: provide user with sample classes that caused the above warnings
140f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        if (debugInfoWarning && m_log.atINFO ())
141f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        {
142f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            final Set /* String */ sampleClassNames = new TreeSet ();
143f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            final ObjectIntMap /* packageVMName:String -> count:int */ countMap = new ObjectIntMap ();
144f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            final int [] _count = new int [1];
145f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
146f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            for (Iterator /* ClassDescriptor */ descriptors = mdata.iterator (); descriptors.hasNext (); )
147f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            {
148f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                final ClassDescriptor cls = (ClassDescriptor) descriptors.next ();
149f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
150f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                // SF BUG 979717: this check was incorrectly absent in the initial FR impl:
151f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                if (! cls.hasCompleteLineNumberInfo () || ! cls.hasSrcFileInfo ())
152f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                {
153f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                    final String packageVMName = cls.getPackageVMName ();
154f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                    final int count = countMap.get (packageVMName, _count)
155f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                        ? _count [0]
156f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                        : 0;
157f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
158f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                    if (count < MAX_DEBUG_INFO_WARNING_COUNT)
159f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                    {
160f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                        sampleClassNames.add (Descriptors.vmNameToJavaName (cls.getClassVMName ()));
161f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                        countMap.put (packageVMName, count + 1);
162f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                    }
163f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                }
164f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            }
165f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
166f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            m_log.info ("showing up to " + MAX_DEBUG_INFO_WARNING_COUNT + " classes without full debug info per package:");
167f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            for (Iterator /* String */ names = sampleClassNames.iterator (); names.hasNext (); )
168f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            {
169f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                m_log.info ("  " + names.next ());
170f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            }
171f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        }
172f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
173f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        if (bailOut)
174f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        {
175f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            // TODO: error code
176f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            throw new EMMARuntimeException ("BAILED OUT");
177f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        }
178f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
179f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        final IItemMetadata [] allTypes = IItemMetadata.Factory.getAllTypes ();
180f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        m_typeSortComparators = new ItemComparator [allTypes.length];
181f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
182f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        for (int t = 0; t < allTypes.length; ++ t)
183f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        {
184f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            final IntVector orderedAttrIDsWithDir = new IntVector ();
185f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            final long typeAttrIDSet = allTypes [t].getAttributeIDs ();
186f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
187f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            for (int s = 0; s < m_settings.getSortOrder ().length; s += 2)
188f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            {
189f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                final int attrID = m_settings.getSortOrder () [s];
190f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
191f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                if ((typeAttrIDSet & (1 << attrID)) != 0)
192f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                {
193f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                    orderedAttrIDsWithDir.add (attrID);
194f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
195f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                    final int dir = m_settings.getSortOrder () [s + 1];
196f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                    orderedAttrIDsWithDir.add (dir);
197f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                }
198f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            }
199f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
200f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            m_typeSortComparators [t] = ItemComparator.Factory.create (orderedAttrIDsWithDir.values (), m_settings.getUnitsType ());
201f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        }
202f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
203f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        m_metrics = new int [allTypes.length];
204f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        final IntIntMap metrics = m_settings.getMetrics ();
205f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        for (int t = 0; t < m_metrics.length; ++ t)
206f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        {
207f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            m_metrics [t] = -1;
208f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            metrics.get (t, m_metrics, t);
209f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        }
210f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
211f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        final IReportDataModel model = IReportDataModel.Factory.create (mdata, cdata);
212f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        m_view = model.getView (m_settings.getViewType ());
213f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
214f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        m_srcView = (m_settings.getViewType () == IReportDataView.HIER_SRC_VIEW);
215f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
216f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
217f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    public void cleanup ()
218f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
219f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        reset ();
220f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
221f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
222f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    // protected: .............................................................
223f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
224f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
225f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    protected void reset ()
226f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
227f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        m_settings = null;
228f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        m_cache = null;
229f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        m_view = null;
230f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        m_srcView = false;
231f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
232f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        //m_typeSortIDs = null;
233f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        m_typeSortComparators = null;
234f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        m_metrics = null;
235f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
236f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        m_log = null;
237f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
238f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
239f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
240f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    protected ReportProperties.ParsedProperties m_settings;
241f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    protected SourcePathCache m_cache;
242f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    protected IReportDataView m_view;
243f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    protected boolean m_srcView;
244f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
245f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    protected boolean m_hasSrcFileInfo, m_hasLineNumberInfo;
246f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    protected ItemComparator [] m_typeSortComparators; // m_typeSortComparators [t] is a comparator representing the sort order for item type t
247f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    protected int [] m_metrics; // -1 means no pass/fail check for this attribute
248f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
249f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    protected Logger m_log; // every report generator is used on a single thread but the logger needs to be run()-scoped
250f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    protected boolean m_verbose;
251f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
252f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    // package: ...............................................................
253f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
254f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    // private: ...............................................................
255f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
256f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
257f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    private static final int MAX_DEBUG_INFO_WARNING_COUNT = 3; // per package
258f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
259f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project} // end of class
260536663200dc497eb27df655d205bfa32f057340bTim Baverstock// ----------------------------------------------------------------------------
261