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

nameclass, %method, %block, %line, %
IllegalFieldReferenceDetector.java100% (1/1)92%  (11/12)81%  (118/145)84%  (25.9/31)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class IllegalFieldReferenceDetector100% (1/1)92%  (11/12)81%  (118/145)84%  (25.9/31)
getQualifiedMessageArgs (IReference): String [] 0%   (0/1)0%   (0/25)0%   (0/5)
isProblem (IReference): boolean 100% (1/1)92%  (24/26)98%  (3.9/4)
IllegalFieldReferenceDetector (): void 100% (1/1)100% (13/13)100% (3/3)
addIllegalField (IFieldDescriptor, String): void 100% (1/1)100% (20/20)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)
getMessageArgs (IReference): String [] 100% (1/1)100% (25/25)100% (5/5)
getProblemFlags (IReference): int 100% (1/1)100% (2/2)100% (1/1)
getProblemKind (): int 100% (1/1)100% (2/2)100% (1/1)
getReferenceKinds (): int 100% (1/1)100% (2/2)100% (2/2)
getSeverityKey (): String 100% (1/1)100% (2/2)100% (1/1)
getSourceRange (IType, IDocument, IReference): Position 100% (1/1)100% (8/8)100% (1/1)

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.core.runtime.CoreException;
17import org.eclipse.jdt.core.IType;
18import org.eclipse.jface.text.BadLocationException;
19import org.eclipse.jface.text.IDocument;
20import org.eclipse.jface.text.Position;
21import org.eclipse.pde.api.tools.internal.model.MethodKey;
22import org.eclipse.pde.api.tools.internal.provisional.builder.IReference;
23import org.eclipse.pde.api.tools.internal.provisional.descriptors.IElementDescriptor;
24import org.eclipse.pde.api.tools.internal.provisional.descriptors.IFieldDescriptor;
25import org.eclipse.pde.api.tools.internal.provisional.model.IApiField;
26import org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblem;
27import org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblemTypes;
28 
29 
30/**
31 * Detects references to 'no reference' fields.
32 * 
33 * @since 1.1
34 */
35public class IllegalFieldReferenceDetector extends AbstractProblemDetector {
36        
37        /**
38         * Map of {@link org.eclipse.pde.api.tools.internal.model.MethodKey} to
39         * {@link org.eclipse.pde.api.tools.internal.provisional.descriptors.IFieldDescriptor} 
40         */
41        private Map fIllegalFields = new HashMap();
42        
43        /**
44         * Map of {@link org.eclipse.pde.api.tools.internal.provisional.descriptors.IFieldDescriptor}
45         * to associated component IDs
46         */
47        private Map fFieldComponents = new HashMap();
48        
49        /**
50         * Adds the given type as not to be extended.
51         * 
52         * @param field a field that is marked no reference
53         * @param componentId the component the type is located in
54         */
55        void addIllegalField(IFieldDescriptor field, String componentId) {
56                fIllegalFields.put(new MethodKey(field.getEnclosingType().getQualifiedName(), field.getName()), field);
57                fFieldComponents.put(field, componentId);
58        }        
59        
60        /* (non-Javadoc)
61         * @see org.eclipse.pde.api.tools.internal.provisional.search.IApiProblemDetector#considerReference(org.eclipse.pde.api.tools.internal.provisional.model.IReference)
62         */
63        public boolean considerReference(IReference reference) {
64                if (fIllegalFields.containsKey(new MethodKey(reference.getReferencedTypeName(), reference.getReferencedMemberName()))) {
65                        retainReference(reference);
66                        return true;
67                }
68                return false;
69        }
70 
71        /* (non-Javadoc)
72         * @see org.eclipse.pde.api.tools.internal.provisional.search.IApiProblemDetector#getReferenceKinds()
73         */
74        public int getReferenceKinds() {
75                return
76                        IReference.REF_GETFIELD |
77                        IReference.REF_GETSTATIC |
78                        IReference.REF_PUTFIELD |
79                        IReference.REF_PUTSTATIC;
80        }        
81        
82        /* (non-Javadoc)
83         * @see org.eclipse.pde.api.tools.internal.search.AbstractProblemDetector#getProblemKind()
84         */
85        protected int getProblemKind() {
86                return IApiProblem.ILLEGAL_REFERENCE;
87        }
88        
89        /* (non-Javadoc)
90         * @see org.eclipse.pde.api.tools.internal.search.AbstractProblemDetector#getSeverityKey()
91         */
92        protected String getSeverityKey() {
93                return IApiProblemTypes.ILLEGAL_REFERENCE;
94        }
95        
96        /* (non-Javadoc)
97         * @see org.eclipse.pde.api.tools.internal.search.AbstractProblemDetector#getProblemFlags(org.eclipse.pde.api.tools.internal.provisional.model.IReference)
98         */
99        protected int getProblemFlags(IReference reference) {
100                return IApiProblem.FIELD;
101        }
102 
103        /* (non-Javadoc)
104         * @see org.eclipse.pde.api.tools.internal.search.AbstractProblemDetector#getElementType(org.eclipse.pde.api.tools.internal.provisional.model.IReference)
105         */
106        protected int getElementType(IReference reference) {
107                return IElementDescriptor.FIELD;
108        }
109 
110        /* (non-Javadoc)
111         * @see org.eclipse.pde.api.tools.internal.search.AbstractProblemDetector#getMessageArgs(org.eclipse.pde.api.tools.internal.provisional.model.IReference)
112         */
113        protected String[] getMessageArgs(IReference reference) throws CoreException {
114                IApiField field = (IApiField) reference.getResolvedReference();
115                return new String[] {
116                                getSimpleTypeName(field), 
117                                getSimpleTypeName(reference.getMember()), 
118                                field.getName()};
119        }
120 
121        /* (non-Javadoc)
122         * @see org.eclipse.pde.api.tools.internal.search.AbstractProblemDetector#getQualifiedMessageArgs(org.eclipse.pde.api.tools.internal.provisional.model.IReference)
123         */
124        protected String[] getQualifiedMessageArgs(IReference reference) throws CoreException {
125                IApiField field = (IApiField) reference.getResolvedReference();
126                return new String[] {
127                                getQualifiedTypeName(field), 
128                                getQualifiedTypeName(reference.getMember()), 
129                                field.getName()};
130        }
131 
132        /* (non-Javadoc)
133         * @see org.eclipse.pde.api.tools.internal.search.AbstractProblemDetector#getSourceRange(org.eclipse.jdt.core.IType, org.eclipse.jface.text.IDocument, org.eclipse.pde.api.tools.internal.provisional.model.IReference)
134         */
135        protected Position getSourceRange(IType type, IDocument document, IReference reference) throws CoreException, BadLocationException {
136                return getFieldNameRange((IApiField) reference.getResolvedReference(), document, reference);
137        }
138 
139        /* (non-Javadoc)
140         * @see org.eclipse.pde.api.tools.internal.search.AbstractProblemDetector#isProblem(org.eclipse.pde.api.tools.internal.provisional.model.IReference)
141         */
142        protected boolean isProblem(IReference reference) {
143                if(!super.isProblem(reference)) {
144                        return false;
145                }
146                Object componentId = fFieldComponents.get(reference.getResolvedReference().getHandle());
147                return componentId != null && reference.getResolvedReference().getApiComponent().getId().equals(componentId);
148        }
149}

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