Search in sources :

Example 41 with StringLiteral

use of org.eclipse.jdt.core.dom.StringLiteral in project che by eclipse.

the class StubUtility method getBaseNameFromExpression.

private static String getBaseNameFromExpression(IJavaProject project, Expression assignedExpression, int variableKind) {
    String name = null;
    if (assignedExpression instanceof CastExpression) {
        assignedExpression = ((CastExpression) assignedExpression).getExpression();
    }
    if (assignedExpression instanceof Name) {
        Name simpleNode = (Name) assignedExpression;
        IBinding binding = simpleNode.resolveBinding();
        if (binding instanceof IVariableBinding)
            return getBaseName((IVariableBinding) binding, project);
        return ASTNodes.getSimpleNameIdentifier(simpleNode);
    } else if (assignedExpression instanceof MethodInvocation) {
        name = ((MethodInvocation) assignedExpression).getName().getIdentifier();
    } else if (assignedExpression instanceof SuperMethodInvocation) {
        name = ((SuperMethodInvocation) assignedExpression).getName().getIdentifier();
    } else if (assignedExpression instanceof FieldAccess) {
        return ((FieldAccess) assignedExpression).getName().getIdentifier();
    } else if (variableKind == NamingConventions.VK_STATIC_FINAL_FIELD && (assignedExpression instanceof StringLiteral || assignedExpression instanceof NumberLiteral)) {
        String string = assignedExpression instanceof StringLiteral ? ((StringLiteral) assignedExpression).getLiteralValue() : ((NumberLiteral) assignedExpression).getToken();
        StringBuffer res = new StringBuffer();
        boolean needsUnderscore = false;
        for (int i = 0; i < string.length(); i++) {
            char ch = string.charAt(i);
            if (Character.isJavaIdentifierPart(ch)) {
                if (res.length() == 0 && !Character.isJavaIdentifierStart(ch) || needsUnderscore) {
                    res.append('_');
                }
                res.append(ch);
                needsUnderscore = false;
            } else {
                needsUnderscore = res.length() > 0;
            }
        }
        if (res.length() > 0) {
            return res.toString();
        }
    }
    if (name != null) {
        for (int i = 0; i < KNOWN_METHOD_NAME_PREFIXES.length; i++) {
            String curr = KNOWN_METHOD_NAME_PREFIXES[i];
            if (name.startsWith(curr)) {
                if (name.equals(curr)) {
                    // don't suggest 'get' as variable name
                    return null;
                } else if (Character.isUpperCase(name.charAt(curr.length()))) {
                    return name.substring(curr.length());
                }
            }
        }
    }
    return name;
}
Also used : IBinding(org.eclipse.jdt.core.dom.IBinding) MethodInvocation(org.eclipse.jdt.core.dom.MethodInvocation) SuperMethodInvocation(org.eclipse.jdt.core.dom.SuperMethodInvocation) SuperMethodInvocation(org.eclipse.jdt.core.dom.SuperMethodInvocation) IVariableBinding(org.eclipse.jdt.core.dom.IVariableBinding) Name(org.eclipse.jdt.core.dom.Name) StringLiteral(org.eclipse.jdt.core.dom.StringLiteral) CastExpression(org.eclipse.jdt.core.dom.CastExpression) FieldAccess(org.eclipse.jdt.core.dom.FieldAccess) NumberLiteral(org.eclipse.jdt.core.dom.NumberLiteral)

Example 42 with StringLiteral

use of org.eclipse.jdt.core.dom.StringLiteral in project che by eclipse.

the class SuppressWarningsSubProcessor method addRemoveUnusedSuppressWarningProposals.

public static void addRemoveUnusedSuppressWarningProposals(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) {
    ASTNode coveringNode = problem.getCoveringNode(context.getASTRoot());
    if (!(coveringNode instanceof StringLiteral))
        return;
    StringLiteral literal = (StringLiteral) coveringNode;
    if (coveringNode.getParent() instanceof MemberValuePair) {
        coveringNode = coveringNode.getParent();
    }
    ASTNode parent = coveringNode.getParent();
    ASTRewrite rewrite = ASTRewrite.create(coveringNode.getAST());
    if (parent instanceof SingleMemberAnnotation) {
        rewrite.remove(parent, null);
    } else if (parent instanceof NormalAnnotation) {
        NormalAnnotation annot = (NormalAnnotation) parent;
        if (annot.values().size() == 1) {
            rewrite.remove(annot, null);
        } else {
            rewrite.remove(coveringNode, null);
        }
    } else if (parent instanceof ArrayInitializer) {
        rewrite.remove(coveringNode, null);
    } else {
        return;
    }
    String label = Messages.format(CorrectionMessages.SuppressWarningsSubProcessor_remove_annotation_label, literal.getLiteralValue());
    //JavaPlugin.getDefault().getWorkbench().getSharedImages().getImage(ISharedImages.IMG_TOOL_DELETE);
    Image image = JavaPluginImages.get(JavaPluginImages.IMG_TOOL_DELETE);
    ASTRewriteCorrectionProposal proposal = new ASTRewriteCorrectionProposal(label, context.getCompilationUnit(), rewrite, IProposalRelevance.REMOVE_ANNOTATION, image);
    proposals.add(proposal);
}
Also used : ASTRewriteCorrectionProposal(org.eclipse.jdt.ui.text.java.correction.ASTRewriteCorrectionProposal) StringLiteral(org.eclipse.jdt.core.dom.StringLiteral) MemberValuePair(org.eclipse.jdt.core.dom.MemberValuePair) SingleMemberAnnotation(org.eclipse.jdt.core.dom.SingleMemberAnnotation) ASTNode(org.eclipse.jdt.core.dom.ASTNode) ASTRewrite(org.eclipse.jdt.core.dom.rewrite.ASTRewrite) NormalAnnotation(org.eclipse.jdt.core.dom.NormalAnnotation) Image(org.eclipse.swt.graphics.Image) ArrayInitializer(org.eclipse.jdt.core.dom.ArrayInitializer)

Example 43 with StringLiteral

use of org.eclipse.jdt.core.dom.StringLiteral in project AutoRefactor by JnRouvignac.

the class StringValueOfRatherThanConcatRefactoring method maybeReplaceStringConcatenation.

private boolean maybeReplaceStringConcatenation(final InfixExpression node, final Expression expr, final Expression variable) {
    if (expr instanceof StringLiteral && ((StringLiteral) expr).getLiteralValue().matches("") && !hasType(variable, "java.lang.String", "char[]")) {
        final ASTBuilder b = this.ctx.getASTBuilder();
        ctx.getRefactorings().replace(node, b.invoke("String", "valueOf", b.copy(variable)));
        return DO_NOT_VISIT_SUBTREE;
    }
    return VISIT_SUBTREE;
}
Also used : StringLiteral(org.eclipse.jdt.core.dom.StringLiteral) ASTBuilder(org.autorefactor.refactoring.ASTBuilder)

Example 44 with StringLiteral

use of org.eclipse.jdt.core.dom.StringLiteral in project AutoRefactor by JnRouvignac.

the class StringBuilderRefactoring method replaceWithNewStringAppends.

/**
 * Rewrite the successive calls to append()
 *
 * @param node The node to replace.
 * @param allAppendedStrings All appended strings.
 * @param lastExpr The expression on which the methods are called.
 * @param isInstanceCreationToRewrite
 */
private void replaceWithNewStringAppends(final Expression node, final LinkedList<Pair<ITypeBinding, Expression>> allAppendedStrings, final Expression lastExpr, final boolean isInstanceCreationToRewrite) {
    final ASTBuilder b = this.ctx.getASTBuilder();
    Expression result = null;
    final List<Expression> tempStringLiterals = new ArrayList<Expression>();
    final List<Expression> finalStrings = new ArrayList<Expression>();
    final AtomicBoolean isFirst = new AtomicBoolean(true);
    for (final Pair<ITypeBinding, Expression> appendedString : allAppendedStrings) {
        if (appendedString.getSecond() instanceof StringLiteral) {
            tempStringLiterals.add(b.copy(appendedString.getSecond()));
        } else {
            result = handleTempStringLiterals(b, lastExpr, isInstanceCreationToRewrite, result, tempStringLiterals, finalStrings, isFirst);
            if (isFirst.get()) {
                isFirst.set(false);
                if (!isInstanceCreationToRewrite) {
                    result = b.copy(lastExpr);
                    finalStrings.add(getTypedExpression(b, appendedString));
                } else if ((appendedString.getFirst() != null) ? hasType(appendedString.getFirst(), "java.lang.String") : hasType(appendedString.getSecond(), "java.lang.String")) {
                    result = b.new0(b.copy(((ClassInstanceCreation) lastExpr).getType()), getTypedExpression(b, appendedString));
                } else {
                    result = b.new0(b.copy(((ClassInstanceCreation) lastExpr).getType()));
                    finalStrings.add(getTypedExpression(b, appendedString));
                }
            } else {
                finalStrings.add(getTypedExpression(b, appendedString));
            }
        }
    }
    result = handleTempStringLiterals(b, lastExpr, isInstanceCreationToRewrite, result, tempStringLiterals, finalStrings, isFirst);
    for (final Expression finalString : finalStrings) {
        if (result == null) {
            result = finalString;
        } else {
            result = b.invoke(result, "append", finalString);
        }
    }
    ctx.getRefactorings().replace(node, result);
}
Also used : ClassInstanceCreation(org.eclipse.jdt.core.dom.ClassInstanceCreation) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) StringLiteral(org.eclipse.jdt.core.dom.StringLiteral) Expression(org.eclipse.jdt.core.dom.Expression) InfixExpression(org.eclipse.jdt.core.dom.InfixExpression) ITypeBinding(org.eclipse.jdt.core.dom.ITypeBinding) ArrayList(java.util.ArrayList) ASTBuilder(org.autorefactor.refactoring.ASTBuilder)

Example 45 with StringLiteral

use of org.eclipse.jdt.core.dom.StringLiteral in project evosuite by EvoSuite.

the class CodeGenerator method createCallMethodOrNewInstanceCallStmt.

@SuppressWarnings("unchecked")
private MethodInvocation createCallMethodOrNewInstanceCallStmt(final boolean isConstructorCall, final AST ast, final String varName, final String targetTypeName, final String methodName, final Object[] methodArgs, final org.objectweb.asm.Type[] paramTypes) {
    // -- construct getField() call
    final MethodInvocation callMethodCall = ast.newMethodInvocation();
    if (isConstructorCall) {
        callMethodCall.setName(ast.newSimpleName("newInstance"));
    } else {
        callMethodCall.setName(ast.newSimpleName("callMethod"));
    }
    StringLiteral stringLiteral = ast.newStringLiteral();
    stringLiteral.setLiteralValue(targetTypeName);
    // class name
    callMethodCall.arguments().add(stringLiteral);
    if (!isConstructorCall) {
        stringLiteral = ast.newStringLiteral();
        stringLiteral.setLiteralValue(methodName);
        // method name
        callMethodCall.arguments().add(stringLiteral);
        if (varName == null) {
            // static call -> no receiver
            callMethodCall.arguments().add(ast.newNullLiteral());
        } else {
            // receiver
            callMethodCall.arguments().add(ast.newSimpleName(varName));
        }
    }
    // method arguments
    ArrayCreation arrCreation = ast.newArrayCreation();
    arrCreation.setType(ast.newArrayType(ast.newSimpleType(ast.newSimpleName("Object"))));
    ArrayInitializer arrInit = ast.newArrayInitializer();
    arrCreation.setInitializer(arrInit);
    callMethodCall.arguments().add(arrCreation);
    // is either an oid or null
    Integer arg;
    for (int i = 0; i < methodArgs.length; i++) {
        arg = (Integer) methodArgs[i];
        if (arg == null) {
            arrInit.expressions().add(ast.newNullLiteral());
        } else {
            arrInit.expressions().add(ast.newSimpleName(this.oidToVarMapping.get(arg)));
        }
    }
    // paramTypes
    arrCreation = ast.newArrayCreation();
    arrCreation.setType(ast.newArrayType(ast.newSimpleType(ast.newSimpleName("Class"))));
    arrInit = ast.newArrayInitializer();
    arrCreation.setInitializer(arrInit);
    callMethodCall.arguments().add(arrCreation);
    org.objectweb.asm.Type type;
    for (int i = 0; i < paramTypes.length; i++) {
        type = paramTypes[i];
        if (type.equals(org.objectweb.asm.Type.BOOLEAN_TYPE)) {
            FieldAccess facc = ast.newFieldAccess();
            facc.setName(ast.newSimpleName("TYPE"));
            facc.setExpression(ast.newSimpleName("Boolean"));
            arrInit.expressions().add(facc);
        } else if (type.equals(org.objectweb.asm.Type.BYTE_TYPE)) {
            FieldAccess facc = ast.newFieldAccess();
            facc.setName(ast.newSimpleName("TYPE"));
            facc.setExpression(ast.newSimpleName("Byte"));
            arrInit.expressions().add(facc);
        } else if (type.equals(org.objectweb.asm.Type.CHAR_TYPE)) {
            FieldAccess facc = ast.newFieldAccess();
            facc.setName(ast.newSimpleName("TYPE"));
            facc.setExpression(ast.newSimpleName("Character"));
            arrInit.expressions().add(facc);
        } else if (type.equals(org.objectweb.asm.Type.DOUBLE_TYPE)) {
            FieldAccess facc = ast.newFieldAccess();
            facc.setName(ast.newSimpleName("TYPE"));
            facc.setExpression(ast.newSimpleName("Double"));
            arrInit.expressions().add(facc);
        } else if (type.equals(org.objectweb.asm.Type.FLOAT_TYPE)) {
            FieldAccess facc = ast.newFieldAccess();
            facc.setName(ast.newSimpleName("TYPE"));
            facc.setExpression(ast.newSimpleName("Float"));
            arrInit.expressions().add(facc);
        } else if (type.equals(org.objectweb.asm.Type.INT_TYPE)) {
            FieldAccess facc = ast.newFieldAccess();
            facc.setName(ast.newSimpleName("TYPE"));
            facc.setExpression(ast.newSimpleName("Integer"));
            arrInit.expressions().add(facc);
        } else if (type.equals(org.objectweb.asm.Type.LONG_TYPE)) {
            FieldAccess facc = ast.newFieldAccess();
            facc.setName(ast.newSimpleName("TYPE"));
            facc.setExpression(ast.newSimpleName("Long"));
            arrInit.expressions().add(facc);
        } else if (type.equals(org.objectweb.asm.Type.SHORT_TYPE)) {
            FieldAccess facc = ast.newFieldAccess();
            facc.setName(ast.newSimpleName("TYPE"));
            facc.setExpression(ast.newSimpleName("Short"));
            arrInit.expressions().add(facc);
        } else {
            final TypeLiteral clazz = ast.newTypeLiteral();
            clazz.setType(ast.newSimpleType(ast.newName(type.getClassName())));
            arrInit.expressions().add(clazz);
        }
    }
    return callMethodCall;
}
Also used : StringLiteral(org.eclipse.jdt.core.dom.StringLiteral) TypeLiteral(org.eclipse.jdt.core.dom.TypeLiteral) ArrayCreation(org.eclipse.jdt.core.dom.ArrayCreation) MethodInvocation(org.eclipse.jdt.core.dom.MethodInvocation) FieldAccess(org.eclipse.jdt.core.dom.FieldAccess) ArrayInitializer(org.eclipse.jdt.core.dom.ArrayInitializer)

Aggregations

StringLiteral (org.eclipse.jdt.core.dom.StringLiteral)74 MethodInvocation (org.eclipse.jdt.core.dom.MethodInvocation)31 Expression (org.eclipse.jdt.core.dom.Expression)22 InfixExpression (org.eclipse.jdt.core.dom.InfixExpression)20 CastExpression (org.eclipse.jdt.core.dom.CastExpression)19 VariableDeclarationFragment (org.eclipse.jdt.core.dom.VariableDeclarationFragment)18 FieldAccess (org.eclipse.jdt.core.dom.FieldAccess)16 ASTNode (org.eclipse.jdt.core.dom.ASTNode)12 SimpleName (org.eclipse.jdt.core.dom.SimpleName)11 VariableDeclarationStatement (org.eclipse.jdt.core.dom.VariableDeclarationStatement)11 CharacterLiteral (org.eclipse.jdt.core.dom.CharacterLiteral)10 ArrayList (java.util.ArrayList)9 AST (org.eclipse.jdt.core.dom.AST)9 BooleanLiteral (org.eclipse.jdt.core.dom.BooleanLiteral)9 ITypeBinding (org.eclipse.jdt.core.dom.ITypeBinding)9 MemberValuePair (org.eclipse.jdt.core.dom.MemberValuePair)9 NumberLiteral (org.eclipse.jdt.core.dom.NumberLiteral)9 ASTRewrite (org.eclipse.jdt.core.dom.rewrite.ASTRewrite)9 ClassInstanceCreation (org.eclipse.jdt.core.dom.ClassInstanceCreation)8 NormalAnnotation (org.eclipse.jdt.core.dom.NormalAnnotation)8