-
Notifications
You must be signed in to change notification settings - Fork 198
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Properly persist deduction guide templates in index
Turned out that index is missing information about template parameters of deduction guide templates, and all affected names which are only available via index could not be resolved. This happens to e.g. std::map<> which is usually looked up via index populated from <map> header file. Fix this by implementing ICPPTemplateParameterOwner and ICPPTemplateDefinition interfaces in new CPPDeductionGuideTemplate which delegates missing resolution calls to the function object which already carry required template information. Closes #438
- Loading branch information
1 parent
215daef
commit 036cebf
Showing
3 changed files
with
52 additions
and
3 deletions.
There are no files selected for viewing
47 changes: 47 additions & 0 deletions
47
...t.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPDeductionGuideTemplate.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
/******************************************************************************* | ||
* Copyright (c) 2023 Igor V. Kovalenko. | ||
* | ||
* This program and the accompanying materials | ||
* are made available under the terms of the Eclipse Public License 2.0 | ||
* which accompanies this distribution, and is available at | ||
* https://www.eclipse.org/legal/epl-2.0/ | ||
* | ||
* SPDX-License-Identifier: EPL-2.0 | ||
* | ||
* Contributors: | ||
* Igor V. Kovalenko - initial API and implementation | ||
*******************************************************************************/ | ||
package org.eclipse.cdt.internal.core.dom.parser.cpp; | ||
|
||
import org.eclipse.cdt.core.dom.ast.IASTDeclarator; | ||
import org.eclipse.cdt.core.dom.ast.IBinding; | ||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPFunction; | ||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateDefinition; | ||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameter; | ||
|
||
/** | ||
* Represents c++17 deduction guide template. | ||
*/ | ||
public class CPPDeductionGuideTemplate extends CPPDeductionGuide | ||
implements ICPPTemplateDefinition, ICPPTemplateParameterOwner { | ||
|
||
public CPPDeductionGuideTemplate(IASTDeclarator fnDecl, ICPPFunction functionBinding) { | ||
super(fnDecl, functionBinding); | ||
} | ||
|
||
@Override | ||
public ICPPTemplateParameter[] getTemplateParameters() { | ||
if (functionBinding instanceof ICPPTemplateDefinition template) { | ||
return template.getTemplateParameters(); | ||
} | ||
return null; | ||
} | ||
|
||
@Override | ||
public IBinding resolveTemplateParameter(ICPPTemplateParameter param) { | ||
if (functionBinding instanceof ICPPTemplateParameterOwner owner) { | ||
return owner.resolveTemplateParameter(param); | ||
} | ||
return null; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters