Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarkus Schorn2012-05-14 09:01:21 +0000
committerMarkus Schorn2012-05-14 09:01:21 +0000
commit12d73e274c63c399fc42fbc92b2bb776ee1a65fd (patch)
treeebac06103d7738e928e681f23bab49e64fb169aa
parent4a5e1d6fe199a896d5816614e70cdcd4c1efd575 (diff)
downloadorg.eclipse.cdt-12d73e274c63c399fc42fbc92b2bb776ee1a65fd.tar.gz
org.eclipse.cdt-12d73e274c63c399fc42fbc92b2bb776ee1a65fd.tar.xz
org.eclipse.cdt-12d73e274c63c399fc42fbc92b2bb776ee1a65fd.zip
Fixes a few mistakes related to class specializations.
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassInstance.java4
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/BaseClassLookup.java2
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassScope.java6
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPUsingDeclarationSpecialization.java2
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMClassUtil.java9
5 files changed, 10 insertions, 13 deletions
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassInstance.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassInstance.java
index 06b679f4c7b..6c9a28cc727 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassInstance.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassInstance.java
@@ -31,7 +31,7 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPTemplates;
* The result of instantiating a class template.
*/
public class CPPClassInstance extends CPPClassSpecialization implements ICPPTemplateInstance {
- private ICPPTemplateArgument[] arguments;
+ private final ICPPTemplateArgument[] arguments;
public CPPClassInstance(ICPPClassType orig, IBinding owner, CPPTemplateParameterMap argMap, ICPPTemplateArgument[] args) {
super(orig, owner, argMap);
@@ -52,6 +52,8 @@ public class CPPClassInstance extends CPPClassSpecialization implements ICPPTemp
protected ICPPClassSpecializationScope getSpecializationScope() {
// An instance with a declaration has no specialization scope.
checkForDefinition();
+ if (getDefinition() != null)
+ return null;
final IASTNode[] decls = getDeclarations();
if (decls != null && decls.length > 0 && decls[0] != null)
return null;
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/BaseClassLookup.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/BaseClassLookup.java
index 66a3f4e395b..9691f3e476a 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/BaseClassLookup.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/BaseClassLookup.java
@@ -250,7 +250,7 @@ class BaseClassLookup {
continue;
final IName nbaseName = nbase.getBaseClassSpecifierName();
- int cmp= baseName == null ? -1 : CPPSemantics.compareByRelevance(data, baseName, nbaseName);
+ int cmp= baseName == null ? 0 : CPPSemantics.compareByRelevance(data, baseName, nbaseName);
if (cmp <= 0) {
if (cmp < 0) {
selectedBases.clear();
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassScope.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassScope.java
index 4a572add8e3..652b940d467 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassScope.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassScope.java
@@ -30,11 +30,9 @@ import org.eclipse.cdt.core.dom.ast.IBinding;
import org.eclipse.cdt.core.dom.ast.ICompositeType;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTConversionName;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassScope;
-import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassTemplatePartialSpecialization;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPConstructor;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod;
-import org.eclipse.cdt.core.dom.ast.cpp.ICPPSpecialization;
import org.eclipse.cdt.core.index.IIndexBinding;
import org.eclipse.cdt.core.index.IIndexFileSet;
import org.eclipse.cdt.core.index.IIndexName;
@@ -140,10 +138,6 @@ class PDOMCPPClassScope implements ICPPClassScope, IIndexScope {
}
private IBinding getClassNameBinding() {
- if (fBinding instanceof ICPPClassTemplatePartialSpecialization)
- return ((ICPPClassTemplatePartialSpecialization) fBinding).getPrimaryClassTemplate();
- if (fBinding instanceof ICPPSpecialization)
- return ((ICPPSpecialization) fBinding).getSpecializedBinding();
return fBinding;
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPUsingDeclarationSpecialization.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPUsingDeclarationSpecialization.java
index 953057620fc..b7cafb643c9 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPUsingDeclarationSpecialization.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPUsingDeclarationSpecialization.java
@@ -61,7 +61,7 @@ class PDOMCPPUsingDeclarationSpecialization extends PDOMCPPSpecialization implem
@Override
public int getNodeType() {
- return IIndexCPPBindingConstants.CPP_USING_DECLARATION;
+ return IIndexCPPBindingConstants.CPP_USING_DECLARATION_SPECIALIZATION;
}
@Override
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMClassUtil.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMClassUtil.java
index eeb07ceb5fb..92bcf23cf77 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMClassUtil.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMClassUtil.java
@@ -22,6 +22,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPField;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateInstance;
import org.eclipse.cdt.core.index.IndexFilter;
+import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPDeferredClassInstance;
import org.eclipse.core.runtime.CoreException;
@@ -30,7 +31,7 @@ import org.eclipse.core.runtime.CoreException;
*/
class PDOMClassUtil {
static class FieldCollector implements IPDOMVisitor {
- private List<ICPPField> fields = new ArrayList<ICPPField>();
+ private final List<ICPPField> fields = new ArrayList<ICPPField>();
@Override
public boolean visit(IPDOMNode node) throws CoreException {
if (node instanceof ICPPField) {
@@ -50,7 +51,7 @@ class PDOMClassUtil {
}
static class ConstructorCollector implements IPDOMVisitor {
- private List<ICPPConstructor> fConstructors = new ArrayList<ICPPConstructor>();
+ private final List<ICPPConstructor> fConstructors = new ArrayList<ICPPConstructor>();
@Override
public boolean visit(IPDOMNode node) throws CoreException {
if (node instanceof ICPPConstructor) {
@@ -108,10 +109,10 @@ class PDOMClassUtil {
}
static class NestedClassCollector implements IPDOMVisitor {
- private List<IPDOMNode> nestedClasses = new ArrayList<IPDOMNode>();
+ private final List<IPDOMNode> nestedClasses = new ArrayList<IPDOMNode>();
@Override
public boolean visit(IPDOMNode node) throws CoreException {
- if (node instanceof ICPPClassType)
+ if (node instanceof ICPPClassType && !(node instanceof ICPPDeferredClassInstance))
nestedClasses.add(node);
return false;
}

Back to the top