WALA/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/DefaultEntrypoint.java

110 lines
3.0 KiB
Java

/*******************************************************************************
* Copyright (c) 2002 - 2006 IBM Corporation.
* 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package com.ibm.wala.ipa.callgraph.impl;
import java.util.Arrays;
import com.ibm.wala.classLoader.IMethod;
import com.ibm.wala.ipa.callgraph.Entrypoint;
import com.ibm.wala.ipa.cha.IClassHierarchy;
import com.ibm.wala.types.MethodReference;
import com.ibm.wala.types.TypeReference;
/**
* An entrypoint whose parameter types are the declared types.
*/
public class DefaultEntrypoint extends Entrypoint {
private final TypeReference[][] paramTypes;
private final IClassHierarchy cha;
public DefaultEntrypoint(IMethod method, IClassHierarchy cha) {
super(method);
if (method == null) {
throw new IllegalArgumentException("method is null");
}
this.cha = cha;
paramTypes = makeParameterTypes(method);
assert paramTypes != null : method.toString();
}
public DefaultEntrypoint(MethodReference method, IClassHierarchy cha) {
super(method, cha);
if (method == null) {
throw new IllegalArgumentException("method is null");
}
this.cha = cha;
paramTypes = makeParameterTypes(getMethod());
assert paramTypes != null : method.toString();
}
protected TypeReference[][] makeParameterTypes(IMethod method) {
TypeReference[][] result = new TypeReference[method.getNumberOfParameters()][];
for (int i = 0; i < result.length; i++) {
result[i] = makeParameterTypes(method, i);
}
return result;
}
protected TypeReference[] makeParameterTypes(IMethod method, int i) {
return new TypeReference[] { method.getParameterType(i) };
}
/*
* @see com.ibm.wala.ipa.callgraph.Entrypoint#getParameterTypes(int)
*/
@Override
public TypeReference[] getParameterTypes(int i) {
return paramTypes[i];
}
public void setParameterTypes(int i, TypeReference[] types) {
paramTypes[i] = types;
}
/*
* @see com.ibm.wala.ipa.callgraph.Entrypoint#getNumberOfParameters()
*/
@Override
public int getNumberOfParameters() {
return paramTypes.length;
}
public IClassHierarchy getCha() {
return cha;
}
@Override
public int hashCode() {
final int prime = 31;
int result = super.hashCode();
result = prime * result + Arrays.hashCode(paramTypes);
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (!super.equals(obj))
return false;
if (getClass() != obj.getClass())
return false;
final DefaultEntrypoint other = (DefaultEntrypoint) obj;
if (!Arrays.equals(paramTypes, other.paramTypes))
return false;
return true;
}
}