1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
/*******************************************************************************
* Copyright (c) 2007, 2012 Oracle. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0, which accompanies this distribution
* and is available at http://www.eclipse.org/legal/epl-v10.html.
*
* Contributors:
* Oracle - initial API and implementation
******************************************************************************/
package org.eclipse.jpt.common.core.internal.resource.java.source;
import org.eclipse.jdt.core.dom.FieldDeclaration;
import org.eclipse.jdt.core.dom.IBinding;
import org.eclipse.jdt.core.dom.ITypeBinding;
import org.eclipse.jdt.core.dom.IVariableBinding;
import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
import org.eclipse.jpt.common.core.internal.utility.jdt.JDTFieldAttribute;
import org.eclipse.jpt.common.core.resource.java.JavaResourceCompilationUnit;
import org.eclipse.jpt.common.core.resource.java.JavaResourceField;
import org.eclipse.jpt.common.core.resource.java.JavaResourceType;
import org.eclipse.jpt.common.core.utility.jdt.FieldAttribute;
import org.eclipse.jpt.common.core.utility.jdt.Type;
/**
* Java source field
*/
final class SourceField
extends SourceAttribute<FieldAttribute>
implements JavaResourceField
{
/**
* construct field attribute
*/
static JavaResourceField newInstance(
JavaResourceType parent,
Type declaringType,
String name,
int occurrence,
JavaResourceCompilationUnit javaResourceCompilationUnit,
FieldDeclaration fieldDeclaration,
VariableDeclarationFragment variableDeclaration) {
FieldAttribute field = new JDTFieldAttribute(
declaringType,
name,
occurrence,
javaResourceCompilationUnit.getCompilationUnit(),
javaResourceCompilationUnit.getModifySharedDocumentCommandExecutor(),
javaResourceCompilationUnit.getAnnotationEditFormatter());
SourceField sf = new SourceField(parent, field);
sf.initialize(fieldDeclaration, variableDeclaration);
return sf;
}
private SourceField(JavaResourceType parent, FieldAttribute field){
super(parent, field);
}
/**
* A SourceField must be initialized with both the FieldDeclaration and the
* VariableDeclarationFragment.
* This is to handle multiple fields declared in a single statement:
* private int foo, bar;
* The FieldDeclaration is the ASTNode that has the annotations on it.
* The VariableDeclarationFragment contains the name and return the
* IVariableBinding for the particular field.
*/
protected void initialize(FieldDeclaration fieldDeclaration, VariableDeclarationFragment variableDeclaration) {
super.initialize(fieldDeclaration, variableDeclaration.getName());
this.initialize(variableDeclaration.resolveBinding());
}
public void synchronizeWith(FieldDeclaration fieldDeclaration, VariableDeclarationFragment variableDeclaration) {
super.synchronizeWith(fieldDeclaration, variableDeclaration.getName());
this.synchronizeWith(variableDeclaration.resolveBinding());
}
public void resolveTypes(FieldDeclaration fieldDeclaration, VariableDeclarationFragment variableDeclaration) {
super.resolveTypes(variableDeclaration.resolveBinding());
}
@Override
protected ITypeBinding getJdtTypeBinding(IBinding binding) {
return binding == null ? null : ((IVariableBinding) binding).getType();
}
// ******** JavaResourceAnnotatedElement implementation ********
public Kind getKind() {
return Kind.FIELD;
}
}
|