EMMA Coverage Report (generated Thu Nov 26 15:54:18 CST 2009)
[all classes][org.eclipse.pde.api.tools.internal.builder]

COVERAGE SUMMARY FOR SOURCE FILE [AbstractLeakProblemDetector.java]

nameclass, %method, %block, %line, %
AbstractLeakProblemDetector.java100% (1/1)100% (3/3)100% (75/75)100% (24/24)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class AbstractLeakProblemDetector100% (1/1)100% (3/3)100% (75/75)100% (24/24)
AbstractLeakProblemDetector (Set): void 100% (1/1)100% (6/6)100% (3/3)
isEnclosingTypeVisible (IApiMember): boolean 100% (1/1)100% (28/28)100% (9/9)
isNonAPIReference (IReference): boolean 100% (1/1)100% (41/41)100% (12/12)

1/*******************************************************************************
2 * Copyright (c) 2008 IBM Corporation and others.
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/epl-v10.html
7 *
8 * Contributors:
9 *     IBM Corporation - initial API and implementation
10 *******************************************************************************/
11package org.eclipse.pde.api.tools.internal.builder;
12 
13import java.util.Set;
14 
15import org.eclipse.core.runtime.CoreException;
16import org.eclipse.jdt.core.Flags;
17import org.eclipse.pde.api.tools.internal.provisional.builder.IReference;
18import org.eclipse.pde.api.tools.internal.provisional.model.IApiElement;
19import org.eclipse.pde.api.tools.internal.provisional.model.IApiMember;
20import org.eclipse.pde.api.tools.internal.provisional.model.IApiType;
21import org.eclipse.pde.api.tools.internal.util.Signatures;
22 
23 
24/**
25 * Leak detectors keep track of all pre-requisite non-API package names to weed out
26 * public references.
27 * 
28 * @since 1.1
29 * @noextend This class is not intended to be subclassed by clients.
30 */
31public abstract class AbstractLeakProblemDetector extends AbstractProblemDetector {
32 
33        private Set fNonApiPackageNames;
34        
35        public AbstractLeakProblemDetector(Set nonApiPackageNames) {
36                fNonApiPackageNames = nonApiPackageNames;
37        }
38        
39        /**
40         * Returns whether the referenced type name matches a non-API package.
41         * 
42         * @param reference
43         * @return whether the referenced type name matches a non-API package
44         */
45        protected boolean isNonAPIReference(IReference reference) {
46                String packageName = Signatures.getPackageName(reference.getReferencedTypeName());
47                if (fNonApiPackageNames.contains(packageName)) {
48                        return true;
49                }
50                // could be a reference to a package visible type
51                IApiMember member = reference.getMember();
52                IApiType type = null;
53                if (member.getType() == IApiElement.TYPE) {
54                        type = (IApiType) member;
55                } else {
56                        type = (IApiType) member.getAncestor(IApiElement.TYPE);
57                }
58                String origin = Signatures.getPackageName(type.getName());
59                if (packageName.equals(origin)) {
60                        return true; // possible package visible reference
61                }
62                return false;
63        }
64        
65        /**
66         * Returns whether all enclosing types of the given member are visible.
67         * 
68         * @param member member
69         * @return whether all enclosing types of the given member are visible
70         * @throws CoreException
71         */
72        protected boolean isEnclosingTypeVisible(IApiMember member) throws CoreException {
73                IApiType type = null;
74                if (member.getType() == IApiElement.TYPE) {
75                        type = (IApiType) member;
76                } else {
77                        type = member.getEnclosingType();
78                }
79                while (type != null) {
80                        if (((Flags.AccPublic | Flags.AccProtected) & type.getModifiers()) == 0) {
81                                // the type is private or default protection, do not retain the reference
82                                return false;
83                        }
84                        type = type.getEnclosingType();
85                }
86                return true;
87        }        
88}

[all classes][org.eclipse.pde.api.tools.internal.builder]
EMMA 2.0.5312 EclEmma Fix 1 (C) Vladimir Roubtsov