org.jetbrains.kotlin.codegen.inline.CapturedParamInfo Maven / Gradle / Ivy
/*
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.kotlin.codegen.inline;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.codegen.StackValue;
public class CapturedParamInfo extends ParameterInfo {
public final CapturedParamDesc desc;
private final String newFieldName;
private final boolean skipInConstructor;
//Now used only for bound function reference receiver
private boolean synthetic;
public CapturedParamInfo(@NotNull CapturedParamDesc desc, @NotNull String newFieldName, boolean skipped, int index, int remapIndex) {
super(desc.getType(), skipped, index, remapIndex, -1);
this.desc = desc;
this.newFieldName = newFieldName;
this.skipInConstructor = false;
}
public CapturedParamInfo(
@NotNull CapturedParamDesc desc,
@NotNull String newFieldName,
boolean skipped,
int index,
@Nullable StackValue remapIndex,
boolean skipInConstructor,
int declarationIndex
) {
super(desc.getType(), skipped, index, remapIndex, declarationIndex);
this.desc = desc;
this.newFieldName = newFieldName;
this.skipInConstructor = skipInConstructor;
}
@NotNull
public String getNewFieldName() {
return newFieldName;
}
@NotNull
public String getOriginalFieldName() {
return desc.getFieldName();
}
@NotNull
public CapturedParamInfo cloneWithNewDeclarationIndex(int newDeclarationIndex) {
CapturedParamInfo result = new CapturedParamInfo(
desc, newFieldName, isSkipped, getIndex(), getRemapValue(), skipInConstructor, newDeclarationIndex
);
result.setLambda(getLambda());
result.setSynthetic(synthetic);
return result;
}
@NotNull
public String getContainingLambdaName() {
return desc.getContainingLambdaName();
}
public boolean isSkipInConstructor() {
return skipInConstructor;
}
public boolean isSynthetic() {
return synthetic;
}
public void setSynthetic(boolean synthetic) {
this.synthetic = synthetic;
}
public static boolean isSynthetic(@NotNull ParameterInfo info) {
return info instanceof CapturedParamInfo && ((CapturedParamInfo) info).isSynthetic();
}
}