/****************************************************************************** * Copyright (c) 2016 Oracle * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Konstantin Komissarchik - initial implementation and ongoing maintenance ******************************************************************************/ package org.eclipse.sapphire.java; /** * @author <a href="mailto:konstantin.komissarchik@oracle.com">Konstantin Komissarchik</a> */ public abstract class JavaQualifiedName implements Comparable<JavaQualifiedName> { private final String name; public JavaQualifiedName( final String name ) { boolean valid = true; final int STATE_EXPECTING_FIRST = 1; final int STATE_EXPECTING_NEXT = 2; int state = STATE_EXPECTING_FIRST; for( int i = 0, n = name.length(); i < n; i++ ) { final char ch = name.charAt( i ); if( state == STATE_EXPECTING_FIRST ) { if( Character.isJavaIdentifierStart( ch ) ) { state = STATE_EXPECTING_NEXT; } else { valid = false; break; } } else { if( ch == '.' ) { state = STATE_EXPECTING_FIRST; } else if( Character.isJavaIdentifierPart( ch ) ) { // Keep state as STATE_EXPECTING_NEXT. } else { valid = false; break; } } } if( state == STATE_EXPECTING_FIRST ) { valid = false; } if( ! valid ) { throw new IllegalArgumentException(); } this.name = name; } @Override public boolean equals( final Object obj ) { if( obj instanceof JavaQualifiedName ) { return this.name.equals( ( (JavaQualifiedName) obj ).name ); } return false; } @Override public int hashCode() { return this.name.hashCode(); } public int compareTo( final JavaQualifiedName obj ) { return this.name.compareTo( obj.name ); } @Override public String toString() { return this.name; } }