Example usage for org.eclipse.jdt.core.dom Modifier isFinal

List of usage examples for org.eclipse.jdt.core.dom Modifier isFinal

Introduction

In this page you can find the example usage for org.eclipse.jdt.core.dom Modifier isFinal.

Prototype

public static boolean isFinal(int flags) 

Source Link

Document

Returns whether the given flags includes the "final" modifier.

Usage

From source file:ca.mcgill.cs.swevo.ppa.PPAASTUtil.java

License:Open Source License

/**
 * //from   www  .  j  a  v a2 s  . c  om
 * @param mi
 * @return True if this is a final method from Object
 */
private static boolean checkObjectFinalMethod(MethodInvocation mi) {
    boolean isObjectFinal = false;
    IMethodBinding mb = mi.resolveMethodBinding();

    if (mb != null) {
        isObjectFinal = Modifier.isFinal(mb.getModifiers())
                && mb.getDeclaringClass().getQualifiedName().equals(OBJECT_FQN);
    }

    return isObjectFinal;
}

From source file:coloredide.utils.CopiedNaiveASTFlattener.java

License:Open Source License

/**
 * Appends the text representation of the given modifier flags, followed by
 * a single space. Used for JLS2 modifiers.
 * //w w w.  jav  a2  s.  c o  m
 * @param modifiers
 *            the modifier flags
 */
void printModifiers(int modifiers) {
    if (Modifier.isPublic(modifiers)) {
        this.buffer.append("public ");//$NON-NLS-1$
    }
    if (Modifier.isProtected(modifiers)) {
        this.buffer.append("protected ");//$NON-NLS-1$
    }
    if (Modifier.isPrivate(modifiers)) {
        this.buffer.append("private ");//$NON-NLS-1$
    }
    if (Modifier.isStatic(modifiers)) {
        this.buffer.append("static ");//$NON-NLS-1$
    }
    if (Modifier.isAbstract(modifiers)) {
        this.buffer.append("abstract ");//$NON-NLS-1$
    }
    if (Modifier.isFinal(modifiers)) {
        this.buffer.append("final ");//$NON-NLS-1$
    }
    if (Modifier.isSynchronized(modifiers)) {
        this.buffer.append("synchronized ");//$NON-NLS-1$
    }
    if (Modifier.isVolatile(modifiers)) {
        this.buffer.append("volatile ");//$NON-NLS-1$
    }
    if (Modifier.isNative(modifiers)) {
        this.buffer.append("native ");//$NON-NLS-1$
    }
    if (Modifier.isStrictfp(modifiers)) {
        this.buffer.append("strictfp ");//$NON-NLS-1$
    }
    if (Modifier.isTransient(modifiers)) {
        this.buffer.append("transient ");//$NON-NLS-1$
    }
}

From source file:com.crispico.flower.mp.metamodel.codesyncjava.algorithm.JavaSyncUtils.java

License:Open Source License

/**
 * Updates java code according to the model value for abstract or static modifiers
 * /*from  ww  w .  jav  a  2s  . com*/
 * @author Luiza
 * @param bd <code>{@link BodyDeclaration}</code> for a class, method or field.
 * @param isTrue value for the modifier
 * @param modifier flag indicating the modifier to update.
 * This should be one of the predefined flags:  
 * <ul>
 *    <li>{@link #MODIFIER_ABSTRACT}</li>
 *    <li>{@link #MODIFIER_STATIC}</li>
 * </ul>
 * @flowerModelElementId _zVs8cJiOEd6aNMdNFvR5WQ
 */
@SuppressWarnings("unchecked")
public static void updateModifierFromModelToJavaClass(BodyDeclaration bd, boolean isTrue, String modifier) {

    ModifierKeyword javaModifierFlag = null;
    ModifierKeyword modelModifierFlag = null;
    boolean isForAbstractModif = modifier.equals(MODIFIER_ABSTRACT);
    boolean isForStaticModif = modifier.equals(MODIFIER_STATIC);
    boolean isForFinalModif = modifier.equals(MODIFIER_FINAL);

    if (isForAbstractModif) {
        javaModifierFlag = Modifier.isAbstract(bd.getModifiers()) ? ModifierKeyword.ABSTRACT_KEYWORD : null;
        modelModifierFlag = isTrue ? ModifierKeyword.ABSTRACT_KEYWORD : null;
    } else if (isForStaticModif) {
        javaModifierFlag = Modifier.isStatic(bd.getModifiers()) ? ModifierKeyword.STATIC_KEYWORD : null;
        modelModifierFlag = isTrue ? ModifierKeyword.STATIC_KEYWORD : null;
    } else if (isForFinalModif) {
        javaModifierFlag = Modifier.isFinal(bd.getModifiers()) ? ModifierKeyword.FINAL_KEYWORD : null;
        modelModifierFlag = isTrue ? ModifierKeyword.FINAL_KEYWORD : null;
    } else
        throw new IllegalArgumentException(
                "updateModifierFromModelToJavaClass - can't update java code for modifier " + modifier);

    //if there are differences between the model and the java file
    if (modelModifierFlag != javaModifierFlag) {
        //if this modifier has been set before find it and remove it
        if (javaModifierFlag != null) {
            //Modifier toRemove = null;
            /* 
             * we use bd.modifiers() instead of bd.getModifiers(), which computes a bit-wise integer consisting in all the modifier values 
             * because it also iterates over the modifiers and method bd.setModifiers(modifiers) is deprecated
             */
            for (Iterator<Modifier> it = bd.modifiers().iterator(); it.hasNext();) {
                Modifier modif = it.next();
                if (isForAbstractModif && modif.isAbstract()) {
                    it.remove();
                    break;
                } else if (isForStaticModif && modif.isStatic()) {
                    it.remove();
                    break;
                } else if (isForFinalModif && modif.isFinal()) {
                    it.remove();
                    break;
                }
            }
            //bd.modifiers().remove(toRemove);
        }

        // add the new modifier value if changes have been made in the model
        if (modelModifierFlag != null) {
            Modifier newModif = bd.getAST().newModifier(modelModifierFlag);
            bd.modifiers().add(newModif);
        }
    }

}

From source file:com.drgarbage.ast.ASTGraphUtil.java

License:Apache License

private static void appendModifiers(int mod, StringBuffer buf) {
    if (Modifier.isAbstract(mod)) {
        buf.append(Modifier.ModifierKeyword.ABSTRACT_KEYWORD.toString());
        buf.append(' ');
    }// w  w  w  .  j  a va 2  s  .c  o  m

    if (Modifier.isFinal(mod)) {
        buf.append(Modifier.ModifierKeyword.FINAL_KEYWORD.toString());
        buf.append(' ');
    }

    if (Modifier.isNative(mod)) {
        buf.append(Modifier.ModifierKeyword.NATIVE_KEYWORD.toString());
        buf.append(' ');
    }

    if (Modifier.isPrivate(mod)) {
        buf.append(Modifier.ModifierKeyword.PRIVATE_KEYWORD.toString());
        buf.append(' ');
    }

    if (Modifier.isProtected(mod)) {
        buf.append(Modifier.ModifierKeyword.PROTECTED_KEYWORD.toString());
        buf.append(' ');
    }

    if (Modifier.isPublic(mod)) {
        buf.append(Modifier.ModifierKeyword.PUBLIC_KEYWORD.toString());
        buf.append(' ');
    }

    if (Modifier.isStatic(mod)) {
        buf.append(Modifier.ModifierKeyword.STATIC_KEYWORD.toString());
        buf.append(' ');
    }

    if (Modifier.isStrictfp(mod)) {
        buf.append(Modifier.ModifierKeyword.STRICTFP_KEYWORD.toString());
        buf.append(' ');
    }

    if (Modifier.isSynchronized(mod)) {
        buf.append(Modifier.ModifierKeyword.SYNCHRONIZED_KEYWORD.toString());
        buf.append(' ');
    }

    if (Modifier.isTransient(mod)) {
        buf.append(Modifier.ModifierKeyword.TRANSIENT_KEYWORD.toString());
        buf.append(' ');
    }

    if (Modifier.isVolatile(mod)) {
        buf.append(Modifier.ModifierKeyword.VOLATILE_KEYWORD.toString());
        buf.append(' ');
    }
}

From source file:com.google.devtools.j2cpp.translate.AnonymousClassConverter.java

License:Open Source License

/**
 * Returns the set of read-only variables (parameters and local variables)
 * defined in the scope of the method enclosing a specified anonymous
 * class declaration./*from w w w.  jav  a 2s. co m*/
 */
private Set<IVariableBinding> getMethodVars(AnonymousClassDeclaration node) {
    final Set<IVariableBinding> methodVars = Sets.newHashSet();
    MethodDeclaration method = getEnclosingMethod(node);
    if (method != null) {
        @SuppressWarnings("unchecked")
        List<SingleVariableDeclaration> params = method.parameters(); // safe by definition
        for (SingleVariableDeclaration param : params) {
            IVariableBinding var = Types.getVariableBinding(param);
            assert var != null;
            if (Modifier.isFinal(var.getModifiers())) {
                methodVars.add(var);
            }
        }

        ASTNode lastNode = node;
        do {
            getMethodVars(method, lastNode, methodVars);
            lastNode = method;
            method = getEnclosingMethod(lastNode);
        } while (method != null);
    }
    return methodVars;
}

From source file:com.google.devtools.j2cpp.translate.AnonymousClassConverter.java

License:Open Source License

private void getMethodVars(MethodDeclaration method, ASTNode node, final Set<IVariableBinding> methodVars) {
    @SuppressWarnings("unchecked")
    List<Statement> statements = method.getBody().statements(); // safe by definition
    Statement enclosingStatement = getEnclosingStatement(node);
    for (Statement stmt : statements) {
        if (stmt == enclosingStatement) {
            // Local variables declared after this statement cannot be
            // referenced by the anonymous class.
            break;
        }//  w ww . j a  v  a  2 s  . co  m
        stmt.accept(new ASTVisitor() {
            @Override
            public boolean visit(VariableDeclarationStatement node) {
                if (Modifier.isFinal(node.getModifiers())) {
                    @SuppressWarnings("unchecked") // safe by definition
                    List<VariableDeclarationFragment> localVars = node.fragments();
                    for (VariableDeclarationFragment localVar : localVars) {
                        IVariableBinding var = Types.getVariableBinding(localVar);
                        assert var != null;
                        methodVars.add(var);
                    }
                }
                return true;
            }

            @Override
            public boolean visit(SingleVariableDeclaration node) {
                IVariableBinding var = Types.getVariableBinding(node);
                assert var != null;
                if (Modifier.isFinal(var.getModifiers())) {
                    methodVars.add(var);
                }
                return true;
            }

            @Override
            public boolean visit(AnonymousClassDeclaration node) {
                return false;
            }
        });
    }
}

From source file:com.google.devtools.j2cpp.translate.DeadCodeEliminator.java

License:Open Source License

/**
 * Initializes final instance fields in classes whose constructors have all
 * been deleted.  This must take place after dead methods are removed.
 *//*w ww .  j  a v  a2s  .  co  m*/
private void initializeFinalFields(List<BodyDeclaration> body) {
    Set<VariableDeclarationFragment> finalVars = Sets.newHashSet();
    for (BodyDeclaration declaration : body) {
        // If there's any non-generated constructor remaining, it must initialize
        // all final fields.
        if (declaration instanceof MethodDeclaration) {
            MethodDeclaration method = (MethodDeclaration) declaration;
            if (!generatedMethods.contains(method) && method.isConstructor()) {
                return;
            }
        }
        // Collect final fields that lack initializers.
        if (declaration instanceof FieldDeclaration) {
            FieldDeclaration field = (FieldDeclaration) declaration;
            int modifiers = field.getModifiers();
            if (!Modifier.isStatic(modifiers) && Modifier.isFinal(modifiers)) {
                @SuppressWarnings("unchecked")
                List<VariableDeclarationFragment> fragments = field.fragments();
                for (VariableDeclarationFragment fragment : fragments) {
                    if (fragment.getInitializer() == null) {
                        finalVars.add(fragment);
                    }
                }
            }
        }
    }
    // If we get this far, there are no explicit constructors left.
    for (VariableDeclarationFragment var : finalVars) {
        if (var.getInitializer() == null) {
            addFieldInitializer(var);
        }
    }
}

From source file:com.google.devtools.j2cpp.translate.JavaToIOSMethodTranslator.java

License:Open Source License

private void loadTargetMethods(ITypeBinding clazz) {
    for (IMethodBinding method : clazz.getDeclaredMethods()) {
        if (method.isConstructor() && Types.isJavaObjectType(method.getDeclaringClass())) {
            continue; // No mapping needed for new Object();
        }// w ww .j ava 2s. com
        if (method.getName().equals("clone")) {
            continue;
        }
        // track all non-final public, protected and package-private methods
        int mods = method.getModifiers();
        if (!Modifier.isPrivate(mods)) {
            if (!Modifier.isFinal(mods)) {
                overridableMethods.add(method);
            }
            mappedMethods.add(method);
            addDescription(method);
        }
    }
}

From source file:com.google.devtools.j2cpp.translate.Rewriter.java

License:Open Source License

@Override
public boolean visit(FieldDeclaration node) {
    int mods = node.getModifiers();
    if (Modifier.isStatic(mods)) {
        ASTNode parent = node.getParent();
        @SuppressWarnings("unchecked")
        List<BodyDeclaration> classMembers = parent instanceof AbstractTypeDeclaration
                ? ((AbstractTypeDeclaration) parent).bodyDeclarations()
                : ((AnonymousClassDeclaration) parent).bodyDeclarations(); // safe by specification
        int indexOfNewMember = classMembers.indexOf(node) + 1;

        @SuppressWarnings("unchecked")
        List<VariableDeclarationFragment> fragments = node.fragments(); // safe by specification
        for (VariableDeclarationFragment var : fragments) {
            IVariableBinding binding = Types.getVariableBinding(var);
            if (Types.isPrimitiveConstant(binding) && Modifier.isPrivate(binding.getModifiers())) {
                // Don't define accessors for private constants, since they can be
                // directly referenced.
                continue;
            }//w w w  .j a v  a 2s  . c o  m

            // rename varName to varName_, per Obj-C style guide
            SimpleName oldName = var.getName();
            ITypeBinding type = ((AbstractTypeDeclaration) node.getParent()).resolveBinding();
            String varName = NameTable.getStaticVarQualifiedName(type, oldName.getIdentifier());
            NameTable.rename(binding, varName);
            ITypeBinding typeBinding = binding.getType();
            var.setExtraDimensions(0); // if array, type was corrected above

            // add accessor(s)
            if (needsReader(var, classMembers)) {
                classMembers.add(indexOfNewMember++, makeStaticReader(var, mods));
            }
            if (!Modifier.isFinal(node.getModifiers()) && needsWriter(var, classMembers)) {
                classMembers.add(indexOfNewMember++,
                        makeStaticWriter(var, oldName.getIdentifier(), node.getType(), mods));
            }

            // move non-constant initialization to init block
            Expression initializer = var.getInitializer();
            if (initializer != null && initializer.resolveConstantExpressionValue() == null) {
                var.setInitializer(null);

                AST ast = var.getAST();
                SimpleName newName = ast.newSimpleName(varName);
                Types.addBinding(newName, binding);
                Assignment assign = ast.newAssignment();
                assign.setLeftHandSide(newName);
                Expression newInit = NodeCopier.copySubtree(ast, initializer);
                assign.setRightHandSide(newInit);
                Types.addBinding(assign, typeBinding);

                Block initBlock = ast.newBlock();
                @SuppressWarnings("unchecked")
                List<Statement> stmts = initBlock.statements(); // safe by definition
                stmts.add(ast.newExpressionStatement(assign));
                Initializer staticInitializer = ast.newInitializer();
                staticInitializer.setBody(initBlock);
                @SuppressWarnings("unchecked")
                List<IExtendedModifier> initMods = staticInitializer.modifiers(); // safe by definition
                initMods.add(ast.newModifier(ModifierKeyword.STATIC_KEYWORD));
                classMembers.add(indexOfNewMember++, staticInitializer);
            }
        }
    }
    return true;
}

From source file:com.google.devtools.j2cpp.translate.Rewriter.java

License:Open Source License

private MethodDeclaration createInterfaceMethodBody(AST ast, ITypeBinding typeBinding,
        IMethodBinding interfaceMethod) {
    IMethodBinding methodBinding = new IOSMethodBinding(interfaceMethod.getName(), interfaceMethod,
            typeBinding);//from   w ww  .j a  v a2  s .co m

    MethodDeclaration method = ast.newMethodDeclaration();
    Types.addBinding(method, methodBinding);
    method.setReturnType2(Types.makeType(interfaceMethod.getReturnType()));

    SimpleName methodName = ast.newSimpleName(interfaceMethod.getName());
    Types.addBinding(methodName, methodBinding);
    method.setName(methodName);

    @SuppressWarnings("unchecked")
    List<Modifier> modifiers = method.modifiers();
    modifiers.add(ast.newModifier(ModifierKeyword.PUBLIC_KEYWORD));

    @SuppressWarnings("unchecked")
    List<SingleVariableDeclaration> parameters = method.parameters(); // safe by design
    ITypeBinding[] parameterTypes = interfaceMethod.getParameterTypes();
    for (int i = 0; i < parameterTypes.length; i++) {
        ITypeBinding paramType = parameterTypes[i];
        String paramName = "param" + i;
        SingleVariableDeclaration param = ast.newSingleVariableDeclaration();
        IVariableBinding paramBinding = IOSVariableBinding.newParameter(paramName, i, paramType, methodBinding,
                paramType.getDeclaringClass(), Modifier.isFinal(paramType.getModifiers()));
        Types.addBinding(param, paramBinding);
        param.setName(ast.newSimpleName(paramName));
        Types.addBinding(param.getName(), paramBinding);
        param.setType(Types.makeType(paramType));
        parameters.add(param);
    }
    Symbols.scanAST(method);
    return method;
}