/jEdit/tags/jedit-4-3-pre5/bsh/Modifiers.java
Java | 88 lines | 67 code | 10 blank | 11 comment | 12 complexity | b693d460a5e616d70abcfa73b5d142a4 MD5 | raw file
Possible License(s): BSD-3-Clause, AGPL-1.0, Apache-2.0, LGPL-2.0, LGPL-3.0, GPL-2.0, CC-BY-SA-3.0, LGPL-2.1, GPL-3.0, MPL-2.0-no-copyleft-exception, IPL-1.0
- package bsh;
- import java.util.Hashtable;
- /**
-
- @author Pat Niemeyer (pat@pat.net)
- */
- /*
- Note: which of these things should be checked at parse time vs. run time?
- */
- public class Modifiers implements java.io.Serializable
- {
- public static final int CLASS=0, METHOD=1, FIELD=2;
- Hashtable modifiers;
- /**
- @param context is METHOD or FIELD
- */
- public void addModifier( int context, String name )
- {
- if ( modifiers == null )
- modifiers = new Hashtable();
- Object got = modifiers.put( name, Void.TYPE/*arbitrary flag*/ );
- if ( got != null )
- throw new IllegalStateException("Duplicate modifier: "+ name );
- int count = 0;
- if ( hasModifier("private") ) ++count;
- if ( hasModifier("protected") ) ++count;
- if ( hasModifier("public") ) ++count;
- if ( count > 1 )
- throw new IllegalStateException(
- "public/private/protected cannot be used in combination." );
- switch( context )
- {
- case CLASS:
- validateForClass();
- break;
- case METHOD:
- validateForMethod();
- break;
- case FIELD:
- validateForField();
- break;
- }
- }
- public boolean hasModifier( String name )
- {
- if ( modifiers == null )
- modifiers = new Hashtable();
- return modifiers.get(name) != null;
- }
- // could refactor these a bit
- private void validateForMethod()
- {
- insureNo("volatile", "Method");
- insureNo("transient", "Method");
- }
- private void validateForField()
- {
- insureNo("synchronized", "Variable");
- insureNo("native", "Variable");
- insureNo("abstract", "Variable");
- }
- private void validateForClass()
- {
- validateForMethod(); // volatile, transient
- insureNo("native", "Class");
- insureNo("synchronized", "Class");
- }
- private void insureNo( String modifier, String context )
- {
- if ( hasModifier( modifier ) )
- throw new IllegalStateException(
- context + " cannot be declared '"+modifier+"'");
- }
- public String toString()
- {
- return "Modifiers: "+modifiers;
- }
- }