Package org.jboss.forge.roaster.model.ast

Source Code of org.jboss.forge.roaster.model.ast.ModifierAccessor

/*
* Copyright 2012 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Eclipse Public License version 1.0, available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package org.jboss.forge.roaster.model.ast;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import org.eclipse.jdt.core.dom.ASTNode;
import org.eclipse.jdt.core.dom.BodyDeclaration;
import org.eclipse.jdt.core.dom.Modifier;
import org.eclipse.jdt.core.dom.Modifier.ModifierKeyword;

public class ModifierAccessor
{
   public boolean hasModifier(ASTNode body, final ModifierKeyword modifier)
   {
      boolean result = false;
      List<Modifier> modifiers = getModifiers(body);
      for (Modifier m : modifiers)
      {
         if (m.getKeyword() == modifier)
         {
            result = true;
         }
      }
      return result;
   }

   private List<Modifier> getModifiers(ASTNode body)
   {
      List<Modifier> result = new ArrayList<Modifier>();
      List<?> modifiers = getInternalModifiers(body);
      for (Object m : modifiers)
      {
         if (m instanceof Modifier)
         {
            Modifier mod = (Modifier) m;
            result.add(mod);
         }
      }
      return result;
   }

   public List<Modifier> clearVisibility(ASTNode body)
   {
      List<Modifier> modifiers = getModifiers(body);

      List<Modifier> toBeRemoved = new ArrayList<Modifier>();
      for (Modifier modifier : modifiers)
      {
         if (modifier.isPrivate() || modifier.isProtected() || modifier.isPublic())
         {
            toBeRemoved.add(modifier);
         }
      }

      getInternalModifiers(body).removeAll(toBeRemoved);
      return modifiers;
   }

   public void addModifier(ASTNode body, ModifierKeyword keyword)
   {
    if (!hasModifier(body, keyword)) {
      getInternalModifiers(body).add(body.getAST().newModifier(keyword));
    }
   }

   public void removeModifier(ASTNode body, ModifierKeyword keyword)
   {
      List<Modifier> modifiers = getModifiers(body);

      List<Modifier> toBeRemoved = new ArrayList<Modifier>();
      for (Modifier modifier : modifiers)
      {
         if (modifier.getKeyword().equals(keyword))
         {
            toBeRemoved.add(modifier);
         }
      }

      getInternalModifiers(body).removeAll(toBeRemoved);
   }

   @SuppressWarnings("unchecked")
   private List<Modifier> getInternalModifiers(final ASTNode body)
   {
      if (body instanceof BodyDeclaration)
      {
         return ((BodyDeclaration) body).modifiers();
      }
      else
      {
         return Collections.emptyList();
      }
   }
}
TOP

Related Classes of org.jboss.forge.roaster.model.ast.ModifierAccessor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.