KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > eclipse > jdt > internal > corext > refactoring > typeconstraints > types > CaptureType


1 /*******************************************************************************
2  * Copyright (c) 2000, 2006 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.jdt.internal.corext.refactoring.typeconstraints.types;
12
13 import org.eclipse.core.runtime.Assert;
14
15 import org.eclipse.jdt.core.IJavaProject;
16 import org.eclipse.jdt.core.dom.ITypeBinding;
17
18
19
20 public final class CaptureType extends AbstractTypeVariable {
21     
22     private WildcardType fWildcard;
23     private IJavaProject fJavaProject;
24     
25     protected CaptureType(TypeEnvironment environment) {
26         super(environment);
27     }
28
29     protected void initialize(ITypeBinding binding, IJavaProject javaProject) {
30         Assert.isTrue(binding.isCapture());
31         super.initialize(binding);
32         fWildcard= (WildcardType) getEnvironment().create(binding.getWildcard());
33         fJavaProject= javaProject;
34     }
35     
36     public int getKind() {
37         return CAPTURE_TYPE;
38     }
39     
40     public WildcardType getWildcard() {
41         return fWildcard;
42     }
43     
44     public boolean doEquals(TType type) {
45         return getBindingKey().equals(((CaptureType)type).getBindingKey())
46                 && fJavaProject.equals(((CaptureType)type).fJavaProject);
47     }
48     
49     public int hashCode() {
50         return getBindingKey().hashCode();
51     }
52     
53     protected boolean doCanAssignTo(TType lhs) {
54         switch (lhs.getKind()) {
55             case NULL_TYPE:
56             case VOID_TYPE:
57             case PRIMITIVE_TYPE:
58                 return false;
59                 
60             case ARRAY_TYPE:
61                 return canAssignFirstBoundTo(lhs);
62             
63             case GENERIC_TYPE:
64                 return false;
65             
66             case STANDARD_TYPE:
67             case PARAMETERIZED_TYPE:
68             case RAW_TYPE:
69                 return canAssignOneBoundTo(lhs);
70
71             case UNBOUND_WILDCARD_TYPE:
72             case EXTENDS_WILDCARD_TYPE:
73             case SUPER_WILDCARD_TYPE:
74                 return ((WildcardType)lhs).checkAssignmentBound(this);
75                 
76             case TYPE_VARIABLE:
77                 return false; //fWildcard.doCanAssignTo(lhs);
78

79             case CAPTURE_TYPE:
80                 return ((CaptureType)lhs).checkLowerBound(this.getWildcard());
81                 
82         }
83         return false;
84     }
85     
86     protected boolean checkLowerBound(TType rhs) {
87         if (! getWildcard().isSuperWildcardType())
88             return false;
89         
90         return rhs.canAssignTo(getWildcard().getBound());
91     }
92     
93     private boolean canAssignFirstBoundTo(TType lhs) {
94         if (fBounds.length > 0 && fBounds[0].isArrayType()) {
95             // capture of ? extends X[]
96
return fBounds[0].canAssignTo(lhs);
97         }
98         return false;
99     }
100     
101     public String JavaDoc getName() {
102         return ""; //$NON-NLS-1$
103
}
104     
105     protected String JavaDoc getPlainPrettySignature() {
106         return "capture-of " + fWildcard.getPrettySignature(); //$NON-NLS-1$
107
}
108 }
109
Popular Tags