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 [AbstractIllegalMethodReference.java]

nameclass, %method, %block, %line, %
AbstractIllegalMethodReference.java100% (1/1)100% (6/6)100% (91/91)100% (20/20)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class AbstractIllegalMethodReference100% (1/1)100% (6/6)100% (91/91)100% (20/20)
AbstractIllegalMethodReference (): void 100% (1/1)100% (13/13)100% (3/3)
addIllegalMethod (IMethodDescriptor, String): void 100% (1/1)100% (19/19)100% (3/3)
considerReference (IReference): boolean 100% (1/1)100% (18/18)100% (4/4)
getElementType (IReference): int 100% (1/1)100% (2/2)100% (1/1)
getProblemFlags (IReference): int 100% (1/1)100% (11/11)100% (4/4)
isProblem (IReference): boolean 100% (1/1)100% (28/28)100% (5/5)

1/*******************************************************************************
2 * Copyright (c) 2008, 2009 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.HashMap;
14import java.util.Map;
15 
16import org.eclipse.pde.api.tools.internal.model.MethodKey;
17import org.eclipse.pde.api.tools.internal.provisional.builder.IReference;
18import org.eclipse.pde.api.tools.internal.provisional.descriptors.IElementDescriptor;
19import org.eclipse.pde.api.tools.internal.provisional.descriptors.IMethodDescriptor;
20import org.eclipse.pde.api.tools.internal.provisional.model.IApiMember;
21import org.eclipse.pde.api.tools.internal.provisional.model.IApiMethod;
22import org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblem;
23 
24 
25/**
26 * Abstract implementation for illegal method references i.e. method calls, constructor invocation, etc
27 * @since 1.1
28 */
29public abstract class AbstractIllegalMethodReference extends AbstractProblemDetector {
30 
31        /**
32         * Map of {@link org.eclipse.pde.api.tools.internal.model.MethodKey} to
33         * {@link org.eclipse.pde.api.tools.internal.provisional.descriptors.IMethodDescriptor} 
34         */
35        private Map fIllegalMethods = new HashMap();
36        
37        /**
38         * Map of {@link org.eclipse.pde.api.tools.internal.provisional.descriptors.IMethodDescriptor}
39         * to associated component IDs
40         */
41        private Map fMethodComponents = new HashMap();
42        
43        /**
44         * Adds the given type as not to be extended.
45         * 
46         * @param type a type that is marked no extend
47         * @param componentId the component the type is located in
48         */
49        void addIllegalMethod(IMethodDescriptor method, String componentId) {
50                fIllegalMethods.put(new MethodKey(method.getName(), method.getSignature()), method);
51                fMethodComponents.put(method, componentId);
52        }        
53 
54        /* (non-Javadoc)
55         * @see org.eclipse.pde.api.tools.internal.builder.AbstractProblemDetector#considerReference(org.eclipse.pde.api.tools.internal.provisional.builder.IReference)
56         */
57        public boolean considerReference(IReference reference) {
58                if (fIllegalMethods.containsKey(new MethodKey(reference.getReferencedMemberName(), reference.getReferencedSignature()))) {
59                        retainReference(reference);
60                        return true;
61                }
62                return false;
63        }        
64        
65        /* (non-Javadoc)
66         * @see org.eclipse.pde.api.tools.internal.search.AbstractProblemDetector#isProblem(org.eclipse.pde.api.tools.internal.provisional.model.IReference)
67         */
68        protected boolean isProblem(IReference reference) {
69                if(!super.isProblem(reference)) {
70                        return false;
71                }
72                IApiMember method = reference.getResolvedReference();
73                String componentId = (String) fMethodComponents.get(method.getHandle());
74                // TODO: would it be faster to store component objects and use identity instead of equals?
75                return componentId != null && method.getApiComponent().getId().equals(componentId);
76        }
77        
78        /* (non-Javadoc)
79         * @see org.eclipse.pde.api.tools.internal.search.AbstractProblemDetector#getElementType(org.eclipse.pde.api.tools.internal.provisional.model.IReference)
80         */
81        protected int getElementType(IReference reference) {
82                return IElementDescriptor.METHOD;
83        }        
84        
85        /* (non-Javadoc)
86         * @see org.eclipse.pde.api.tools.internal.search.AbstractProblemDetector#getProblemFlags(org.eclipse.pde.api.tools.internal.provisional.model.IReference)
87         */
88        protected int getProblemFlags(IReference reference) {
89                IApiMethod method = (IApiMethod) reference.getResolvedReference();
90                if (method.isConstructor()) {
91                        return IApiProblem.CONSTRUCTOR_METHOD;
92                }
93                return IApiProblem.METHOD;
94        }
95        
96}

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