org.eclipse.jdt.internal.compiler.lookup.SyntheticArgumentBinding Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of ecj Show documentation
Show all versions of ecj Show documentation
Eclipse Compiler for Java(TM)
/*******************************************************************************
* 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
*******************************************************************************/
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);
}
}