mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Fixes a few JUnit test failures.
This commit is contained in:
parent
463d52d01b
commit
e560beb08a
10 changed files with 115 additions and 41 deletions
|
@ -1,5 +1,5 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Copyright (c) 2008 Symbian Software Systems and others.
|
* Copyright (c) 2008, 2012 Symbian Software Systems and others.
|
||||||
* All rights reserved. This program and the accompanying materials
|
* All rights reserved. This program and the accompanying materials
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
* which accompanies this distribution, and is available at
|
* which accompanies this distribution, and is available at
|
||||||
|
@ -86,7 +86,8 @@ public class SemanticsTests extends AST2BaseTest {
|
||||||
// operator A(); // conversion
|
// operator A(); // conversion
|
||||||
// operator B(); // conversion
|
// operator B(); // conversion
|
||||||
// };
|
// };
|
||||||
public void testGetDeclaredConversionOperators() throws Exception {
|
public void testConversionOperators() throws Exception {
|
||||||
|
// Test getDeclaredConversionOperators()
|
||||||
BindingAssertionHelper ba= new BindingAssertionHelper(getAboveComment(), true);
|
BindingAssertionHelper ba= new BindingAssertionHelper(getAboveComment(), true);
|
||||||
ICPPClassType c= ba.assertNonProblem("X {", 1, ICPPClassType.class);
|
ICPPClassType c= ba.assertNonProblem("X {", 1, ICPPClassType.class);
|
||||||
ICPPMethod[] cops= SemanticUtil.getDeclaredConversionOperators(c);
|
ICPPMethod[] cops= SemanticUtil.getDeclaredConversionOperators(c);
|
||||||
|
@ -96,11 +97,8 @@ public class SemanticsTests extends AST2BaseTest {
|
||||||
Set expected= new HashSet();
|
Set expected= new HashSet();
|
||||||
expected.add("operator A"); expected.add("operator B");
|
expected.add("operator A"); expected.add("operator B");
|
||||||
assertEquals(expected, actual);
|
assertEquals(expected, actual);
|
||||||
}
|
|
||||||
|
|
||||||
public void testIsConversionOperator() throws Exception {
|
// Test isConversionOperator()
|
||||||
BindingAssertionHelper ba= new BindingAssertionHelper(getAboveComment(), true);
|
|
||||||
ICPPClassType c= ba.assertNonProblem("X {", 1, ICPPClassType.class);
|
|
||||||
ICPPMethod[] dms= c.getDeclaredMethods();
|
ICPPMethod[] dms= c.getDeclaredMethods();
|
||||||
assertEquals(48, dms.length);
|
assertEquals(48, dms.length);
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Copyright (c) 2007, 2010 Symbian Software Systems and others.
|
* Copyright (c) 2007, 2012 Symbian Software Systems and others.
|
||||||
* All rights reserved. This program and the accompanying materials
|
* All rights reserved. This program and the accompanying materials
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
* which accompanies this distribution, and is available at
|
* which accompanies this distribution, and is available at
|
||||||
|
@ -283,9 +283,7 @@ public class IndexCPPTemplateResolutionTest extends IndexBindingResolutionTestBa
|
||||||
assertInstance(b0, ICPPMethod.class);
|
assertInstance(b0, ICPPMethod.class);
|
||||||
assertEquals(1, getIndex().findNames(b0, IIndex.FIND_REFERENCES).length);
|
assertEquals(1, getIndex().findNames(b0, IIndex.FIND_REFERENCES).length);
|
||||||
IParameter[] parameters = ((ICPPMethod) b0).getParameters();
|
IParameter[] parameters = ((ICPPMethod) b0).getParameters();
|
||||||
System.out.println(String.valueOf(parameters));
|
|
||||||
IFunctionType type = ((ICPPMethod) b0).getType();
|
IFunctionType type = ((ICPPMethod) b0).getType();
|
||||||
System.out.println(String.valueOf(type));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// template<typename T>
|
// template<typename T>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Copyright (c) 2008, 2010 Wind River Systems, Inc. and others.
|
* Copyright (c) 2008, 2012 Wind River Systems, Inc. and others.
|
||||||
* All rights reserved. This program and the accompanying materials
|
* All rights reserved. This program and the accompanying materials
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
* which accompanies this distribution, and is available at
|
* which accompanies this distribution, and is available at
|
||||||
|
@ -12,6 +12,7 @@
|
||||||
package org.eclipse.cdt.core.index;
|
package org.eclipse.cdt.core.index;
|
||||||
|
|
||||||
import org.eclipse.cdt.core.dom.ast.IBinding;
|
import org.eclipse.cdt.core.dom.ast.IBinding;
|
||||||
|
import org.eclipse.cdt.internal.core.index.IIndexFragment;
|
||||||
import org.eclipse.cdt.internal.core.index.IndexFileSet;
|
import org.eclipse.cdt.internal.core.index.IndexFileSet;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
|
|
||||||
|
@ -60,4 +61,11 @@ public interface IIndexFileSet {
|
||||||
* @noreference This method is not intended to be referenced by clients.
|
* @noreference This method is not intended to be referenced by clients.
|
||||||
*/
|
*/
|
||||||
void remove(IIndexFile indexFile);
|
void remove(IIndexFile indexFile);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks whether the given binding has a non-local declaration in
|
||||||
|
* another index fragment.
|
||||||
|
* @noreference This method is not intended to be referenced by clients.
|
||||||
|
*/
|
||||||
|
boolean containsNonLocalDeclaration(IBinding binding, IIndexFragment ignore);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Copyright (c) 2006, 2011 Wind River Systems, Inc. and others.
|
* Copyright (c) 2006, 2012 Wind River Systems, Inc. and others.
|
||||||
* All rights reserved. This program and the accompanying materials
|
* All rights reserved. This program and the accompanying materials
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
* which accompanies this distribution, and is available at
|
* which accompanies this distribution, and is available at
|
||||||
|
@ -13,6 +13,7 @@ package org.eclipse.cdt.internal.core.dom.parser;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTFileLocation;
|
import org.eclipse.cdt.core.dom.ast.IASTFileLocation;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTName;
|
import org.eclipse.cdt.core.dom.ast.IASTName;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTNode;
|
import org.eclipse.cdt.core.dom.ast.IASTNode;
|
||||||
|
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
|
||||||
import org.eclipse.cdt.core.dom.ast.IBinding;
|
import org.eclipse.cdt.core.dom.ast.IBinding;
|
||||||
import org.eclipse.cdt.core.dom.ast.IFunction;
|
import org.eclipse.cdt.core.dom.ast.IFunction;
|
||||||
import org.eclipse.cdt.core.dom.ast.IScope;
|
import org.eclipse.cdt.core.dom.ast.IScope;
|
||||||
|
@ -22,6 +23,7 @@ import org.eclipse.cdt.internal.core.dom.parser.c.ICInternalBinding;
|
||||||
import org.eclipse.cdt.internal.core.dom.parser.c.ICInternalFunction;
|
import org.eclipse.cdt.internal.core.dom.parser.c.ICInternalFunction;
|
||||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalBinding;
|
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalBinding;
|
||||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalFunction;
|
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalFunction;
|
||||||
|
import org.eclipse.cdt.internal.core.index.IIndexFragment;
|
||||||
import org.eclipse.cdt.internal.core.pdom.dom.PDOMBinding;
|
import org.eclipse.cdt.internal.core.pdom.dom.PDOMBinding;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
|
|
||||||
|
@ -72,7 +74,7 @@ public class ASTInternal {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static IASTNode getDeclaredInSourceFileOnly(IBinding binding, boolean requireDefinition, PDOMBinding nonLocal) {
|
public static IASTNode getDeclaredInSourceFileOnly(IIndexFragment forFragment, IBinding binding, boolean requireDefinition, PDOMBinding nonLocal) {
|
||||||
IASTNode[] decls;
|
IASTNode[] decls;
|
||||||
IASTNode def;
|
IASTNode def;
|
||||||
if (binding instanceof ICPPInternalBinding) {
|
if (binding instanceof ICPPInternalBinding) {
|
||||||
|
@ -105,6 +107,9 @@ public class ASTInternal {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (result == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
if (requireDefinition && nonLocal != null) {
|
if (requireDefinition && nonLocal != null) {
|
||||||
try {
|
try {
|
||||||
if (nonLocal.hasDeclaration())
|
if (nonLocal.hasDeclaration())
|
||||||
|
@ -112,6 +117,12 @@ public class ASTInternal {
|
||||||
} catch (CoreException e) {
|
} catch (CoreException e) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IASTTranslationUnit tu= result.getTranslationUnit();
|
||||||
|
if (tu != null) {
|
||||||
|
if (tu.getIndexFileSet().containsNonLocalDeclaration(binding, forFragment))
|
||||||
|
return null;
|
||||||
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Copyright (c) 2006, 2011 Wind River Systems, Inc. and others.
|
* Copyright (c) 2006, 2012 Wind River Systems, Inc. and others.
|
||||||
* All rights reserved. This program and the accompanying materials
|
* All rights reserved. This program and the accompanying materials
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
* which accompanies this distribution, and is available at
|
* which accompanies this distribution, and is available at
|
||||||
|
@ -58,6 +58,7 @@ public interface IIndexFragment {
|
||||||
*/
|
*/
|
||||||
final int FIND_ALL_OCCURRENCES = IIndex.FIND_ALL_OCCURRENCES;
|
final int FIND_ALL_OCCURRENCES = IIndex.FIND_ALL_OCCURRENCES;
|
||||||
|
|
||||||
|
final int FIND_NON_LOCAL_ONLY= 0x10000;
|
||||||
/**
|
/**
|
||||||
* Property key for the fragment ID. The fragment ID should uniquely identify the fragments
|
* Property key for the fragment ID. The fragment ID should uniquely identify the fragments
|
||||||
* usage within a logical index.
|
* usage within a logical index.
|
||||||
|
@ -223,8 +224,8 @@ public interface IIndexFragment {
|
||||||
* Searches for all names that resolve to the given binding. You can limit the result to
|
* Searches for all names that resolve to the given binding. You can limit the result to
|
||||||
* references, declarations or definitions, or a combination of those.
|
* references, declarations or definitions, or a combination of those.
|
||||||
* @param binding a binding for which names are searched for
|
* @param binding a binding for which names are searched for
|
||||||
* @param flags a combination of {@link #FIND_DECLARATIONS}, {@link #FIND_DEFINITIONS} and
|
* @param flags a combination of {@link #FIND_DECLARATIONS}, {@link #FIND_DEFINITIONS},
|
||||||
* {@link #FIND_REFERENCES}
|
* {@link #FIND_REFERENCES} and {@link #FIND_NON_LOCAL_ONLY}
|
||||||
* @return an array of names
|
* @return an array of names
|
||||||
* @throws CoreException
|
* @throws CoreException
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Copyright (c) 2008, 2010 Wind River Systems, Inc. and others.
|
* Copyright (c) 2008, 2012 Wind River Systems, Inc. and others.
|
||||||
* All rights reserved. This program and the accompanying materials
|
* All rights reserved. This program and the accompanying materials
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
* which accompanies this distribution, and is available at
|
* which accompanies this distribution, and is available at
|
||||||
|
@ -29,6 +29,7 @@ public class IndexFileSet implements IIndexFileSet {
|
||||||
public IndexFileSet() {
|
public IndexFileSet() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void add(IIndexFile indexFile) {
|
public void add(IIndexFile indexFile) {
|
||||||
final IIndexFragmentFile fragFile = (IIndexFragmentFile) indexFile;
|
final IIndexFragmentFile fragFile = (IIndexFragmentFile) indexFile;
|
||||||
final IIndexFragment frag= fragFile.getIndexFragment();
|
final IIndexFragment frag= fragFile.getIndexFragment();
|
||||||
|
@ -40,6 +41,7 @@ public class IndexFileSet implements IIndexFileSet {
|
||||||
subSet.add(fragFile);
|
subSet.add(fragFile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void remove(IIndexFile indexFile) {
|
public void remove(IIndexFile indexFile) {
|
||||||
final IIndexFragmentFile fragFile = (IIndexFragmentFile) indexFile;
|
final IIndexFragmentFile fragFile = (IIndexFragmentFile) indexFile;
|
||||||
final IIndexFragment frag= fragFile.getIndexFragment();
|
final IIndexFragment frag= fragFile.getIndexFragment();
|
||||||
|
@ -49,21 +51,16 @@ public class IndexFileSet implements IIndexFileSet {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean containsDeclaration(IIndexBinding binding) {
|
public boolean containsDeclaration(IIndexBinding binding) {
|
||||||
return containsDeclaration(binding, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
boolean containsDeclaration(IIndexBinding binding, boolean inverse) {
|
|
||||||
for (Map.Entry<IIndexFragment, IIndexFragmentFileSet> entry : fSubSets.entrySet()) {
|
for (Map.Entry<IIndexFragment, IIndexFragmentFileSet> entry : fSubSets.entrySet()) {
|
||||||
try {
|
try {
|
||||||
IIndexFragmentName[] names =
|
IIndexFragmentName[] names =
|
||||||
entry.getKey().findNames(binding, IIndexFragment.FIND_DECLARATIONS_DEFINITIONS);
|
entry.getKey().findNames(binding, IIndexFragment.FIND_DECLARATIONS_DEFINITIONS);
|
||||||
for (IIndexFragmentName name : names) {
|
for (IIndexFragmentName name : names) {
|
||||||
try {
|
try {
|
||||||
final boolean foundDecl = entry.getValue().contains((IIndexFragmentFile) name.getFile());
|
if (entry.getValue().contains((IIndexFragmentFile) name.getFile()))
|
||||||
if (foundDecl != inverse) {
|
|
||||||
return true;
|
return true;
|
||||||
}
|
|
||||||
} catch (CoreException e) {
|
} catch (CoreException e) {
|
||||||
CCorePlugin.log(e);
|
CCorePlugin.log(e);
|
||||||
}
|
}
|
||||||
|
@ -75,6 +72,33 @@ public class IndexFileSet implements IIndexFileSet {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean containsNonLocalDeclaration(IBinding binding, IIndexFragment ignore) {
|
||||||
|
for (Map.Entry<IIndexFragment, IIndexFragmentFileSet> entry : fSubSets.entrySet()) {
|
||||||
|
try {
|
||||||
|
final IIndexFragment fragment = entry.getKey();
|
||||||
|
final IIndexFragmentFileSet subset = entry.getValue();
|
||||||
|
if (fragment != ignore) {
|
||||||
|
IIndexFragmentName[] names =
|
||||||
|
fragment.findNames(binding, IIndexFragment.FIND_DECLARATIONS_DEFINITIONS | IIndexFragment.FIND_NON_LOCAL_ONLY);
|
||||||
|
for (IIndexFragmentName name : names) {
|
||||||
|
try {
|
||||||
|
if (subset.contains((IIndexFragmentFile) name.getFile())) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
} catch (CoreException e) {
|
||||||
|
CCorePlugin.log(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (CoreException e) {
|
||||||
|
CCorePlugin.log(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public IBinding[] filterFileLocalBindings(IBinding[] bindings) {
|
public IBinding[] filterFileLocalBindings(IBinding[] bindings) {
|
||||||
return filterFileLocalBindings(bindings, false);
|
return filterFileLocalBindings(bindings, false);
|
||||||
}
|
}
|
||||||
|
@ -131,6 +155,7 @@ public class IndexFileSet implements IIndexFileSet {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean contains(IIndexFile file) throws CoreException {
|
public boolean contains(IIndexFile file) throws CoreException {
|
||||||
return contains(file, false);
|
return contains(file, false);
|
||||||
}
|
}
|
||||||
|
@ -150,29 +175,40 @@ public class IndexFileSet implements IIndexFileSet {
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see org.eclipse.cdt.core.index.IIndexFileSet#invert()
|
* @see org.eclipse.cdt.core.index.IIndexFileSet#invert()
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public IIndexFileSet invert() {
|
public IIndexFileSet invert() {
|
||||||
if (fInverse == null) {
|
if (fInverse == null) {
|
||||||
fInverse= new IIndexFileSet() {
|
fInverse= new IIndexFileSet() {
|
||||||
|
@Override
|
||||||
public IIndexFileSet invert() {
|
public IIndexFileSet invert() {
|
||||||
return IndexFileSet.this;
|
return IndexFileSet.this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public IBinding[] filterFileLocalBindings(IBinding[] bindings) {
|
public IBinding[] filterFileLocalBindings(IBinding[] bindings) {
|
||||||
return IndexFileSet.this.filterFileLocalBindings(bindings, true);
|
return IndexFileSet.this.filterFileLocalBindings(bindings, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean containsDeclaration(IIndexBinding binding) {
|
public boolean containsDeclaration(IIndexBinding binding) {
|
||||||
return IndexFileSet.this.containsDeclaration(binding, true);
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public boolean containsNonLocalDeclaration(IBinding binding, IIndexFragment ignore) {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean contains(IIndexFile file) throws CoreException {
|
public boolean contains(IIndexFile file) throws CoreException {
|
||||||
return IndexFileSet.this.contains(file, true);
|
return IndexFileSet.this.contains(file, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void add(IIndexFile indexFile) {
|
public void add(IIndexFile indexFile) {
|
||||||
Assert.isLegal(false);
|
Assert.isLegal(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void remove(IIndexFile indexFile) {
|
public void remove(IIndexFile indexFile) {
|
||||||
Assert.isLegal(false);
|
Assert.isLegal(false);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Copyright (c) 2005, 2011 QNX Software Systems and others.
|
* Copyright (c) 2005, 2012 QNX Software Systems and others.
|
||||||
* All rights reserved. This program and the accompanying materials
|
* All rights reserved. This program and the accompanying materials
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
* which accompanies this distribution, and is available at
|
* which accompanies this distribution, and is available at
|
||||||
|
@ -532,7 +532,7 @@ public class PDOM extends PlatformObject implements IPDOM {
|
||||||
if (binding != null) {
|
if (binding != null) {
|
||||||
PDOMLinkage linkage= adaptLinkage(name.getLinkage());
|
PDOMLinkage linkage= adaptLinkage(name.getLinkage());
|
||||||
if (linkage != null) {
|
if (linkage != null) {
|
||||||
return findBindingInLinkage(linkage, binding);
|
return findBindingInLinkage(linkage, binding, true);
|
||||||
}
|
}
|
||||||
} else if (name.getPropertyInParent() == IASTPreprocessorStatement.MACRO_NAME) {
|
} else if (name.getPropertyInParent() == IASTPreprocessorStatement.MACRO_NAME) {
|
||||||
PDOMLinkage linkage= adaptLinkage(name.getLinkage());
|
PDOMLinkage linkage= adaptLinkage(name.getLinkage());
|
||||||
|
@ -993,6 +993,10 @@ public class PDOM extends PlatformObject implements IPDOM {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IIndexFragmentBinding adaptBinding(IBinding binding) throws CoreException {
|
public IIndexFragmentBinding adaptBinding(IBinding binding) throws CoreException {
|
||||||
|
return adaptBinding(binding, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private IIndexFragmentBinding adaptBinding(IBinding binding, boolean includeLocal) throws CoreException {
|
||||||
if (binding == null) {
|
if (binding == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -1003,16 +1007,16 @@ public class PDOM extends PlatformObject implements IPDOM {
|
||||||
|
|
||||||
PDOMLinkage linkage= adaptLinkage(binding.getLinkage());
|
PDOMLinkage linkage= adaptLinkage(binding.getLinkage());
|
||||||
if (linkage != null) {
|
if (linkage != null) {
|
||||||
return findBindingInLinkage(linkage, binding);
|
return findBindingInLinkage(linkage, binding, includeLocal);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private IIndexFragmentBinding findBindingInLinkage(PDOMLinkage linkage, IBinding binding) throws CoreException {
|
private IIndexFragmentBinding findBindingInLinkage(PDOMLinkage linkage, IBinding binding, boolean includeLocal) throws CoreException {
|
||||||
if (binding instanceof IMacroBinding || binding instanceof IIndexMacroContainer) {
|
if (binding instanceof IMacroBinding || binding instanceof IIndexMacroContainer) {
|
||||||
return linkage.findMacroContainer(binding.getNameCharArray());
|
return linkage.findMacroContainer(binding.getNameCharArray());
|
||||||
}
|
}
|
||||||
return linkage.adaptBinding(binding);
|
return linkage.adaptBinding(binding, includeLocal);
|
||||||
}
|
}
|
||||||
|
|
||||||
public IIndexFragmentBinding findBinding(IIndexFragmentName indexName) throws CoreException {
|
public IIndexFragmentBinding findBinding(IIndexFragmentName indexName) throws CoreException {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Copyright (c) 2005, 2011 QNX Software Systems and others.
|
* Copyright (c) 2005, 2012 QNX Software Systems and others.
|
||||||
* All rights reserved. This program and the accompanying materials
|
* All rights reserved. This program and the accompanying materials
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
* which accompanies this distribution, and is available at
|
* which accompanies this distribution, and is available at
|
||||||
|
@ -146,9 +146,11 @@ public abstract class PDOMLinkage extends PDOMNamedNode implements IIndexLinkage
|
||||||
getIndex().accept((IBTreeVisitor) visitor);
|
getIndex().accept((IBTreeVisitor) visitor);
|
||||||
} else {
|
} else {
|
||||||
getIndex().accept(new IBTreeVisitor() {
|
getIndex().accept(new IBTreeVisitor() {
|
||||||
|
@Override
|
||||||
public int compare(long record) throws CoreException {
|
public int compare(long record) throws CoreException {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@Override
|
||||||
public boolean visit(long record) throws CoreException {
|
public boolean visit(long record) throws CoreException {
|
||||||
PDOMNode node= getNode(record);
|
PDOMNode node= getNode(record);
|
||||||
if (node != null) {
|
if (node != null) {
|
||||||
|
@ -217,7 +219,11 @@ public abstract class PDOMLinkage extends PDOMNamedNode implements IIndexLinkage
|
||||||
return (PDOMBinding) fPDOM.getCachedResult(binding);
|
return (PDOMBinding) fPDOM.getCachedResult(binding);
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract PDOMBinding adaptBinding(IBinding binding) throws CoreException;
|
public final PDOMBinding adaptBinding(IBinding binding) throws CoreException {
|
||||||
|
return adaptBinding(binding, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract PDOMBinding adaptBinding(IBinding binding, boolean includeLocal) throws CoreException;
|
||||||
|
|
||||||
public abstract PDOMBinding addBinding(IASTName name) throws CoreException;
|
public abstract PDOMBinding addBinding(IASTName name) throws CoreException;
|
||||||
|
|
||||||
|
@ -256,7 +262,7 @@ public abstract class PDOMLinkage extends PDOMNamedNode implements IIndexLinkage
|
||||||
}
|
}
|
||||||
|
|
||||||
if (checkIfInSourceOnly) {
|
if (checkIfInSourceOnly) {
|
||||||
IASTNode node= ASTInternal.getDeclaredInSourceFileOnly(binding, requireDefinition, glob);
|
IASTNode node= ASTInternal.getDeclaredInSourceFileOnly(getPDOM(), binding, requireDefinition, glob);
|
||||||
if (node != null) {
|
if (node != null) {
|
||||||
return wpdom.getFileForASTNode(getLinkageID(), node);
|
return wpdom.getFileForASTNode(getLinkageID(), node);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Copyright (c) 2006, 2010 QNX Software Systems and others.
|
* Copyright (c) 2006, 2012 QNX Software Systems and others.
|
||||||
* All rights reserved. This program and the accompanying materials
|
* All rights reserved. This program and the accompanying materials
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
* which accompanies this distribution, and is available at
|
* which accompanies this distribution, and is available at
|
||||||
|
@ -62,10 +62,12 @@ class PDOMCLinkage extends PDOMLinkage implements IIndexCBindingConstants {
|
||||||
return LINKAGE;
|
return LINKAGE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public String getLinkageName() {
|
public String getLinkageName() {
|
||||||
return C_LINKAGE_NAME;
|
return C_LINKAGE_NAME;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public int getLinkageID() {
|
public int getLinkageID() {
|
||||||
return C_LINKAGE_ID;
|
return C_LINKAGE_ID;
|
||||||
}
|
}
|
||||||
|
@ -226,8 +228,8 @@ class PDOMCLinkage extends PDOMLinkage implements IIndexCBindingConstants {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final PDOMBinding adaptBinding(final IBinding inputBinding) throws CoreException {
|
public final PDOMBinding adaptBinding(final IBinding inputBinding, boolean includeLocal) throws CoreException {
|
||||||
return adaptBinding(null, inputBinding, FILE_LOCAL_REC_DUMMY);
|
return adaptBinding(null, inputBinding, includeLocal ? FILE_LOCAL_REC_DUMMY : null);
|
||||||
}
|
}
|
||||||
|
|
||||||
private final PDOMBinding adaptBinding(final PDOMNode parent, IBinding inputBinding, long[] localToFileHolder) throws CoreException {
|
private final PDOMBinding adaptBinding(final PDOMNode parent, IBinding inputBinding, long[] localToFileHolder) throws CoreException {
|
||||||
|
@ -264,6 +266,9 @@ class PDOMCLinkage extends PDOMLinkage implements IIndexCBindingConstants {
|
||||||
final int[] bindingTypes = new int[] {getBindingType(binding)};
|
final int[] bindingTypes = new int[] {getBindingType(binding)};
|
||||||
final char[] nameChars = binding.getNameCharArray();
|
final char[] nameChars = binding.getNameCharArray();
|
||||||
PDOMBinding nonLocal= FindBinding.findBinding(getIndex(), this, nameChars, bindingTypes, 0);
|
PDOMBinding nonLocal= FindBinding.findBinding(getIndex(), this, nameChars, bindingTypes, 0);
|
||||||
|
if (localToFileHolder == null)
|
||||||
|
return nonLocal;
|
||||||
|
|
||||||
long localToFileRec= getLocalToFileRec(parent, binding, nonLocal);
|
long localToFileRec= getLocalToFileRec(parent, binding, nonLocal);
|
||||||
if (localToFileRec == 0)
|
if (localToFileRec == 0)
|
||||||
return nonLocal;
|
return nonLocal;
|
||||||
|
@ -274,6 +279,9 @@ class PDOMCLinkage extends PDOMLinkage implements IIndexCBindingConstants {
|
||||||
final int[] bindingTypes = new int[] {getBindingType(binding)};
|
final int[] bindingTypes = new int[] {getBindingType(binding)};
|
||||||
final char[] nameChars = binding.getNameCharArray();
|
final char[] nameChars = binding.getNameCharArray();
|
||||||
PDOMBinding nonLocal= FindBinding.findBinding(parent, this, nameChars, bindingTypes, 0);
|
PDOMBinding nonLocal= FindBinding.findBinding(parent, this, nameChars, bindingTypes, 0);
|
||||||
|
if (localToFileHolder == null)
|
||||||
|
return nonLocal;
|
||||||
|
|
||||||
long localToFileRec= getLocalToFileRec(parent, binding, nonLocal);
|
long localToFileRec= getLocalToFileRec(parent, binding, nonLocal);
|
||||||
if (localToFileRec == 0)
|
if (localToFileRec == 0)
|
||||||
return nonLocal;
|
return nonLocal;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Copyright (c) 2005, 2011 QNX Software Systems and others.
|
* Copyright (c) 2005, 2012 QNX Software Systems and others.
|
||||||
* All rights reserved. This program and the accompanying materials
|
* All rights reserved. This program and the accompanying materials
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
* which accompanies this distribution, and is available at
|
* which accompanies this distribution, and is available at
|
||||||
|
@ -609,8 +609,8 @@ class PDOMCPPLinkage extends PDOMLinkage implements IIndexCPPBindingConstants {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final PDOMBinding adaptBinding(final IBinding inputBinding) throws CoreException {
|
public final PDOMBinding adaptBinding(final IBinding inputBinding, boolean includeLocal) throws CoreException {
|
||||||
return adaptBinding(null, inputBinding, FILE_LOCAL_REC_DUMMY);
|
return adaptBinding(null, inputBinding, includeLocal ? FILE_LOCAL_REC_DUMMY : null);
|
||||||
}
|
}
|
||||||
|
|
||||||
private final PDOMBinding adaptBinding(final PDOMNode parent, IBinding inputBinding, long[] fileLocalRecHolder) throws CoreException {
|
private final PDOMBinding adaptBinding(final PDOMNode parent, IBinding inputBinding, long[] fileLocalRecHolder) throws CoreException {
|
||||||
|
@ -661,6 +661,8 @@ class PDOMCPPLinkage extends PDOMLinkage implements IIndexCPPBindingConstants {
|
||||||
}
|
}
|
||||||
if (parent == this) {
|
if (parent == this) {
|
||||||
PDOMBinding glob= CPPFindBinding.findBinding(getIndex(), this, binding, 0);
|
PDOMBinding glob= CPPFindBinding.findBinding(getIndex(), this, binding, 0);
|
||||||
|
if (fileLocalRecHolder == null)
|
||||||
|
return glob;
|
||||||
final long loc= getLocalToFileRec(parent, binding, glob);
|
final long loc= getLocalToFileRec(parent, binding, glob);
|
||||||
if (loc == 0)
|
if (loc == 0)
|
||||||
return glob;
|
return glob;
|
||||||
|
@ -670,6 +672,8 @@ class PDOMCPPLinkage extends PDOMLinkage implements IIndexCPPBindingConstants {
|
||||||
if (parent instanceof PDOMCPPNamespace) {
|
if (parent instanceof PDOMCPPNamespace) {
|
||||||
final BTree btree = ((PDOMCPPNamespace) parent).getIndex();
|
final BTree btree = ((PDOMCPPNamespace) parent).getIndex();
|
||||||
PDOMBinding glob= CPPFindBinding.findBinding(btree, this, binding, 0);
|
PDOMBinding glob= CPPFindBinding.findBinding(btree, this, binding, 0);
|
||||||
|
if (fileLocalRecHolder == null)
|
||||||
|
return glob;
|
||||||
final long loc= getLocalToFileRec(parent, binding, glob);
|
final long loc= getLocalToFileRec(parent, binding, glob);
|
||||||
if (loc == 0)
|
if (loc == 0)
|
||||||
return glob;
|
return glob;
|
||||||
|
@ -993,7 +997,7 @@ class PDOMCPPLinkage extends PDOMLinkage implements IIndexCPPBindingConstants {
|
||||||
file= wpdom.getFileForASTNode(getLinkageID(), node);
|
file= wpdom.getFileForASTNode(getLinkageID(), node);
|
||||||
}
|
}
|
||||||
} else if (binding instanceof ICPPNamespaceAlias) {
|
} else if (binding instanceof ICPPNamespaceAlias) {
|
||||||
IASTNode node= ASTInternal.getDeclaredInSourceFileOnly(binding, false, glob);
|
IASTNode node= ASTInternal.getDeclaredInSourceFileOnly(getPDOM(), binding, false, glob);
|
||||||
if (node != null) {
|
if (node != null) {
|
||||||
file= wpdom.getFileForASTNode(getLinkageID(), node);
|
file= wpdom.getFileForASTNode(getLinkageID(), node);
|
||||||
}
|
}
|
||||||
|
@ -1002,7 +1006,7 @@ class PDOMCPPLinkage extends PDOMLinkage implements IIndexCPPBindingConstants {
|
||||||
IBinding owner= binding.getOwner();
|
IBinding owner= binding.getOwner();
|
||||||
if (owner instanceof ICPPNamespace) {
|
if (owner instanceof ICPPNamespace) {
|
||||||
if (owner.getNameCharArray().length == 0) {
|
if (owner.getNameCharArray().length == 0) {
|
||||||
IASTNode node= ASTInternal.getDeclaredInSourceFileOnly(owner, false, glob);
|
IASTNode node= ASTInternal.getDeclaredInSourceFileOnly(getPDOM(), owner, false, glob);
|
||||||
if (node != null) {
|
if (node != null) {
|
||||||
file= wpdom.getFileForASTNode(getLinkageID(), node);
|
file= wpdom.getFileForASTNode(getLinkageID(), node);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue