[FE 1.0] Provide an API to clean compile time initializer cache for variable descriptor
This commit is contained in:
@@ -31,6 +31,11 @@ public interface VariableDescriptor extends ValueDescriptor {
|
||||
@Nullable
|
||||
ConstantValue<?> getCompileTimeInitializer();
|
||||
|
||||
/**
|
||||
* ONLY FOR IDE USE! Please don't use the method inside the compiler
|
||||
*/
|
||||
void cleanCompileTimeInitializerCache();
|
||||
|
||||
/**
|
||||
* @return true if iff original declaration has appropriate flags and type, e.g. `const` modifier in Kotlin.
|
||||
* It completely does not means that if isConst then `getCompileTimeInitializer` is not null
|
||||
|
||||
+2
-3
@@ -17,7 +17,6 @@
|
||||
package org.jetbrains.kotlin.descriptors.impl;
|
||||
|
||||
import kotlin.annotations.jvm.ReadOnly;
|
||||
import kotlin.collections.CollectionsKt;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.kotlin.descriptors.*;
|
||||
@@ -525,8 +524,8 @@ public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImp
|
||||
substitutedDescriptor.setOverriddenDescriptors(overridden);
|
||||
}
|
||||
|
||||
if (isConst() && compileTimeInitializer != null) {
|
||||
substitutedDescriptor.setCompileTimeInitializer(compileTimeInitializer);
|
||||
if (isConst() && compileTimeInitializerFactory != null) {
|
||||
substitutedDescriptor.setCompileTimeInitializer(compileTimeInitializer, compileTimeInitializerFactory);
|
||||
}
|
||||
|
||||
return substitutedDescriptor;
|
||||
|
||||
+3
@@ -113,6 +113,9 @@ open class ValueParameterDescriptorImpl(
|
||||
override fun isVar() = false
|
||||
|
||||
override fun getCompileTimeInitializer() = null
|
||||
|
||||
override fun cleanCompileTimeInitializerCache() {}
|
||||
|
||||
override fun copy(newOwner: CallableDescriptor, newName: Name, newIndex: Int): ValueParameterDescriptor {
|
||||
return ValueParameterDescriptorImpl(
|
||||
newOwner, null, newIndex, annotations, newName, type, declaresDefaultValue(),
|
||||
|
||||
+18
-2
@@ -16,6 +16,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.descriptors.impl;
|
||||
|
||||
import kotlin.jvm.functions.Function0;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor;
|
||||
@@ -30,6 +31,7 @@ public abstract class VariableDescriptorWithInitializerImpl extends VariableDesc
|
||||
private final boolean isVar;
|
||||
|
||||
protected NullableLazyValue<ConstantValue<?>> compileTimeInitializer;
|
||||
protected Function0<NullableLazyValue<ConstantValue<?>>> compileTimeInitializerFactory;
|
||||
|
||||
public VariableDescriptorWithInitializerImpl(
|
||||
@NotNull DeclarationDescriptor containingDeclaration,
|
||||
@@ -58,8 +60,22 @@ public abstract class VariableDescriptorWithInitializerImpl extends VariableDesc
|
||||
return null;
|
||||
}
|
||||
|
||||
public void setCompileTimeInitializer(@NotNull NullableLazyValue<ConstantValue<?>> compileTimeInitializer) {
|
||||
public void setCompileTimeInitializerFactory(@NotNull Function0<NullableLazyValue<ConstantValue<?>>> compileTimeInitializerFactory) {
|
||||
assert !isVar() : "Constant value for variable initializer should be recorded only for final variables: " + getName();
|
||||
this.compileTimeInitializer = compileTimeInitializer;
|
||||
setCompileTimeInitializer(null, compileTimeInitializerFactory);
|
||||
}
|
||||
|
||||
public void setCompileTimeInitializer(
|
||||
@Nullable NullableLazyValue<ConstantValue<?>> compileTimeInitializer,
|
||||
@NotNull Function0<NullableLazyValue<ConstantValue<?>>> compileTimeInitializerFactory
|
||||
) {
|
||||
assert !isVar() : "Constant value for variable initializer should be recorded only for final variables: " + getName();
|
||||
this.compileTimeInitializerFactory = compileTimeInitializerFactory;
|
||||
this.compileTimeInitializer = compileTimeInitializer != null ? compileTimeInitializer : compileTimeInitializerFactory.invoke();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cleanCompileTimeInitializerCache() {
|
||||
this.compileTimeInitializer = compileTimeInitializerFactory.invoke();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user