| 1 | /******************************************************************************* | 
| 2 |  * Copyright (c) 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 |  *******************************************************************************/ | 
| 11 | package org.eclipse.pde.api.tools.internal.search; | 
| 12 |   | 
| 13 | import org.eclipse.pde.api.tools.internal.provisional.builder.IReference; | 
| 14 | import org.eclipse.pde.api.tools.internal.provisional.descriptors.IComponentDescriptor; | 
| 15 | import org.eclipse.pde.api.tools.internal.provisional.descriptors.IElementDescriptor; | 
| 16 | import org.eclipse.pde.api.tools.internal.provisional.descriptors.IMemberDescriptor; | 
| 17 |   | 
| 18 | /** | 
| 19 |  * Implementation of a reference descriptor | 
| 20 |  */ | 
| 21 | public class ReferenceDescriptor implements IReferenceDescriptor { | 
| 22 |          | 
| 23 |         private IMemberDescriptor origin; | 
| 24 |         private IMemberDescriptor target; | 
| 25 |         private IComponentDescriptor from; | 
| 26 |         private IComponentDescriptor to; | 
| 27 |          | 
| 28 |         private int line; | 
| 29 |         private int kind; | 
| 30 |         private int visibility; | 
| 31 |          | 
| 32 |         public ReferenceDescriptor(IComponentDescriptor from, IMemberDescriptor origin, int line, IComponentDescriptor to, IMemberDescriptor target, int kind, int vis) { | 
| 33 |                 this.origin = origin; | 
| 34 |                 this.target = target; | 
| 35 |                 this.from = from; | 
| 36 |                 this.to = to; | 
| 37 |                 this.line = line; | 
| 38 |                 this.kind = kind; | 
| 39 |                 this.visibility = vis; | 
| 40 |         } | 
| 41 |          | 
| 42 |         /* (non-Javadoc) | 
| 43 |          * @see java.lang.Object#equals(java.lang.Object) | 
| 44 |          */ | 
| 45 |         public boolean equals(Object obj) { | 
| 46 |                 if (obj instanceof ReferenceDescriptor) { | 
| 47 |                         ReferenceDescriptor rd = (ReferenceDescriptor) obj; | 
| 48 |                         return origin.equals(rd.origin) && | 
| 49 |                         target.equals(rd.target) && | 
| 50 |                         from.equals(rd.from) && | 
| 51 |                         to.equals(rd.to) && | 
| 52 |                         line == rd.line && kind == rd.kind && visibility == rd.visibility; | 
| 53 |                 } | 
| 54 |                 return false; | 
| 55 |         } | 
| 56 |          | 
| 57 |         /* (non-Javadoc) | 
| 58 |          * @see java.lang.Object#hashCode() | 
| 59 |          */ | 
| 60 |         public int hashCode() { | 
| 61 |                 return origin.hashCode() + target.hashCode() + from.hashCode() + to.hashCode() + line + kind + visibility; | 
| 62 |         } | 
| 63 |          | 
| 64 |         /* (non-Javadoc) | 
| 65 |          * @see org.eclipse.pde.api.tools.internal.search.IReferenceDescriptor#getComponent() | 
| 66 |          */ | 
| 67 |         public IComponentDescriptor getComponent() { | 
| 68 |                 return from; | 
| 69 |         } | 
| 70 |   | 
| 71 |         /* (non-Javadoc) | 
| 72 |          * @see org.eclipse.pde.api.tools.internal.search.IReferenceDescriptor#getLineNumber() | 
| 73 |          */ | 
| 74 |         public int getLineNumber() { | 
| 75 |                 return line; | 
| 76 |         } | 
| 77 |   | 
| 78 |         /* (non-Javadoc) | 
| 79 |          * @see org.eclipse.pde.api.tools.internal.search.IReferenceDescriptor#getMember() | 
| 80 |          */ | 
| 81 |         public IMemberDescriptor getMember() { | 
| 82 |                 return origin; | 
| 83 |         } | 
| 84 |   | 
| 85 |         /* (non-Javadoc) | 
| 86 |          * @see org.eclipse.pde.api.tools.internal.search.IReferenceDescriptor#getReferenceKind() | 
| 87 |          */ | 
| 88 |         public int getReferenceKind() { | 
| 89 |                 return kind; | 
| 90 |         } | 
| 91 |   | 
| 92 |         /* (non-Javadoc) | 
| 93 |          * @see org.eclipse.pde.api.tools.internal.search.IReferenceDescriptor#getReferenceType() | 
| 94 |          */ | 
| 95 |         public int getReferenceType() { | 
| 96 |                 switch (getReferencedMember().getElementType()) { | 
| 97 |                 case IElementDescriptor.TYPE: | 
| 98 |                         return IReference.T_TYPE_REFERENCE; | 
| 99 |                 case IElementDescriptor.METHOD: | 
| 100 |                         return IReference.T_METHOD_REFERENCE; | 
| 101 |                 case IElementDescriptor.FIELD: | 
| 102 |                         return IReference.T_FIELD_REFERENCE; | 
| 103 |                 default: | 
| 104 |                         return -1; | 
| 105 |                 } | 
| 106 |         } | 
| 107 |   | 
| 108 |         /* (non-Javadoc) | 
| 109 |          * @see org.eclipse.pde.api.tools.internal.search.IReferenceDescriptor#getReferencedComponent() | 
| 110 |          */ | 
| 111 |         public IComponentDescriptor getReferencedComponent() { | 
| 112 |                 return to; | 
| 113 |         } | 
| 114 |   | 
| 115 |         /* (non-Javadoc) | 
| 116 |          * @see org.eclipse.pde.api.tools.internal.search.IReferenceDescriptor#getReferencedMember() | 
| 117 |          */ | 
| 118 |         public IMemberDescriptor getReferencedMember() { | 
| 119 |                 return target; | 
| 120 |         } | 
| 121 |   | 
| 122 |         /* (non-Javadoc) | 
| 123 |          * @see org.eclipse.pde.api.tools.internal.search.IReferenceDescriptor#getVisibility() | 
| 124 |          */ | 
| 125 |         public int getVisibility() { | 
| 126 |                 return visibility; | 
| 127 |         } | 
| 128 |   | 
| 129 | } |