Eclipse 3.x compatible;
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / compiler / lookup / SyntheticArgumentBinding.java
1 /*******************************************************************************
2  * Copyright (c) 2000, 2003 IBM Corporation and others.
3  * All rights reserved. This program and the accompanying materials 
4  * are made available under the terms of the Common Public License v1.0
5  * which accompanies this distribution, and is available at
6  * http://www.eclipse.org/legal/cpl-v10.html
7  * 
8  * Contributors:
9  *     IBM Corporation - initial API and implementation
10  *******************************************************************************/
11 package net.sourceforge.phpdt.internal.compiler.lookup;
12
13 import net.sourceforge.phpdt.core.compiler.CharOperation;
14
15 /**
16  * Specific local variable location used to:
17  * - either provide emulation for outer local variables used from within innerclass constructs,
18  * - or provide emulation to enclosing instances. 
19  * When it is mapping to an outer local variable, this actual outer local is accessible through 
20  * the public field #actualOuterLocalVariable.
21  *
22  * Such a synthetic argument binding will be inserted in all constructors of local innertypes before
23  * the user arguments.
24  */
25
26 public class SyntheticArgumentBinding extends LocalVariableBinding {
27
28         {       
29                 this.isArgument = true;
30                 this.useFlag = USED;
31         }
32         
33         // if the argument is mapping to an outer local variable, this denotes the outer actual variable
34         public LocalVariableBinding actualOuterLocalVariable;
35         // if the argument has a matching synthetic field
36         public FieldBinding matchingField;
37
38         final static char[] OuterLocalPrefix = { 'v', 'a', 'l', '$' };
39         final static char[] EnclosingInstancePrefix = { 't', 'h', 'i', 's', '$' };
40         
41         public SyntheticArgumentBinding(LocalVariableBinding actualOuterLocalVariable) {
42
43                 super(
44                         CharOperation.concat(OuterLocalPrefix, actualOuterLocalVariable.name), 
45                         actualOuterLocalVariable.type, 
46                         AccFinal,
47                         true);
48                 this.actualOuterLocalVariable = actualOuterLocalVariable;
49         }
50
51         public SyntheticArgumentBinding(ReferenceBinding enclosingType) {
52
53                 super(
54                         CharOperation.concat(
55                                 SyntheticArgumentBinding.EnclosingInstancePrefix,
56                                 String.valueOf(enclosingType.depth()).toCharArray()),
57                         enclosingType, 
58                         AccFinal,
59                         true);
60         }
61 }