/******************************************************************************* * Copyright (c) 2014 Jeff Martin. * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html * * Contributors: * Jeff Martin - initial API and implementation ******************************************************************************/ package cuchaz.enigma.mapping; import java.io.Serializable; public class ClassEntry implements Entry, Serializable { private static final long serialVersionUID = 4235460580973955811L; private String m_name; public ClassEntry( String className ) { if( className == null ) { throw new IllegalArgumentException( "Class name cannot be null!" ); } if( className.indexOf( '.' ) >= 0 ) { throw new IllegalArgumentException( "Class name must be in JVM format. ie, path/to/package/class$inner : " + className ); } m_name = className; if( isInnerClass() && getInnerClassName().indexOf( '/' ) >= 0 ) { throw new IllegalArgumentException( "Inner class must not have a package: " + className ); } } public ClassEntry( ClassEntry other ) { m_name = other.m_name; } @Override public ClassEntry getClassEntry( ) { return this; } @Override public String getName( ) { return m_name; } @Override public String getClassName( ) { return m_name; } @Override public int hashCode( ) { return m_name.hashCode(); } @Override public boolean equals( Object other ) { if( other instanceof ClassEntry ) { return equals( (ClassEntry)other ); } return false; } public boolean equals( ClassEntry other ) { return m_name.equals( other.m_name ); } @Override public String toString( ) { return m_name; } public boolean isInnerClass( ) { return m_name.lastIndexOf( '$' ) >= 0; } public String getOuterClassName( ) { if( isInnerClass() ) { return m_name.substring( 0, m_name.lastIndexOf( '$' ) ); } return m_name; } public String getInnerClassName( ) { if( !isInnerClass() ) { throw new Error( "This is not an inner class!" ); } return m_name.substring( m_name.lastIndexOf( '$' ) + 1 ); } public ClassEntry getOuterClassEntry( ) { return new ClassEntry( getOuterClassName() ); } public boolean isInDefaultPackage( ) { return m_name.indexOf( '/' ) < 0; } public String getPackageName( ) { int pos = m_name.lastIndexOf( '/' ); if( pos > 0 ) { return m_name.substring( 0, pos ); } return null; } public String getSimpleName( ) { int pos = m_name.lastIndexOf( '/' ); if( pos > 0 ) { return m_name.substring( pos + 1 ); } return m_name; } }