/*******************************************************************************
* Copyright (c) 2015 Jeff Martin.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Lesser General Public
* License v3.0 which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/lgpl.html
*
* Contributors:
* Jeff Martin - initial API and implementation
******************************************************************************/
package cuchaz.enigma.mapping;
import java.io.Serializable;
import cuchaz.enigma.Util;
public class ConstructorEntry implements BehaviorEntry, Serializable
{
private static final long serialVersionUID = -868346075317366758L;
private ClassEntry m_classEntry;
private Signature m_signature;
public ConstructorEntry(ClassEntry classEntry)
{
this(classEntry, null);
}
public ConstructorEntry(ClassEntry classEntry, Signature signature)
{
if(classEntry == null)
throw new IllegalArgumentException("Class cannot be null!");
m_classEntry = classEntry;
m_signature = signature;
}
public ConstructorEntry(ConstructorEntry other)
{
m_classEntry = new ClassEntry(other.m_classEntry);
m_signature = other.m_signature;
}
public ConstructorEntry(ConstructorEntry other, String newClassName)
{
m_classEntry = new ClassEntry(newClassName);
m_signature = other.m_signature;
}
@Override
public ClassEntry getClassEntry()
{
return m_classEntry;
}
@Override
public String getName()
{
if(isStatic())
return "<clinit>";
return "<init>";
}
public boolean isStatic()
{
return m_signature == null;
}
@Override
public Signature getSignature()
{
return m_signature;
}
@Override
public String getClassName()
{
return m_classEntry.getName();
}
@Override
public ConstructorEntry cloneToNewClass(ClassEntry classEntry)
{
return new ConstructorEntry(this, classEntry.getName());
}
@Override
public int hashCode()
{
if(isStatic())
return Util.combineHashesOrdered(m_classEntry);
else
return Util.combineHashesOrdered(m_classEntry, m_signature);
}
@Override
public boolean equals(Object other)
{
if(other instanceof ConstructorEntry)
return equals((ConstructorEntry)other);
return false;
}
public boolean equals(ConstructorEntry other)
{
if(isStatic() != other.isStatic())
return false;
if(isStatic())
return m_classEntry.equals(other.m_classEntry);
else
return m_classEntry.equals(other.m_classEntry)
&& m_signature.equals(other.m_signature);
}
@Override
public String toString()
{
if(isStatic())
return m_classEntry.getName() + "." + getName();
else
return m_classEntry.getName() + "." + getName() + m_signature;
}
}