/**
* Copyright (c) 2005-2011 by Appcelerator, Inc. All Rights Reserved.
* Licensed under the terms of the Eclipse Public License (EPL).
* Please see the license.txt included with this distribution for details.
* Any modifications to this file must keep this entire header intact.
*/
/*
* Created on 07/09/2005
*/
package com.python.pydev.analysis.additionalinfo;
import java.io.Serializable;
import org.python.pydev.core.ObjectsPool;
public abstract class AbstractInfo implements IInfo, Serializable {
/**
* Changed for 2.1
*/
private static final long serialVersionUID = 3L;
/**
* the name
*/
public final String name;
/**
* This is the path (may be null)
*/
public final String path;
/**
* the name of the module where this function is declared
*/
public final String moduleDeclared;
public AbstractInfo(String name, String moduleDeclared, String path) {
synchronized (ObjectsPool.lock) {
this.name = ObjectsPool.internUnsynched(name);
this.moduleDeclared = ObjectsPool.internUnsynched(moduleDeclared);
this.path = ObjectsPool.internUnsynched(path);
}
}
/**
* Same as the other constructor but does not intern anything.
*/
public AbstractInfo(String name, String moduleDeclared, String path, boolean doNotInternOnThisContstruct) {
this.name = name;
this.moduleDeclared = moduleDeclared;
this.path = path;
}
public String getName() {
return name;
}
public String getDeclaringModuleName() {
return moduleDeclared;
}
public String getPath() {
return path;
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof IInfo)) {
return false;
}
IInfo otherInfo = (IInfo) obj;
if (otherInfo.getType() != getType()) {
return false;
}
if (!otherInfo.getDeclaringModuleName().equals(this.moduleDeclared)) {
return false;
}
if (!otherInfo.getName().equals(this.name)) {
return false;
}
//if one of them is null, the other must also be null...
String otherPath = otherInfo.getPath();
String myPath = getPath();
if ((otherPath == null || myPath == null)) {
if (otherPath != myPath) {
//one of them is not null
return false;
}
//both are null
return true;
}
//they're not null
if (!otherPath.equals(myPath)) {
return false;
}
return true;
}
@Override
public int hashCode() {
return 7 * this.name.hashCode() + this.moduleDeclared.hashCode() * getType();
}
@Override
public String toString() {
return this.name + " (" + this.moduleDeclared + ") - Path:" + getPath();
}
public int compareTo(IInfo o) {
int r = name.compareTo(o.getName());
if (r != 0) {
return r;
}
return moduleDeclared.compareTo(o.getDeclaringModuleName());
}
}