use of org.eclipse.jdt.core.dom.MethodDeclaration in project che by eclipse.
the class InlineMethodRefactoring method resolveSourceProvider.
private static SourceProvider resolveSourceProvider(RefactoringStatus status, ITypeRoot typeRoot, ASTNode invocation) {
CompilationUnit root = (CompilationUnit) invocation.getRoot();
IMethodBinding methodBinding = Invocations.resolveBinding(invocation);
if (methodBinding == null) {
status.addFatalError(RefactoringCoreMessages.InlineMethodRefactoring_error_noMethodDeclaration);
return null;
}
MethodDeclaration declaration = (MethodDeclaration) root.findDeclaringNode(methodBinding);
if (declaration != null) {
return new SourceProvider(typeRoot, declaration);
}
IMethod method = (IMethod) methodBinding.getJavaElement();
if (method != null) {
CompilationUnit methodDeclarationAstRoot;
ICompilationUnit methodCu = method.getCompilationUnit();
if (methodCu != null) {
methodDeclarationAstRoot = new RefactoringASTParser(ASTProvider.SHARED_AST_LEVEL).parse(methodCu, true);
} else {
IClassFile classFile = method.getClassFile();
if (!JavaElementUtil.isSourceAvailable(classFile)) {
String methodLabel = JavaElementLabels.getTextLabel(method, JavaElementLabels.M_FULLY_QUALIFIED | JavaElementLabels.M_PARAMETER_TYPES);
status.addFatalError(Messages.format(RefactoringCoreMessages.InlineMethodRefactoring_error_classFile, methodLabel));
return null;
}
methodDeclarationAstRoot = new RefactoringASTParser(ASTProvider.SHARED_AST_LEVEL).parse(classFile, true);
}
ASTNode node = methodDeclarationAstRoot.findDeclaringNode(methodBinding.getMethodDeclaration().getKey());
if (node instanceof MethodDeclaration) {
return new SourceProvider(methodDeclarationAstRoot.getTypeRoot(), (MethodDeclaration) node);
}
}
status.addFatalError(RefactoringCoreMessages.InlineMethodRefactoring_error_noMethodDeclaration);
return null;
}
use of org.eclipse.jdt.core.dom.MethodDeclaration in project bndtools by bndtools.
the class AbstractBuildErrorDetailsHandler method createMethodMarkerData.
/**
* Create a marker on a Java Method
*
* @param javaProject
* @param className
* - the fully qualified class name (e.g java.lang.String)
* @param methodName
* @param methodSignature
* - signatures are in "internal form" e.g. (Ljava.lang.Integer;[Ljava/lang/String;Z)V
* @param markerAttributes
* - attributes that should be included in the marker, typically a message. The start and end points for
* the marker are added by this method.
* @param hasResolutions
* - true if the marker will have resolutions
* @return Marker Data that can be used to create an {@link IMarker}, or null if no location can be found
* @throws JavaModelException
*/
public static final MarkerData createMethodMarkerData(IJavaProject javaProject, final String className, final String methodName, final String methodSignature, final Map<String, Object> markerAttributes, boolean hasResolutions) throws JavaModelException {
final CompilationUnit ast = createAST(javaProject, className);
if (ast == null)
return null;
ast.accept(new ASTVisitor() {
@Override
public boolean visit(MethodDeclaration methodDecl) {
if (matches(ast, methodDecl, methodName, methodSignature)) {
// Create the marker attribs here
markerAttributes.put(IMarker.CHAR_START, methodDecl.getStartPosition());
markerAttributes.put(IMarker.CHAR_END, methodDecl.getStartPosition() + methodDecl.getLength());
}
return false;
}
private boolean matches(CompilationUnit ast, MethodDeclaration methodDecl, String methodName, String signature) {
if ("<init>".equals(methodName)) {
if (!methodDecl.isConstructor()) {
return false;
}
} else if (!methodDecl.getName().getIdentifier().equals(methodName)) {
return false;
}
return getSignature(ast, methodDecl).equals(signature);
}
private String getSignature(CompilationUnit ast, MethodDeclaration methodDecl) {
StringBuilder signatureBuilder = new StringBuilder("(");
for (@SuppressWarnings("unchecked") Iterator<SingleVariableDeclaration> it = methodDecl.parameters().iterator(); it.hasNext(); ) {
SingleVariableDeclaration decl = it.next();
appendType(ast, signatureBuilder, decl.getType(), decl.getExtraDimensions());
}
signatureBuilder.append(")");
appendType(ast, signatureBuilder, methodDecl.getReturnType2(), 0);
return signatureBuilder.toString();
}
private void appendType(CompilationUnit ast, StringBuilder signatureBuilder, Type typeToAdd, int extraDimensions) {
for (int i = 0; i < extraDimensions; i++) {
signatureBuilder.append('[');
}
Type rovingType = typeToAdd;
if (rovingType == null) {
//A special return type for constructors, nice one Eclipse...
signatureBuilder.append("V");
} else {
if (rovingType.isArrayType()) {
ArrayType type = (ArrayType) rovingType;
int depth = type.getDimensions();
for (int i = 0; i < depth; i++) {
signatureBuilder.append('[');
}
//We still need to add the array component type, which might be primitive or a reference
rovingType = type.getElementType();
}
// Type erasure means that we should ignore parameters
if (rovingType.isParameterizedType()) {
rovingType = ((ParameterizedType) rovingType).getType();
}
if (rovingType.isPrimitiveType()) {
PrimitiveType type = (PrimitiveType) rovingType;
signatureBuilder.append(PRIMITIVES_TO_SIGNATURES.get(type.getPrimitiveTypeCode()));
} else if (rovingType.isSimpleType()) {
SimpleType type = (SimpleType) rovingType;
String name;
if (type.getName().isQualifiedName()) {
name = type.getName().getFullyQualifiedName();
} else {
name = getFullyQualifiedNameForSimpleName(ast, type.getName());
}
name = name.replace('.', '/');
signatureBuilder.append("L").append(name).append(";");
} else if (rovingType.isQualifiedType()) {
QualifiedType type = (QualifiedType) rovingType;
String name = type.getQualifier().toString().replace('.', '/') + '/' + type.getName().getFullyQualifiedName().replace('.', '/');
signatureBuilder.append("L").append(name).append(";");
} else {
throw new IllegalArgumentException("We hit an unknown type " + rovingType);
}
}
}
private String getFullyQualifiedNameForSimpleName(CompilationUnit ast, Name typeName) {
String name = typeName.getFullyQualifiedName();
@SuppressWarnings("unchecked") List<ImportDeclaration> ids = ast.imports();
for (ImportDeclaration id : ids) {
if (id.isStatic())
continue;
if (id.isOnDemand()) {
String packageName = id.getName().getFullyQualifiedName();
try {
if (ast.getJavaElement().getJavaProject().findType(packageName + "." + name) != null) {
name = packageName + '.' + name;
}
} catch (JavaModelException e) {
}
} else {
String importName = id.getName().getFullyQualifiedName();
if (importName.endsWith("." + name)) {
name = importName;
break;
}
}
}
if (name.indexOf('.') < 0) {
try {
if (ast.getJavaElement().getJavaProject().findType(name) == null) {
name = "java.lang." + name;
}
} catch (JavaModelException e) {
}
}
return name;
}
});
if (!markerAttributes.containsKey(IMarker.CHAR_START))
return null;
return new MarkerData(ast.getJavaElement().getResource(), markerAttributes, hasResolutions);
}
use of org.eclipse.jdt.core.dom.MethodDeclaration in project AutoRefactor by JnRouvignac.
the class RemoveUnnecessaryCastRefactoring method canRemoveCast.
private boolean canRemoveCast(CastExpression node) {
final ASTNode parent = node.getParent();
switch(parent.getNodeType()) {
case RETURN_STATEMENT:
final MethodDeclaration md = getAncestor(parent, MethodDeclaration.class);
return isAssignmentCompatible(node.getExpression(), md.getReturnType2());
case ASSIGNMENT:
final Assignment as = (Assignment) parent;
return isAssignmentCompatible(node.getExpression(), as) || isConstantExpressionAssignmentConversion(node);
case VARIABLE_DECLARATION_FRAGMENT:
final VariableDeclarationFragment vdf = (VariableDeclarationFragment) parent;
return isAssignmentCompatible(node.getExpression(), resolveTypeBinding(vdf)) || isConstantExpressionAssignmentConversion(node);
case INFIX_EXPRESSION:
final InfixExpression ie = (InfixExpression) parent;
final Expression lo = ie.getLeftOperand();
final Expression ro = ie.getRightOperand();
if (node.equals(lo)) {
return (isStringConcat(ie) || isAssignmentCompatible(node.getExpression(), ro)) && !isPrimitiveTypeNarrowing(node) && !hasOperator(ie, DIVIDE) && !hasOperator(ie, PLUS) && !hasOperator(ie, MINUS);
} else {
final boolean integralDivision = isIntegralDivision(ie);
return ((isNotRefactored(lo) && isStringConcat(ie)) || (!integralDivision && isAssignmentCompatibleInInfixExpression(node, ie)) || (integralDivision && canRemoveCastInIntegralDivision(node, ie))) && !isPrimitiveTypeNarrowing(node) && !isIntegralDividedByFloatingPoint(node, ie);
}
}
return false;
}
use of org.eclipse.jdt.core.dom.MethodDeclaration in project xtext-xtend by eclipse.
the class JavaASTFlattener method visit.
@Override
public boolean visit(final Modifier it) {
boolean append = true;
int _flagValue = it.getKeyword().toFlagValue();
switch(_flagValue) {
case Modifier.PUBLIC:
if (((it.getParent() instanceof TypeDeclaration) || (it.getParent() instanceof MethodDeclaration))) {
append = false;
}
break;
case Modifier.PRIVATE:
ASTNode _parent = it.getParent();
if ((_parent instanceof FieldDeclaration)) {
append = false;
}
break;
case Modifier.FINAL:
if (((it.getParent() instanceof VariableDeclarationExpression) || (it.getParent() instanceof VariableDeclarationStatement))) {
append = false;
}
break;
default:
append = true;
break;
}
if (append) {
String valueToAppend = it.getKeyword().toString();
int _flagValue_1 = it.getKeyword().toFlagValue();
boolean _equals = (_flagValue_1 == 0);
if (_equals) {
valueToAppend = "package";
}
this.appendToBuffer(valueToAppend);
this.appendSpaceToBuffer();
}
return false;
}
use of org.eclipse.jdt.core.dom.MethodDeclaration in project xtext-xtend by eclipse.
the class JavaASTFlattener method visit.
@Override
public boolean visit(final SingleVariableDeclaration it) {
if ((((it.getParent() instanceof MethodDeclaration) || (it.getParent() instanceof CatchClause)) || (it.getParent() instanceof EnhancedForStatement))) {
final Function1<IExtendedModifier, Boolean> _function = (IExtendedModifier it_1) -> {
return Boolean.valueOf(it_1.isAnnotation());
};
this.appendModifiers(it, IterableExtensions.<IExtendedModifier>filter(Iterables.<IExtendedModifier>filter(it.modifiers(), IExtendedModifier.class), _function));
} else {
this.appendModifiers(it, it.modifiers());
}
it.getType().accept(this);
this.appendExtraDimensions(it.getExtraDimensions());
boolean _isVarargs = it.isVarargs();
if (_isVarargs) {
this.appendToBuffer("...");
}
this.appendSpaceToBuffer();
it.getName().accept(this);
Expression _initializer = it.getInitializer();
boolean _tripleNotEquals = (_initializer != null);
if (_tripleNotEquals) {
this.appendToBuffer("=");
it.getInitializer().accept(this);
}
return false;
}
Aggregations