Parameter names of Java methods: store enum field instead of two booleans

This commit is contained in:
Alexander Udalov
2015-08-07 02:58:54 +03:00
parent d7b1e5d7a8
commit 74760acf66
3 changed files with 33 additions and 20 deletions
@@ -37,11 +37,9 @@ import org.jetbrains.kotlin.load.java.descriptors.SamAdapterDescriptor;
@NotNull Kind kind, @NotNull Kind kind,
@NotNull JavaMethodDescriptor declaration @NotNull JavaMethodDescriptor declaration
) { ) {
super(containingDeclaration, original, declaration.getAnnotations(), super(containingDeclaration, original, declaration.getAnnotations(), declaration.getName(), kind, declaration.getSource());
declaration.getName(), kind, declaration.getSource());
this.declaration = declaration; this.declaration = declaration;
setHasStableParameterNames(declaration.hasStableParameterNames()); setParameterNamesStatus(declaration.hasStableParameterNames(), declaration.hasSynthesizedParameterNames());
setHasSynthesizedParameterNames(declaration.hasSynthesizedParameterNames());
} }
@NotNull @NotNull
@@ -28,8 +28,29 @@ import org.jetbrains.kotlin.types.TypeSubstitutor;
import java.util.List; import java.util.List;
public class JavaMethodDescriptor extends SimpleFunctionDescriptorImpl implements JavaCallableMemberDescriptor { public class JavaMethodDescriptor extends SimpleFunctionDescriptorImpl implements JavaCallableMemberDescriptor {
private Boolean hasStableParameterNames = null; private enum ParameterNamesStatus {
private Boolean hasSynthesizedParameterNames = null; NON_STABLE_DECLARED(false, false),
STABLE_DECLARED(true, false),
NON_STABLE_SYNTHESIZED(false, true),
STABLE_SYNTHESIZED(true, true), // TODO: this makes no sense
;
public final boolean isStable;
public final boolean isSynthesized;
ParameterNamesStatus(boolean isStable, boolean isSynthesized) {
this.isStable = isStable;
this.isSynthesized = isSynthesized;
}
@NotNull
public static ParameterNamesStatus get(boolean stable, boolean synthesized) {
return stable ? (synthesized ? STABLE_SYNTHESIZED : STABLE_DECLARED) :
(synthesized ? NON_STABLE_SYNTHESIZED : NON_STABLE_DECLARED);
}
}
private ParameterNamesStatus parameterNamesStatus = null;
protected JavaMethodDescriptor( protected JavaMethodDescriptor(
@NotNull DeclarationDescriptor containingDeclaration, @NotNull DeclarationDescriptor containingDeclaration,
@@ -54,22 +75,18 @@ public class JavaMethodDescriptor extends SimpleFunctionDescriptorImpl implement
@Override @Override
public boolean hasStableParameterNames() { public boolean hasStableParameterNames() {
assert hasStableParameterNames != null : "hasStableParameterNames was not set: " + this; assert parameterNamesStatus != null : "Parameter names status was not set: " + this;
return hasStableParameterNames; return parameterNamesStatus.isStable;
}
public void setHasStableParameterNames(boolean hasStableParameterNames) {
this.hasStableParameterNames = hasStableParameterNames;
} }
@Override @Override
public boolean hasSynthesizedParameterNames() { public boolean hasSynthesizedParameterNames() {
assert hasSynthesizedParameterNames != null : "hasSynthesizedParameterNames was not set: " + this; assert parameterNamesStatus != null : "Parameter names status was not set: " + this;
return hasSynthesizedParameterNames; return parameterNamesStatus.isSynthesized;
} }
public void setHasSynthesizedParameterNames(boolean hasSynthesizedParameterNames) { public void setParameterNamesStatus(boolean hasStableParameterNames, boolean hasSynthesizedParameterNames) {
this.hasSynthesizedParameterNames = hasSynthesizedParameterNames; this.parameterNamesStatus = ParameterNamesStatus.get(hasStableParameterNames, hasSynthesizedParameterNames);
} }
@NotNull @NotNull
@@ -87,8 +104,7 @@ public class JavaMethodDescriptor extends SimpleFunctionDescriptorImpl implement
kind, kind,
SourceElement.NO_SOURCE SourceElement.NO_SOURCE
); );
result.setHasStableParameterNames(hasStableParameterNames()); result.setParameterNamesStatus(hasStableParameterNames(), hasSynthesizedParameterNames());
result.setHasSynthesizedParameterNames(hasSynthesizedParameterNames());
return result; return result;
} }
@@ -129,8 +129,7 @@ public abstract class LazyJavaScope(
method.getVisibility() method.getVisibility()
) )
functionDescriptorImpl.setHasStableParameterNames(effectiveSignature.hasStableParameterNames()) functionDescriptorImpl.setParameterNamesStatus(effectiveSignature.hasStableParameterNames(), valueParameters.hasSynthesizedNames)
functionDescriptorImpl.setHasSynthesizedParameterNames(valueParameters.hasSynthesizedNames)
if (record) { if (record) {
c.javaResolverCache.recordMethod(method, functionDescriptorImpl) c.javaResolverCache.recordMethod(method, functionDescriptorImpl)