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

Bug 262307.

This commit is contained in:
Sergey Prigogin 2009-01-25 05:15:42 +00:00
parent 1805f2368d
commit 68bf987af0
3 changed files with 41 additions and 65 deletions

View file

@ -12,7 +12,6 @@
*******************************************************************************/
package org.eclipse.cdt.internal.core.pdom.dom;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
@ -25,6 +24,7 @@ import org.eclipse.cdt.core.dom.ast.IASTPreprocessorUndefStatement;
import org.eclipse.cdt.core.dom.ast.IMacroBinding;
import org.eclipse.cdt.core.index.IIndexFile;
import org.eclipse.cdt.core.index.IIndexMacro;
import org.eclipse.cdt.core.index.IndexLocationFactory;
import org.eclipse.cdt.core.parser.Keywords;
import org.eclipse.cdt.core.parser.util.CharArrayUtils;
import org.eclipse.cdt.internal.core.index.IIndexBindingConstants;
@ -39,11 +39,10 @@ import org.eclipse.cdt.internal.core.pdom.db.IString;
import org.eclipse.core.runtime.CoreException;
/**
* Represents macro definitions. They are stored with the file and with a PDOMMacroContainer. The latter also
* contains the references to all macros with the same name.
* Represents macro definitions. They are stored with the file and with a PDOMMacroContainer.
* The latter also contains the references to all macros with the same name.
*/
public class PDOMMacro implements IIndexMacro, IPDOMBinding, IASTFileLocation {
private static final int CONTAINER = 0;
private static final int FILE = 4;
private static final int PARAMETERS= 8;
@ -71,8 +70,8 @@ public class PDOMMacro implements IIndexMacro, IPDOMBinding, IASTFileLocation {
fRecord = record;
}
public PDOMMacro(PDOM pdom, PDOMMacroContainer container, IASTPreprocessorMacroDefinition macro, PDOMFile file) throws CoreException {
public PDOMMacro(PDOM pdom, PDOMMacroContainer container, IASTPreprocessorMacroDefinition macro,
PDOMFile file) throws CoreException {
this(pdom, container, file, macro.getName());
final IASTName name = macro.getName();
@ -91,11 +90,13 @@ public class PDOMMacro implements IIndexMacro, IPDOMBinding, IASTFileLocation {
}
}
public PDOMMacro(PDOM pdom, PDOMMacroContainer container, IASTPreprocessorUndefStatement undef, PDOMFile file) throws CoreException {
public PDOMMacro(PDOM pdom, PDOMMacroContainer container, IASTPreprocessorUndefStatement undef,
PDOMFile file) throws CoreException {
this(pdom, container, file, undef.getMacroName());
}
private PDOMMacro(PDOM pdom, PDOMMacroContainer container, PDOMFile file, IASTName name) throws CoreException {
private PDOMMacro(PDOM pdom, PDOMMacroContainer container, PDOMFile file, IASTName name)
throws CoreException {
final Database db= pdom.getDB();
fPDOM = pdom;
fRecord = db.malloc(RECORD_SIZE);
@ -251,10 +252,9 @@ public class PDOMMacro implements IIndexMacro, IPDOMBinding, IASTFileLocation {
public char[] getNameCharArray() {
try {
return getContainer().getNameCharArray();
}
catch (CoreException e) {
} catch (CoreException e) {
CCorePlugin.log(e);
return new char[]{' '};
return new char[] {' '};
}
}
@ -274,16 +274,13 @@ public class PDOMMacro implements IIndexMacro, IPDOMBinding, IASTFileLocation {
public String getFileName() {
try {
PDOMFile file = getFile();
if(file!=null) {
/*
* We need to spec. what this method can return to know
* how to implement this. Existing implmentations return
* the absolute path, so here we attempt to do the same.
*/
URI uri = file.getLocation().getURI();
if ("file".equals(uri.getScheme())) //$NON-NLS-1$
return uri.getSchemeSpecificPart();
if (file == null) {
return null;
}
// We need to spec. what this method can return to know
// how to implement this. Existing implementations return
// the absolute path, so here we attempt to do the same.
return IndexLocationFactory.getAbsolutePath(file.getLocation()).toOSString();
} catch (CoreException e) {
CCorePlugin.log(e);
}
@ -409,7 +406,6 @@ public class PDOMMacro implements IIndexMacro, IPDOMBinding, IASTFileLocation {
public void accept(IPDOMVisitor visitor) {
}
public int getId() {
return fRecord;
}

View file

@ -11,28 +11,23 @@
*******************************************************************************/
package org.eclipse.cdt.internal.core.pdom.dom;
import java.io.File;
import java.net.URI;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.dom.ast.IASTFileLocation;
import org.eclipse.cdt.core.dom.ast.IASTName;
import org.eclipse.cdt.core.index.IIndexFile;
import org.eclipse.cdt.core.index.IIndexName;
import org.eclipse.cdt.core.index.IndexLocationFactory;
import org.eclipse.cdt.core.parser.util.CharArrayUtils;
import org.eclipse.cdt.internal.core.index.IIndexFragment;
import org.eclipse.cdt.internal.core.index.IIndexFragmentBinding;
import org.eclipse.cdt.internal.core.index.IIndexFragmentName;
import org.eclipse.cdt.internal.core.pdom.PDOM;
import org.eclipse.cdt.internal.core.pdom.db.Database;
import org.eclipse.core.filesystem.EFS;
import org.eclipse.core.runtime.CoreException;
/**
* Represents declarations, definitions and references to bindings, except for macros.
*/
public final class PDOMMacroReferenceName implements IIndexFragmentName, IASTFileLocation {
private final PDOM pdom;
private final int record;
@ -46,7 +41,8 @@ public final class PDOMMacroReferenceName implements IIndexFragmentName, IASTFil
private static final int RECORD_SIZE = 26;
public PDOMMacroReferenceName(PDOM pdom, IASTName name, PDOMFile file, PDOMMacroContainer container) throws CoreException {
public PDOMMacroReferenceName(PDOM pdom, IASTName name, PDOMFile file,
PDOMMacroContainer container) throws CoreException {
this.pdom = pdom;
Database db = pdom.getDB();
record = db.malloc(RECORD_SIZE);
@ -109,7 +105,7 @@ public final class PDOMMacroReferenceName implements IIndexFragmentName, IASTFil
setNameField(CONTAINER_NEXT_OFFSET, name);
}
public IIndexFile getFile() throws CoreException {
public PDOMFile getFile() throws CoreException {
int filerec = pdom.getDB().getInt(record + FILE_REC_OFFSET);
return filerec != 0 ? new PDOMFile(pdom, filerec) : null;
}
@ -178,20 +174,14 @@ public final class PDOMMacroReferenceName implements IIndexFragmentName, IASTFil
public String getFileName() {
try {
PDOMFile file = (PDOMFile) getFile();
if(file!=null) {
/*
* We need to spec. what this method can return to know
* how to implement this. Existing implmentations return
* the absolute path, so here we attempt to do the same.
*/
URI uri = file.getLocation().getURI();
if ("file".equals(uri.getScheme())) //$NON-NLS-1$
return uri.getSchemeSpecificPart();
File f = EFS.getStore(uri).toLocalFile(0, null);
if( f != null )
return f.getAbsolutePath();
PDOMFile file = getFile();
if (file == null) {
return null;
}
// We need to spec. what this method can return to know
// how to implement this. Existing implementations return
// the absolute path, so here we attempt to do the same.
return IndexLocationFactory.getAbsolutePath(file.getLocation()).toOSString();
} catch (CoreException e) {
CCorePlugin.log(e);
}
@ -232,9 +222,9 @@ public final class PDOMMacroReferenceName implements IIndexFragmentName, IASTFil
// Delete from the binding chain
PDOMMacroReferenceName prevName = getPrevInContainer();
PDOMMacroReferenceName nextName = getNextInContainer();
if (prevName != null)
if (prevName != null) {
prevName.setNextInContainer(nextName);
else {
} else {
getContainer().setFirstReference(nextName);
}

View file

@ -11,28 +11,24 @@
*******************************************************************************/
package org.eclipse.cdt.internal.core.pdom.dom;
import java.io.File;
import java.net.URI;
import java.util.ArrayList;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.dom.ast.IASTFileLocation;
import org.eclipse.cdt.core.dom.ast.IASTName;
import org.eclipse.cdt.core.index.IIndexFile;
import org.eclipse.cdt.core.index.IIndexName;
import org.eclipse.cdt.core.index.IndexLocationFactory;
import org.eclipse.cdt.core.parser.util.CharArrayUtils;
import org.eclipse.cdt.internal.core.index.IIndexFragment;
import org.eclipse.cdt.internal.core.index.IIndexFragmentName;
import org.eclipse.cdt.internal.core.pdom.PDOM;
import org.eclipse.cdt.internal.core.pdom.db.Database;
import org.eclipse.core.filesystem.EFS;
import org.eclipse.core.runtime.CoreException;
/**
* @author Doug Schaefer
*/
public final class PDOMName implements IIndexFragmentName, IASTFileLocation {
private final PDOM pdom;
private final int record;
@ -160,7 +156,7 @@ public final class PDOMName implements IIndexFragmentName, IASTFileLocation {
setNameField(BINDING_NEXT_OFFSET, name);
}
public IIndexFile getFile() throws CoreException {
public PDOMFile getFile() throws CoreException {
int filerec = pdom.getDB().getInt(record + FILE_REC_OFFSET);
return filerec != 0 ? new PDOMFile(pdom, filerec) : null;
}
@ -285,20 +281,14 @@ public final class PDOMName implements IIndexFragmentName, IASTFileLocation {
public String getFileName() {
try {
PDOMFile file = (PDOMFile) getFile();
if (file != null) {
/*
* We need to spec. what this method can return to know
* how to implement this. Existing implementations return
* the absolute path, so here we attempt to do the same.
*/
URI uri = file.getLocation().getURI();
if ("file".equals(uri.getScheme())) //$NON-NLS-1$
return uri.getSchemeSpecificPart();
File f = EFS.getStore(uri).toLocalFile(0, null);
if (f != null)
return f.getAbsolutePath();
PDOMFile file = getFile();
if (file == null) {
return null;
}
// We need to spec. what this method can return to know
// how to implement this. Existing implementations return
// the absolute path, so here we attempt to do the same.
return IndexLocationFactory.getAbsolutePath(file.getLocation()).toOSString();
} catch (CoreException e) {
CCorePlugin.log(e);
}
@ -339,9 +329,9 @@ public final class PDOMName implements IIndexFragmentName, IASTFileLocation {
// Delete from the binding chain
PDOMName prevName = getPrevInBinding();
PDOMName nextName = getNextInBinding();
if (prevName != null)
if (prevName != null) {
prevName.setNextInBinding(nextName);
else {
} else {
switch (getFlags(DECL_DEF_REF_MASK)) {
case IS_DECLARATION:
getBinding().setFirstDeclaration(nextName);