2014-09-05 09:49:31 +00:00
package de.dhbwstuttgart.parser ;
2014-08-28 16:42:54 +00:00
import java.util.Vector ;
2014-09-02 08:33:54 +00:00
import de.dhbwstuttgart.syntaxtree.type.RefType ;
2014-08-28 16:42:54 +00:00
/ * *
* Stellt den Namen einer Java Klasse dar .
* Dieser kann auch den Packagenamen mit beinhalten : java . util . Vector
*
* @author janulrich
*
* /
public class JavaClassName {
private String name ;
private PackageName packageName ;
public JavaClassName ( String name ) {
2014-10-08 17:00:17 +00:00
if ( name = = null ) throw new NullPointerException ( ) ;
2014-08-28 16:42:54 +00:00
String [ ] names = name . split ( " [.] " ) ;
boolean match = true ;
if ( names . length = = 1 ) {
2014-09-02 16:49:19 +00:00
//packageName = new PackageName();
2014-08-28 16:42:54 +00:00
this . name = name ;
} else {
name = names [ names . length - 1 ] ;
Vector < String > packageNames = new Vector < String > ( ) ;
for ( int i = 0 ; i < names . length - 1 ; i + + ) {
packageNames . add ( names [ i ] ) ;
}
packageName = new PackageName ( packageNames ) ;
this . name = names [ names . length - 1 ] ;
}
}
//Auto-generated hashCode:
@Override
public int hashCode ( ) {
final int prime = 31 ;
int result = 1 ;
result = prime * result + ( ( name = = null ) ? 0 : name . hashCode ( ) ) ;
2014-09-02 16:49:19 +00:00
//result = prime * result
// + ((packageName == null) ? 0 : packageName.hashCode()); //PackageName does not infect hashCode
2014-08-28 16:42:54 +00:00
return result ;
}
/ * *
* Namen sind nur gleich , wenn bei den beiden zu vergleichenden JavaClassNames auch das Package angegeben ist
* /
@Override
public boolean equals ( Object obj ) {
if ( this = = obj )
return true ;
if ( obj = = null )
return false ;
if ( obj instanceof String )
2014-09-09 12:32:53 +00:00
return this . toString ( ) . equals ( obj ) | | ( this . name ! = null & & this . name . equals ( obj ) ) ; //Auch mit Strings als Klassennamen kompatibel TODO: sollte bald obsolet sein
2014-08-28 16:42:54 +00:00
if ( getClass ( ) ! = obj . getClass ( ) )
return false ;
JavaClassName other = ( JavaClassName ) obj ;
if ( name = = null ) {
if ( other . name ! = null )
return false ;
} else if ( ! name . equals ( other . name ) )
return false ;
2014-09-02 16:49:19 +00:00
if ( packageName ! = null & & other . packageName ! = null ) {
if ( ! packageName . equals ( other . packageName ) )
return false ; //Spezialfall, nicht beide Typen m<> ssen eindeutig mit Packagenamen angegeben werden
}
2014-08-28 16:42:54 +00:00
return true ;
}
@Override
public String toString ( ) {
2014-09-02 16:49:19 +00:00
return ( packageName ! = null ? packageName . toString ( ) : " " ) + name ;
2014-08-28 16:42:54 +00:00
}
}
class PackageName {
Vector < String > names = new Vector < String > ( ) ;
public PackageName ( Vector < String > packageNames ) {
names = packageNames ;
}
public PackageName ( ) {
//Do nothing
}
@Override
public int hashCode ( ) {
final int prime = 31 ;
int result = 1 ;
result = prime * result + ( ( names = = null ) ? 0 : names . hashCode ( ) ) ;
return result ;
}
@Override
public boolean equals ( Object obj ) {
if ( this = = obj )
return true ;
if ( obj = = null )
return false ;
if ( getClass ( ) ! = obj . getClass ( ) )
return false ;
PackageName other = ( PackageName ) obj ;
if ( names = = null ) {
if ( other . names ! = null )
return false ;
} else if ( ! names . equals ( other . names ) )
return false ;
return true ;
}
@Override
public String toString ( ) {
String ret = " " ;
if ( names = = null ) return " " ;
for ( String n : names ) ret + = n + " . " ;
return ret ;
}
}