]> git.uio.no Git - ifi-stolz-refaktor.git/blame - case-study/jdt-after/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/CaptureType.java
Case Study: adding data and statistics
[ifi-stolz-refaktor.git] / case-study / jdt-after / core refactoring / org / eclipse / jdt / internal / corext / refactoring / typeconstraints / types / CaptureType.java
CommitLineData
1b2798f6
EK
1/*******************************************************************************
2 * Copyright (c) 2000, 2011 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.jdt.internal.corext.refactoring.typeconstraints.types;
12
13import org.eclipse.core.runtime.Assert;
14
15import org.eclipse.jdt.core.IJavaProject;
16import org.eclipse.jdt.core.dom.ITypeBinding;
17
18
19
20public final class CaptureType extends AbstractTypeVariable {
21
22 private WildcardType fWildcard;
23 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 @Override
37 public int getKind() {
38 return CAPTURE_TYPE;
39 }
40
41 public WildcardType getWildcard() {
42 return fWildcard;
43 }
44
45 @Override
46 public boolean doEquals(TType type) {
47 return type.generated_4797472232774948677(this);
48 }
49
50 @Override
51 public int hashCode() {
52 return getBindingKey().hashCode();
53 }
54
55 @Override
56 protected boolean doCanAssignTo(TType lhs) {
57 switch (lhs.getKind()) {
58 case NULL_TYPE:
59 case VOID_TYPE:
60 case PRIMITIVE_TYPE:
61 return false;
62
63 case ARRAY_TYPE:
64 return canAssignFirstBoundTo(lhs);
65
66 case GENERIC_TYPE:
67 return false;
68
69 case STANDARD_TYPE:
70 case PARAMETERIZED_TYPE:
71 case RAW_TYPE:
72 return canAssignOneBoundTo(lhs);
73
74 case UNBOUND_WILDCARD_TYPE:
75 case EXTENDS_WILDCARD_TYPE:
76 case SUPER_WILDCARD_TYPE:
77 return ((WildcardType)lhs).checkAssignmentBound(this);
78
79 case TYPE_VARIABLE:
80 return false; //fWildcard.doCanAssignTo(lhs);
81
82 case CAPTURE_TYPE:
83 return ((CaptureType)lhs).checkLowerBound(this.getWildcard());
84
85 }
86 return false;
87 }
88
89 protected boolean checkLowerBound(TType rhs) {
90 if (! getWildcard().isSuperWildcardType())
91 return false;
92
93 return rhs.canAssignTo(getWildcard().getBound());
94 }
95
96 private boolean canAssignFirstBoundTo(TType lhs) {
97 if (fBounds.length > 0 && fBounds[0].isArrayType()) {
98 // capture of ? extends X[]
99 return fBounds[0].canAssignTo(lhs);
100 }
101 return false;
102 }
103
104 @Override
105 public String getName() {
106 return ""; //$NON-NLS-1$
107 }
108
109 @Override
110 protected String getPlainPrettySignature() {
111 return "capture-of " + fWildcard.getPrettySignature(); //$NON-NLS-1$
112 }
113}