/******************************************************************************* | |
* Copyright (c) 2000, 2004 IBM Corporation and others. | |
* All rights reserved. This program and the accompanying materials | |
* are made available under the terms of the Common Public License v1.0 | |
* which accompanies this distribution, and is available at | |
* http://www.eclipse.org/legal/cpl-v10.html | |
* | |
* Contributors: | |
* IBM Corporation - initial API and implementation | |
*******************************************************************************/ | |
package org.eclipse.wst.jsdt.internal.compiler.lookup; | |
/** | |
* Specific local variable location used to: | |
* - either provide emulation for outer local variables used from within innerclass constructs, | |
* - or provide emulation to enclosing instances. | |
* When it is mapping to an outer local variable, this actual outer local is accessible through | |
* the public field #actualOuterLocalVariable. | |
* | |
* Such a synthetic argument binding will be inserted in all constructors of local innertypes before | |
* the user arguments. | |
*/ | |
import org.eclipse.wst.jsdt.core.compiler.CharOperation; | |
public class SyntheticArgumentBinding extends LocalVariableBinding { | |
{ | |
this.isArgument = true; | |
this.useFlag = USED; | |
} | |
// if the argument is mapping to an outer local variable, this denotes the outer actual variable | |
public LocalVariableBinding actualOuterLocalVariable; | |
// if the argument has a matching synthetic field | |
public FieldBinding matchingField; | |
final static char[] OuterLocalPrefix = { 'v', 'a', 'l', '$' }; | |
final static char[] EnclosingInstancePrefix = { 't', 'h', 'i', 's', '$' }; | |
public SyntheticArgumentBinding(LocalVariableBinding actualOuterLocalVariable) { | |
super( | |
CharOperation.concat(OuterLocalPrefix, actualOuterLocalVariable.name), | |
actualOuterLocalVariable.type, | |
AccFinal, | |
true); | |
this.actualOuterLocalVariable = actualOuterLocalVariable; | |
} | |
public SyntheticArgumentBinding(ReferenceBinding enclosingType) { | |
super( | |
CharOperation.concat( | |
SyntheticArgumentBinding.EnclosingInstancePrefix, | |
String.valueOf(enclosingType.depth()).toCharArray()), | |
enclosingType, | |
AccFinal, | |
true); | |
} | |
} |