1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-23 17:05:26 +02:00

Bug 430230. Few follow up fixes.

This commit is contained in:
Sergey Prigogin 2014-03-13 17:06:04 -07:00
parent aa2ae49463
commit db4c3d2c3e

View file

@ -31,6 +31,7 @@ import org.eclipse.cdt.internal.core.dom.parser.ISerializableEvaluation;
import org.eclipse.cdt.internal.core.dom.parser.ITypeMarshalBuffer;
import org.eclipse.cdt.internal.core.dom.parser.Value;
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPPointerType;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ClassTypeHelper;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPEvaluation;
import org.eclipse.core.runtime.CoreException;
@ -170,7 +171,7 @@ public class EvalTypeId extends CPPDependentEvaluation {
args[i]= (ICPPEvaluation) buffer.unmarshalEvaluation();
}
} else {
args = ICPPEvaluation.EMPTY_ARRAY; // arguments must not be null
args = ICPPEvaluation.EMPTY_ARRAY; // Arguments must not be null
}
IBinding templateDefinition= buffer.unmarshalBinding();
boolean forNewExpression = (firstBytes & ITypeMarshalBuffer.FLAG2) != 0;
@ -185,12 +186,12 @@ public class EvalTypeId extends CPPDependentEvaluation {
if (args == fArguments && type == fInputType)
return this;
if (!CPPTemplates.isDependentType(type) && type instanceof ICPPClassType) {
if (!CPPTemplates.isDependentType(type) && !areArgumentTypesDependent() && type instanceof ICPPClassType) {
// Check the constructor call and return EvalFixed.INCOMPLETE to indicate a substitution
// failure if the call cannot be resolved.
ICPPClassType classType = (ICPPClassType) type;
LookupData data = new LookupData(classType.getNameCharArray(), null, point);
ICPPConstructor[] constructors = classType.getConstructors();
ICPPConstructor[] constructors = ClassTypeHelper.getConstructors(classType, point);
data.foundItems = constructors;
data.setFunctionArguments(false, fArguments);
try {
@ -243,4 +244,12 @@ public class EvalTypeId extends CPPDependentEvaluation {
}
return false;
}
private boolean areArgumentTypesDependent() {
for (ICPPEvaluation arg : fArguments) {
if (arg.isTypeDependent())
return true;
}
return false;
}
}