'hasUnknownTypeParameters' method added

to detect 'DIRTY' status
This commit is contained in:
Svetlana Isakova
2012-07-03 13:12:05 +04:00
parent 7696b1cb7c
commit 7c88a70c51
3 changed files with 29 additions and 0 deletions
@@ -17,12 +17,14 @@
package org.jetbrains.jet.lang.resolve.calls; package org.jetbrains.jet.lang.resolve.calls;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.intellij.util.Function; import com.intellij.util.Function;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.descriptors.CallableDescriptor; import org.jetbrains.jet.lang.descriptors.CallableDescriptor;
import org.jetbrains.jet.lang.descriptors.TypeParameterDescriptor; import org.jetbrains.jet.lang.descriptors.TypeParameterDescriptor;
import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor; import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor;
import org.jetbrains.jet.lang.resolve.TemporaryBindingTrace; import org.jetbrains.jet.lang.resolve.TemporaryBindingTrace;
import org.jetbrains.jet.lang.resolve.calls.inference.TypeBounds;
import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor; import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor;
import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.JetType;
@@ -64,11 +66,13 @@ public class ResolvedCallImpl<D extends CallableDescriptor> implements ResolvedC
private final boolean isSafeCall; private final boolean isSafeCall;
private final Map<TypeParameterDescriptor, JetType> typeArguments = Maps.newLinkedHashMap(); private final Map<TypeParameterDescriptor, JetType> typeArguments = Maps.newLinkedHashMap();
private final Map<TypeParameterDescriptor, TypeBounds> typeArgumentBounds = Maps.newLinkedHashMap();
private final Map<ValueParameterDescriptor, JetType> autoCasts = Maps.newHashMap(); private final Map<ValueParameterDescriptor, JetType> autoCasts = Maps.newHashMap();
private final Map<ValueParameterDescriptor, ResolvedValueArgument> valueArguments = Maps.newLinkedHashMap(); private final Map<ValueParameterDescriptor, ResolvedValueArgument> valueArguments = Maps.newLinkedHashMap();
private boolean someArgumentHasNoType = false; private boolean someArgumentHasNoType = false;
private TemporaryBindingTrace trace; private TemporaryBindingTrace trace;
private ResolutionStatus status = UNKNOWN_STATUS; private ResolutionStatus status = UNKNOWN_STATUS;
private boolean hasUnknownTypeParameters = false;
private ResolvedCallImpl(@NotNull ResolutionCandidate<D> candidate, @NotNull TemporaryBindingTrace trace) { private ResolvedCallImpl(@NotNull ResolutionCandidate<D> candidate, @NotNull TemporaryBindingTrace trace) {
this.candidateDescriptor = candidate.getDescriptor(); this.candidateDescriptor = candidate.getDescriptor();
@@ -89,6 +93,15 @@ public class ResolvedCallImpl<D extends CallableDescriptor> implements ResolvedC
this.status = this.status.combine(status); this.status = this.status.combine(status);
} }
@Override
public boolean hasUnknownTypeParameters() {
return hasUnknownTypeParameters;
}
public void setHasUnknownTypeParameters(boolean hasUnknownTypeParameters) {
this.hasUnknownTypeParameters = hasUnknownTypeParameters;
}
@Override @Override
@NotNull @NotNull
public TemporaryBindingTrace getTrace() { public TemporaryBindingTrace getTrace() {
@@ -117,6 +130,15 @@ public class ResolvedCallImpl<D extends CallableDescriptor> implements ResolvedC
typeArguments.put(typeParameter, typeArgument); typeArguments.put(typeParameter, typeArgument);
} }
public void recordTypeBounds(@NotNull TypeParameterDescriptor typeParameter, @NotNull TypeBounds typeBounds) {
//assert !typeArgumentBounds.containsKey(typeParameter) : typeParameter;
typeArgumentBounds.put(typeParameter, typeBounds);
}
public Map<TypeParameterDescriptor, TypeBounds> getTypeArgumentBounds() {
return typeArgumentBounds;
}
public void recordValueArgument(@NotNull ValueParameterDescriptor valueParameter, @NotNull ResolvedValueArgument valueArgument) { public void recordValueArgument(@NotNull ValueParameterDescriptor valueParameter, @NotNull ResolvedValueArgument valueArgument) {
assert !valueArguments.containsKey(valueParameter) : valueParameter + " -> " + valueArgument; assert !valueArguments.containsKey(valueParameter) : valueParameter + " -> " + valueArgument;
valueArguments.put(valueParameter, valueArgument); valueArguments.put(valueParameter, valueArgument);
@@ -28,6 +28,8 @@ public interface ResolvedCallWithTrace<D extends CallableDescriptor> extends Res
@NotNull @NotNull
ResolutionStatus getStatus(); ResolutionStatus getStatus();
boolean hasUnknownTypeParameters();
boolean isDirty(); boolean isDirty();
TemporaryBindingTrace getTrace(); TemporaryBindingTrace getTrace();
@@ -121,4 +121,9 @@ public class VariableAsFunctionResolvedCall implements ResolvedCallWithTrace<Fun
public boolean isSafeCall() { public boolean isSafeCall() {
return variableCall.isSafeCall(); return variableCall.isSafeCall();
} }
@Override
public boolean hasUnknownTypeParameters() {
return variableCall.hasUnknownTypeParameters();
}
} }