mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-23 17:05:26 +02:00
Bug 436021 - [Organize includes] Both include and forward declarations
are added
This commit is contained in:
parent
aa43414c1d
commit
86c289bd83
1 changed files with 10 additions and 8 deletions
|
@ -1025,8 +1025,6 @@ public class BindingClassifier {
|
||||||
Set<IBinding> bindings = new HashSet<>();
|
Set<IBinding> bindings = new HashSet<>();
|
||||||
|
|
||||||
while ((binding = queue.poll()) != null) {
|
while ((binding = queue.poll()) != null) {
|
||||||
if (!bindings.add(binding))
|
|
||||||
continue;
|
|
||||||
if (binding instanceof ICPPSpecialization) {
|
if (binding instanceof ICPPSpecialization) {
|
||||||
ICPPTemplateParameterMap parameterMap = ((ICPPSpecialization) binding).getTemplateParameterMap();
|
ICPPTemplateParameterMap parameterMap = ((ICPPSpecialization) binding).getTemplateParameterMap();
|
||||||
for (Integer position : parameterMap.getAllParameterPositions()) {
|
for (Integer position : parameterMap.getAllParameterPositions()) {
|
||||||
|
@ -1034,11 +1032,13 @@ public class BindingClassifier {
|
||||||
if (argument != null) {
|
if (argument != null) {
|
||||||
IType type = argument.getTypeValue();
|
IType type = argument.getTypeValue();
|
||||||
// Normally we don't need to define parameters of a template specialization
|
// Normally we don't need to define parameters of a template specialization
|
||||||
// that were not specified explicitly. __gnu_cxx::hash is an exception from
|
// that were not specified explicitly. std::hash and __gnu_cxx::hash are
|
||||||
// that rule.
|
// exceptions from that rule.
|
||||||
if (type instanceof IBinding && "hash".equals(((IBinding) type).getName())) { //$NON-NLS-1$
|
if (type instanceof IBinding && CharArrayUtils.equals(((IBinding) type).getNameCharArray(), "hash")) { //$NON-NLS-1$
|
||||||
IBinding owner = ((IBinding) type).getOwner();
|
IBinding owner = ((IBinding) type).getOwner();
|
||||||
if (owner instanceof ICPPNamespace && "__gnu_cxx".equals(owner.getName())) //$NON-NLS-1$
|
if (owner instanceof ICPPNamespace &&
|
||||||
|
(CharArrayUtils.equals(owner.getNameCharArray(), STD) ||
|
||||||
|
CharArrayUtils.equals(owner.getNameCharArray(), "__gnu_cxx"))) //$NON-NLS-1$
|
||||||
addRequiredBindings((IBinding) type, queue);
|
addRequiredBindings((IBinding) type, queue);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1046,6 +1046,8 @@ public class BindingClassifier {
|
||||||
// Get the specialized binding - e.g. get the binding for X if the current binding is
|
// Get the specialized binding - e.g. get the binding for X if the current binding is
|
||||||
// for the template specialization X<Y>.
|
// for the template specialization X<Y>.
|
||||||
addRequiredBindings(((ICPPSpecialization) binding).getSpecializedBinding(), queue);
|
addRequiredBindings(((ICPPSpecialization) binding).getSpecializedBinding(), queue);
|
||||||
|
} else {
|
||||||
|
bindings.add(binding);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1160,8 +1162,8 @@ public class BindingClassifier {
|
||||||
canDeclare = fPreferences.forwardDeclareExternalVariables;
|
canDeclare = fPreferences.forwardDeclareExternalVariables;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (canDeclare && !fPreferences.forwardDeclareTemplates
|
if (canDeclare && !fPreferences.forwardDeclareTemplates &&
|
||||||
&& binding instanceof ICPPTemplateDefinition) {
|
(binding instanceof ICPPTemplateDefinition || binding instanceof ICPPSpecialization)) {
|
||||||
canDeclare = false;
|
canDeclare = false;
|
||||||
}
|
}
|
||||||
return canDeclare;
|
return canDeclare;
|
||||||
|
|
Loading…
Add table
Reference in a new issue