blob: a7736cdc3662c2898a2e45e43b59d5c8e018c41d [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2009 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
* Fraunhofer FIRST - extended API and implementation
* Technical University Berlin - extended API and implementation
*******************************************************************************/
package org.eclipse.jdt.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.jdt.core.compiler.CharOperation;
import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
public class SyntheticArgumentBinding extends LocalVariableBinding {
{
this.tagBits |= TagBits.IsArgument;
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;
public SyntheticArgumentBinding(LocalVariableBinding actualOuterLocalVariable) {
super(
CharOperation.concat(TypeConstants.SYNTHETIC_OUTER_LOCAL_PREFIX, actualOuterLocalVariable.name),
actualOuterLocalVariable.type,
ClassFileConstants.AccFinal,
true);
this.actualOuterLocalVariable = actualOuterLocalVariable;
}
public SyntheticArgumentBinding(ReferenceBinding enclosingType) {
super(
CharOperation.concat(
TypeConstants.SYNTHETIC_ENCLOSING_INSTANCE_PREFIX,
String.valueOf(enclosingType.depth()).toCharArray()),
enclosingType,
ClassFileConstants.AccFinal,
true);
}
//{ObjectTeams: for type value parameters:
public SyntheticArgumentBinding(char[] name, ReferenceBinding parameterType) {
super(name, parameterType, ClassFileConstants.AccFinal, true);
}
// SH}
}