mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Cosmetics.
This commit is contained in:
parent
acbd1e14f8
commit
7020c95a8b
1 changed files with 25 additions and 30 deletions
|
@ -59,7 +59,7 @@ import org.eclipse.cdt.core.model.ITranslationUnit;
|
|||
import org.eclipse.core.runtime.CoreException;
|
||||
|
||||
/**
|
||||
* Useful functions for doing code analysis on c/c++ AST
|
||||
* Useful functions for doing code analysis on C/C++ AST.
|
||||
*/
|
||||
public final class CxxAstUtils {
|
||||
public static class NameFinderVisitor extends ASTVisitor {
|
||||
|
@ -102,10 +102,11 @@ public final class CxxAstUtils {
|
|||
try {
|
||||
while (typeName instanceof ITypedef) {
|
||||
IType t = ((ITypedef) typeName).getType();
|
||||
if (t instanceof IBinding)
|
||||
if (t instanceof IBinding) {
|
||||
typeName = (IBinding) t;
|
||||
else
|
||||
} else {
|
||||
return t;
|
||||
}
|
||||
}
|
||||
} catch (Exception e) { // in CDT 6.0 getType throws DOMException
|
||||
Activator.log(e);
|
||||
|
@ -145,33 +146,32 @@ public final class CxxAstUtils {
|
|||
}
|
||||
|
||||
/**
|
||||
* @param astName
|
||||
* a name for the declaration
|
||||
* @param factory
|
||||
* the factory
|
||||
* @param index
|
||||
* @return
|
||||
* @param astName the name for the declaration
|
||||
* @param factory the factory
|
||||
* @param index the index
|
||||
* @return the created declaration
|
||||
*/
|
||||
public static IASTDeclaration createDeclaration(IASTName astName, INodeFactory factory, IIndex index) {
|
||||
// Depending on context, either a type or a declaration is easier to
|
||||
// infer
|
||||
// Depending on context, either a type or a declaration is easier to infer.
|
||||
IType inferredType = null;
|
||||
IASTSimpleDeclaration declaration = null;
|
||||
inferredType = tryInferTypeFromBinaryExpr(astName);
|
||||
if (inferredType == null)
|
||||
declaration = tryInferTypeFromFunctionCall(astName, factory, index);
|
||||
// After the inference, create the statement is needed
|
||||
if (declaration != null) { // A declaration was generated
|
||||
// After the inference, create the statement is needed.
|
||||
if (declaration != null) {
|
||||
// A declaration was generated.
|
||||
return declaration;
|
||||
} else if (inferredType != null) { // A type was inferred, create the
|
||||
// declaration and return it
|
||||
} else if (inferredType != null) {
|
||||
// A type was inferred, create the declaration and return it.
|
||||
DeclarationGenerator generator = DeclarationGenerator.create(factory);
|
||||
IASTDeclarator declarator = generator.createDeclaratorFromType(inferredType, astName.toCharArray());
|
||||
IASTDeclSpecifier declspec = generator.createDeclSpecFromType(inferredType);
|
||||
IASTSimpleDeclaration simpleDeclaration = factory.newSimpleDeclaration(declspec);
|
||||
simpleDeclaration.addDeclarator(declarator);
|
||||
return simpleDeclaration;
|
||||
} else { // Fallback - return a `void` declaration
|
||||
} else {
|
||||
// Fallback - return a `void` declaration.
|
||||
IASTDeclarator declarator = factory.newDeclarator(astName.copy(CopyStyle.withLocations));
|
||||
IASTSimpleDeclSpecifier declspec = factory.newSimpleDeclSpecifier();
|
||||
declspec.setType(Kind.eInt);
|
||||
|
@ -192,7 +192,7 @@ public final class CxxAstUtils {
|
|||
IASTNode binaryExpr = astName.getParent().getParent();
|
||||
for (IASTNode node : binaryExpr.getChildren()) {
|
||||
if (node != astName.getParent()) {
|
||||
// use this expression as type source
|
||||
// Use this expression as type source.
|
||||
return ((IASTExpression) node).getExpressionType();
|
||||
}
|
||||
}
|
||||
|
@ -239,7 +239,7 @@ public final class CxxAstUtils {
|
|||
}
|
||||
try {
|
||||
index.acquireReadLock();
|
||||
Set<IIndexName> declSet = new HashSet<IIndexName>();
|
||||
Set<IIndexName> declSet = new HashSet<>();
|
||||
// fill declSet with proper declarations
|
||||
for (IBinding b : bindings) {
|
||||
if (b instanceof IFunction) {
|
||||
|
@ -251,7 +251,7 @@ public final class CxxAstUtils {
|
|||
}
|
||||
}
|
||||
}
|
||||
HashMap<ITranslationUnit, IASTTranslationUnit> astCache = new HashMap<ITranslationUnit, IASTTranslationUnit>();
|
||||
HashMap<ITranslationUnit, IASTTranslationUnit> astCache = new HashMap<>();
|
||||
for (IIndexName decl : declSet) {
|
||||
// for now, just use the first overload found
|
||||
ITranslationUnit tu = getTranslationUnitFromIndexName(decl);
|
||||
|
@ -260,7 +260,7 @@ public final class CxxAstUtils {
|
|||
}
|
||||
|
||||
IASTTranslationUnit ast = null;
|
||||
if(astCache.containsKey(tu)) {
|
||||
if (astCache.containsKey(tu)) {
|
||||
ast = astCache.get(tu);
|
||||
} else {
|
||||
ast = tu.getAST(index, ITranslationUnit.AST_SKIP_INDEXED_HEADERS);
|
||||
|
@ -328,9 +328,9 @@ public final class CxxAstUtils {
|
|||
* @return Either a type specifier or null
|
||||
*/
|
||||
public static IASTCompositeTypeSpecifier getCompositeTypeFromFunction(final IASTFunctionDefinition function, final IIndex index) {
|
||||
// return value to be set via visitor
|
||||
// Return value to be set via visitor.
|
||||
final IASTCompositeTypeSpecifier returnSpecifier[] = { null };
|
||||
final HashMap<ITranslationUnit, IASTTranslationUnit> astCache = new HashMap<ITranslationUnit, IASTTranslationUnit>();
|
||||
final HashMap<ITranslationUnit, IASTTranslationUnit> astCache = new HashMap<>();
|
||||
function.accept(new ASTVisitor() {
|
||||
{
|
||||
shouldVisitDeclarators = true;
|
||||
|
@ -342,8 +342,7 @@ public final class CxxAstUtils {
|
|||
if (!(name instanceof ICPPASTQualifiedName && name.getParent().getParent() == function))
|
||||
return PROCESS_CONTINUE;
|
||||
ICPPASTQualifiedName qname = (ICPPASTQualifiedName) name;
|
||||
// A qualified name may have 1 name, but in our case needs to
|
||||
// have 2.
|
||||
// A qualified name may have 1 name, but in our case needs to have 2.
|
||||
// The pre-last name is either a namespace or a class.
|
||||
if (qname.getChildren().length < 2) {
|
||||
return PROCESS_CONTINUE;
|
||||
|
@ -388,10 +387,6 @@ public final class CxxAstUtils {
|
|||
return returnSpecifier[0];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param body
|
||||
* @return
|
||||
*/
|
||||
public static boolean isThrowStatement(IASTNode body) {
|
||||
if (!(body instanceof IASTExpressionStatement))
|
||||
return false;
|
||||
|
@ -409,10 +404,10 @@ public final class CxxAstUtils {
|
|||
return false;
|
||||
IASTExpression functionNameExpression = ((IASTFunctionCallExpression) expression).getFunctionNameExpression();
|
||||
if (functionNameExpression instanceof IASTIdExpression) {
|
||||
IASTName name = ((IASTIdExpression)functionNameExpression).getName();
|
||||
IASTName name = ((IASTIdExpression) functionNameExpression).getName();
|
||||
|
||||
IBinding binding = name.resolveBinding();
|
||||
if (binding!=null && binding instanceof IFunction && ((IFunction)binding).isNoReturn()) {
|
||||
if (binding != null && binding instanceof IFunction && ((IFunction) binding).isNoReturn()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue