/*
* Copyright 2013 Guidewire Software, Inc.
*/
package gw.internal.gosu.parser;
import gw.lang.reflect.IModifierInfo;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
*/
public class ModifierInfo implements IModifierInfo
{
private int _iModifiers;
private List<IGosuAnnotation> _annotations;
private String _description;
public ModifierInfo( int iModifiers )
{
_iModifiers = iModifiers;
_annotations = Collections.emptyList();
}
public int getModifiers()
{
return _iModifiers;
}
@Override
public void syncAnnotations( IModifierInfo from )
{
if( from instanceof ModifierInfo )
{
ModifierInfo fromAnn = (ModifierInfo)from;
List<IGosuAnnotation> annotations = fromAnn.getAnnotations();
if( getAnnotations().size() == annotations.size() )
{
setAnnotations( annotations );
}
}
}
public void setModifiers( int iModifiers )
{
_iModifiers = iModifiers;
}
public List<IGosuAnnotation> getAnnotations()
{
return _annotations;
}
public void setAnnotations( List<IGosuAnnotation> annotations )
{
_annotations = annotations;
}
public void addModifiers( int iModifiers )
{
_iModifiers |= iModifiers;
}
public void removeModifiers( int iModifiers )
{
_iModifiers &= ~iModifiers;
}
private void addAnnotations( List<IGosuAnnotation> annotations )
{
if( _annotations.isEmpty() )
{
_annotations = new ArrayList<IGosuAnnotation>( annotations.size() );
}
_annotations.addAll( annotations );
}
public void addAll( ModifierInfo modifiers )
{
if( modifiers == null )
{
return;
}
addModifiers( modifiers.getModifiers() );
addAnnotations( modifiers.getAnnotations() );
}
public String getDescription()
{
return _description;
}
public void setDescription( String fullDescription )
{
_description = fullDescription;
}
public void update(ModifierInfo modifiers) {
_annotations = modifiers.getAnnotations();
_description = modifiers.getDescription();
_iModifiers = modifiers.getModifiers();
}
}