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

Bug 416748 - Improve semantic highlighting for alias templates

Change-Id: Ic0d0110133a4732cace07d19e995e7c51b5538e3
Signed-off-by: Nathan Ridge <zeratul976@hotmail.com>
This commit is contained in:
Nathan Ridge 2015-12-25 02:38:55 -05:00 committed by Sergey Prigogin
parent 60e390b0e4
commit f82660f14c
2 changed files with 36 additions and 7 deletions

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2000, 2014 IBM Corporation and others.
* Copyright (c) 2000, 2015 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -30,10 +30,6 @@ import org.eclipse.jface.text.Position;
import org.eclipse.jface.text.source.SourceViewer;
import org.eclipse.swt.graphics.RGB;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.dom.IPDOMManager;
import org.eclipse.cdt.core.dom.ast.IASTComment;
@ -55,9 +51,13 @@ import org.eclipse.cdt.ui.testplugin.ResourceTestHelper;
import org.eclipse.cdt.internal.ui.editor.CEditor;
import org.eclipse.cdt.internal.ui.editor.SemanticHighlighting;
import org.eclipse.cdt.internal.ui.editor.SemanticHighlightingManager;
import org.eclipse.cdt.internal.ui.editor.SemanticHighlightingManager.HighlightedPosition;
import org.eclipse.cdt.internal.ui.editor.SemanticHighlightingPresenter;
import org.eclipse.cdt.internal.ui.editor.SemanticHighlightings;
import org.eclipse.cdt.internal.ui.editor.SemanticHighlightingManager.HighlightedPosition;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
/**
* Semantic highlighting tests.
@ -445,6 +445,21 @@ public class SemanticHighlightingTest extends TestCase {
// Duration operator "" _d(unsigned long long); //$class,functionDeclaration
// Duration dur = 1000_d; //$class,globalVariable,overloadedOperator
public void testUserDefinedLiteralSuffix_484617() throws Exception {
makeAssertions();
}
// template<typename T, typename U> //$templateParameter,templateParameter
// struct Pair {}; //$class
//
// template<typename T> //$templateParameter
// using PairIntX = Pair<int, T>; //$typedef,class,templateParameter
//
// struct Waldo {}; //$class
//
// int main() { //$functionDeclaration
// PairIntX<Waldo> pair; //$typedef,class,localVariableDeclaration
// }
public void testAliasTemplates_416748() throws Exception {
makeAssertions();
}
}

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2000, 2011 IBM Corporation and others.
* Copyright (c) 2000, 2015 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -51,6 +51,8 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNameSpecifier;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateId;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTVirtSpecifier;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPAliasTemplate;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPAliasTemplateInstance;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPBlockScope;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPDeferredFunction;
@ -1142,6 +1144,18 @@ public class SemanticHighlightings {
return false;
}
IBinding binding= token.getBinding();
// Names that resolve to alias template instances are template-ids
// with the template-name naming the alias template. We don't want
// to color the entire template-id, but rather want to color its
// constituent names separately.
if (binding instanceof ICPPAliasTemplateInstance) {
return false;
}
// This covers the name defining an alias template.
if (binding instanceof ICPPAliasTemplate) {
return true;
}
// This covers regular typedefs.
if (binding instanceof ITypedef) {
return true;
}