blob: 29dead488b776640272b751290ef5014c222e0bc [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 2008 IBM Corporation and others.
* 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 org.eclipse.pde.api.tools.model.tests;
import java.io.File;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import junit.framework.TestCase;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.pde.api.tools.internal.DirectoryClassFileContainer;
import org.eclipse.pde.api.tools.internal.provisional.ClassFileContainerVisitor;
import org.eclipse.pde.api.tools.internal.provisional.IApiComponent;
import org.eclipse.pde.api.tools.internal.provisional.IApiDescription;
import org.eclipse.pde.api.tools.internal.provisional.IApiFilterStore;
import org.eclipse.pde.api.tools.internal.provisional.IApiProfile;
import org.eclipse.pde.api.tools.internal.provisional.IClassFile;
import org.eclipse.pde.api.tools.internal.provisional.IClassFileContainer;
import org.eclipse.pde.api.tools.internal.provisional.IRequiredComponentDescription;
import org.eclipse.pde.api.tools.internal.provisional.descriptors.IMemberDescriptor;
import org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblem;
import org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblemFilter;
import org.eclipse.pde.api.tools.internal.provisional.search.ILocation;
import org.eclipse.pde.api.tools.internal.provisional.search.IReference;
import org.eclipse.pde.api.tools.internal.provisional.search.ReferenceModifiers;
import org.eclipse.pde.api.tools.internal.search.ClassFileScanner;
/**
* This class tests the class file scanner and the class file visitor
*
* @since 1.0.0
*/
public class ClassFileScannerTests extends TestCase {
private static IPath WORKSPACE_ROOT = null;
private static String WORKSPACE_NAME = "test_classes_workspace";
private static IPath ROOT_PATH = null;
private static DirectoryClassFileContainer container = null;
private static ClassFileScanner scanner = null;
private static IApiComponent component = null;
static {
//setup workspace root
WORKSPACE_ROOT = TestSuiteHelper.getPluginDirectoryPath().append(WORKSPACE_NAME);
ROOT_PATH = TestSuiteHelper.getPluginDirectoryPath().append("test-source").append("classes");
new File(WORKSPACE_ROOT.toOSString()).mkdirs();
}
/**
* Returns the set of references collected from the given class file
* @param qualifiedname
* @return the set of references from the specified class file name or <code>null</code>
*/
protected List getRefSet(String qualifiedname) {
try {
IClassFile cfile = container.findClassFile(qualifiedname);
scanner.scan(component, cfile, ReferenceModifiers.MASK_REF_ALL);
return scanner.getReferenceListing();
}
catch(CoreException ce) {
fail(ce.getMessage());
}
return null;
}
/**
* Finds an {@link IReference} within the given set, where a matching ref has the same kind
* and the target of the reference matches the specified qualified name
* @param sourcename the qualified name of the source location
* @param targetname the qualified name of the target location
* @param kind the kind of the {@link IReference}
* @param refs the set of {@link IReference}s to search within
* @return a matching {@link IReference} or <code>null</code>
*/
protected IReference findReference(String sourcename, String targetname, int kind, List refs) {
IReference ref = null;
ILocation target = null;
for(Iterator iter = refs.iterator(); iter.hasNext();) {
ref = (IReference) iter.next();
if(ref.getReferenceKind() == kind) {
if(ref.getSourceLocation().getType().getQualifiedName().equals(sourcename)) {
target = ref.getReferencedLocation();
if(target.getType().getQualifiedName().equals(targetname)) {
return ref;
}
}
}
ref = null;
}
return ref;
}
/**
* Finds a reference to a given target from a given source to a given target member of a specified kind from the given listing
* @param sourcename the qualified name of the location the reference is from
* @param sourceMember the name of the source member making the reference or <code>null</code> if none
* @param targetname the qualified type name being referenced
* @param targetMember name of target member referenced or <code>null</code>
* @param kind the kind of reference. see {@link IReference} for kinds
* @param refs the current listing of references to search within
* @return an {@link IReference} matching the specified criteria or <code>null</code> if none found
*/
protected IReference findMemberReference(String sourcename, String sourceMember, String targetname, String targetMember, int kind, List refs) {
IReference ref = null;
ILocation target = null;
for(Iterator iter = refs.iterator(); iter.hasNext();) {
ref = (IReference) iter.next();
if(ref.getReferenceKind() == kind) {
if(ref.getSourceLocation().getType().getQualifiedName().equals(sourcename)) {
target = ref.getReferencedLocation();
if(target.getType().getQualifiedName().equals(targetname)) {
if (sourceMember != null) {
IMemberDescriptor member = ref.getSourceLocation().getMember();
if(!member.getName().equals(sourceMember)) {
continue;
}
}
if (targetMember != null) {
IMemberDescriptor member = ref.getReferencedLocation().getMember();
if(!member.getName().equals(targetMember)) {
continue;
}
}
return ref;
}
}
}
ref = null;
}
return ref;
}
/**
* Compiles the test-classes workspace
* @throws CoreException
*/
public void testCompileClassWorkspace() throws CoreException {
String[] sourceFilePaths = new String[] {ROOT_PATH.toOSString()};
assertTrue("working directory should compile", TestSuiteHelper.compile(sourceFilePaths, WORKSPACE_ROOT.toOSString(), TestSuiteHelper.COMPILER_OPTIONS));
assertTrue("Test12 should compile to 1.4", TestSuiteHelper.compile(ROOT_PATH.append("Test12.java").toOSString(),
WORKSPACE_ROOT.toOSString(),
new String[] {"-1.4", "-preserveAllLocals", "-nowarn"}));
container = new DirectoryClassFileContainer(WORKSPACE_ROOT.append("classes").toOSString(), null);
scanner = ClassFileScanner.newScanner();
component = new IApiComponent() {
public String[] getPackageNames() throws CoreException {
return null;
}
public IClassFile findClassFile(String qualifiedName) throws CoreException {
return null;
}
public void close() throws CoreException {
}
public void accept(ClassFileContainerVisitor visitor) throws CoreException {
}
public String getVersion() {
return null;
}
public IRequiredComponentDescription[] getRequiredComponents() {
return null;
}
public String getName() {
return "test";
}
public String getLocation() {
return null;
}
public String getId() {
return "test";
}
public String[] getExecutionEnvironments() {
return null;
}
public IClassFileContainer[] getClassFileContainers() {
return null;
}
public IApiDescription getApiDescription() {
return null;
}
public boolean isSystemComponent() {
return false;
}
public void dispose() {
}
public IApiProfile getProfile() {
return null;
}
public void export(Map options, IProgressMonitor monitor) throws CoreException {
}
public IApiFilterStore getFilterStore() {
return null;
}
public IApiProblemFilter newProblemFilter(IApiProblem problem) {
return null;
}
public boolean isSourceComponent() {
return false;
}
public boolean isFragment() {
return false;
}
public boolean hasFragments() {
return false;
}
public IClassFile findClassFile(String qualifiedName, String id) throws CoreException {
return null;
}
public IClassFileContainer[] getClassFileContainers(String id) {
return null;
}
public String getOrigin() {
return this.getId();
}
};
}
/**
* Tests scanning a simple class file that extends nothing, implements nothing and has no members
*/
public void testScanEmptyClass() {
List refs = getRefSet("Test1");
IReference ref = findMemberReference("classes.Test1", null, "java.lang.Object", null, ReferenceModifiers.REF_EXTENDS, refs);
assertTrue("there should be an extends ref to java.lang.Object", ref != null);
ref = findMemberReference("classes.Test1", "<init>", "java.lang.Object", null, ReferenceModifiers.REF_CONSTRUCTORMETHOD, refs);
assertTrue("there should be a ref to java.lang.Object in the default constructor", ref != null);
}
/**
* Test scanning a simple generic class file that extends nothing, implements nothing and has no members
*/
public void testScanEmptyGenericClass() {
List refs = getRefSet("Test2");
IReference ref = findMemberReference("classes.Test2", null, "java.lang.Object", null, ReferenceModifiers.REF_EXTENDS, refs);
assertTrue("There should be an extends ref to java.lang.Object for an empty class", ref != null);
ref = findMemberReference("classes.Test2", "<init>", "java.lang.Object", null, ReferenceModifiers.REF_CONSTRUCTORMETHOD, refs);
assertTrue("there should be a ref to java.lang.Object in the default constructor", ref != null);
ref = findMemberReference("classes.Test2", null, "java.lang.Object", null, ReferenceModifiers.REF_PARAMETERIZED_TYPEDECL, refs);
assertTrue("There should be a parameterized type ref to java.lang.Object", ref != null);
}
/**
* Tests scanning an empty inner class
*/
public void testScanInnerClass() {
List refs = getRefSet("Test3$Inner");
IReference ref = findMemberReference("classes.Test3$Inner", null, "java.lang.Object", null, ReferenceModifiers.REF_EXTENDS, refs);
assertTrue("there should be an extends ref to java.lang.Object", ref != null);
ref = findMemberReference("classes.Test3$Inner", "<init>", "java.lang.Object", null, ReferenceModifiers.REF_CONSTRUCTORMETHOD, refs);
assertTrue("there should be a ref to java.lang.Object in the default constructor of an inner class", ref != null);
}
/**
* Tests scanning a empty static inner class
*/
public void testScanInnerStaticClass() {
List refs = getRefSet("Test3$Inner2");
IReference ref = findReference("classes.Test3$Inner2", "java.lang.Object", ReferenceModifiers.REF_EXTENDS, refs);
assertTrue("there should be an extends ref to java.lang.Object", ref != null);
ref = findReference("classes.Test3$Inner2", "java.lang.Object", ReferenceModifiers.REF_CONSTRUCTORMETHOD, refs);
assertTrue("there should be a ref to java.lang.Object in the default constructor of an inner class", ref != null);
}
/**
* Tests scanning an empty inner class of an empty inner static class
*/
public void testScanInnerStaticInnerClass() {
List refs = getRefSet("Test3$Inner2$Inner3");
IReference ref = findReference("classes.Test3$Inner2$Inner3", "java.lang.Object", ReferenceModifiers.REF_EXTENDS, refs);
assertTrue("there should be an extends ref to java.lang.Object", ref != null);
ref = findReference("classes.Test3$Inner2$Inner3", "java.lang.Object", ReferenceModifiers.REF_CONSTRUCTORMETHOD, refs);
assertTrue("there should be a ref to java.lang.Object in the default constructor of an inner class", ref != null);
}
/**
* Tests scanning an empty outer class
*/
public void testScanOuterClass() {
List refs = getRefSet("Test3Outer");
IReference ref = findReference("classes.Test3Outer", "java.lang.Object", ReferenceModifiers.REF_EXTENDS, refs);
assertTrue("there should be an extends ref to java.lang.Object", ref != null);
ref = findReference("classes.Test3Outer", "java.lang.Object", ReferenceModifiers.REF_CONSTRUCTORMETHOD, refs);
assertTrue("there should be a ref to java.lang.Object in the default constructor of an inner class", ref != null);
}
/**
* Tests scanning an empty class of the inner class of an outer class
*/
public void testScanInnerOuterClass() {
List refs = getRefSet("Test3Outer$Inner");
IReference ref = findReference("classes.Test3Outer$Inner", "java.lang.Object", ReferenceModifiers.REF_EXTENDS, refs);
assertTrue("there should be an extends ref to java.lang.Object", ref != null);
ref = findReference("classes.Test3Outer$Inner", "java.lang.Object", ReferenceModifiers.REF_CONSTRUCTORMETHOD, refs);
assertTrue("there should be a ref to java.lang.Object in the default constructor of an inner class", ref != null);
}
/**
* Tests scanning an inner static generic type
*/
public void testScanInnerGenericClass() {
List refs = getRefSet("Test4$Inner");
IReference ref = findReference("classes.Test4$Inner", "java.lang.Object", ReferenceModifiers.REF_EXTENDS, refs);
assertTrue("There should be an extends ref to java.lang.Object for an inner empty class", ref != null);
ref = findReference("classes.Test4$Inner", "java.lang.Object", ReferenceModifiers.REF_CONSTRUCTORMETHOD, refs);
assertTrue("there should be a ref to java.lang.Object in the default constructor of an inner class", ref != null);
ref = findReference("classes.Test4$Inner", "java.lang.Object", ReferenceModifiers.REF_PARAMETERIZED_TYPEDECL, refs);
assertTrue("there should be a ref to java.lang.Object in the default constructor of an inner class", ref != null);
}
/**
* Tests scanning an inner class of a static class of a generic type
*/
public void testScanInnerStaticInnerGenericClass() {
List refs = getRefSet("Test4$Inner$Inner2");
IReference ref = findReference("classes.Test4$Inner$Inner2", "java.lang.Object", ReferenceModifiers.REF_EXTENDS, refs);
assertTrue("There should be an extends ref to java.lang.Object for an inner empty class", ref != null);
ref = findReference("classes.Test4$Inner$Inner2", "java.lang.Object", ReferenceModifiers.REF_CONSTRUCTORMETHOD, refs);
assertTrue("there should be a ref to java.lang.Object in the default constructor of an inner class", ref != null);
ref = findReference("classes.Test4$Inner$Inner2", "java.lang.Object", ReferenceModifiers.REF_PARAMETERIZED_TYPEDECL, refs);
assertTrue("there should be a ref to java.lang.Object in the default constructor of an inner class", ref != null);
}
/**
* Tests scanning a non-generic class that extends something and implements interfaces
*/
public void testScanClassExtendsImplements() {
List refs = getRefSet("Test5");
IReference ref = findReference("classes.Test5", "java.util.ArrayList", ReferenceModifiers.REF_EXTENDS, refs);
assertTrue("there should be an extends reference to java.util.ArrayList", ref != null);
ref = findReference("classes.Test5", "java.lang.Iterable", ReferenceModifiers.REF_IMPLEMENTS, refs);
assertTrue("there should be an implements reference to java.lang.Iterable", ref != null);
ref = findReference("classes.Test5", "classes.ITest5", ReferenceModifiers.REF_IMPLEMENTS, refs);
assertTrue("there should be an implements reference to classes.ITest5", ref != null);
ref = findReference("classes.Test5", "java.util.ArrayList", ReferenceModifiers.REF_CONSTRUCTORMETHOD, refs);
assertTrue("there should be a ref to java.lang.Object in the default constructor of an inner class", ref != null);
}
/**
* Tests scanning a generic class that extends something and implements interfaces
*/
public void testScanGenericClassExtendsImplements() {
List refs = getRefSet("Test6");
IReference ref = findReference("classes.Test6", "classes.Test6Abstract", ReferenceModifiers.REF_CONSTRUCTORMETHOD, refs);
assertTrue("there should be a REF_CONSTRUCTORMETHOD ref to classes.Test6Abstract", ref != null);
ref = findReference("classes.Test6", "java.lang.Iterable", ReferenceModifiers.REF_IMPLEMENTS, refs);
assertTrue("there should be a REF_IMPLEMENTS ref to java.lang.Iterable", ref != null);
ref = findReference("classes.Test6", "java.util.ArrayList", ReferenceModifiers.REF_PARAMETERIZED_TYPEDECL, refs);
assertTrue("there should be a REF_PARAMETERIZED_TYPEDECL ref to java.util.ArrayList", ref != null);
ref = findReference("classes.Test6", "java.util.Map", ReferenceModifiers.REF_PARAMETERIZED_METHODDECL, refs);
assertTrue("there should be a REF_PARAMETERIZED_METHODDECL ref to java.util.Map", ref != null);
ref = findReference("classes.Test6", "java.lang.String", ReferenceModifiers.REF_PARAMETERIZED_METHODDECL, refs);
assertTrue("there should be a REF_PARAMETERIZED_METHODDECL ref to java.lang.String", ref != null);
ref = findReference("classes.Test6", "java.lang.String", ReferenceModifiers.REF_PARAMETERIZED_TYPEDECL, refs);
assertTrue("there should be a REF_PARAMETERIZED_TYPEDECL ref to java.lang.String", ref != null);
ref = findReference("classes.Test6", "java.util.Iterator", ReferenceModifiers.REF_RETURNTYPE, refs);
assertTrue("there should be a REF_RETURNTYPE ref to java.util.Iterator", ref != null);
ref = findReference("classes.Test6", "java.util.Map", ReferenceModifiers.REF_PARAMETERIZED_TYPEDECL, refs);
assertTrue("there should be a REF_PARAMETERIZED_TYPEDECL ref to java.util.Map", ref != null);
ref = findReference("classes.Test6", "classes.Test6Abstract", ReferenceModifiers.REF_EXTENDS, refs);
assertTrue("there should be a REF_EXTENDS ref to classes.Test6Abstract", ref != null);
}
/**
* Tests a variety of method declarations
*/
public void testScanMethodDecl() {
List refs = getRefSet("Test7");
IReference ref = findMemberReference("classes.Test7", "m1", "java.lang.String", null, ReferenceModifiers.REF_RETURNTYPE, refs);
assertTrue("m1 should have a REF_RETURNTYPE ref to java.lang.String", ref != null);
ref = findMemberReference("classes.Test7", "m1", "java.lang.String", null, ReferenceModifiers.REF_PARAMETER, refs);
assertTrue("m1 should have a REF_PARAMETER ref to java.lang.String", ref != null);
ref = findMemberReference("classes.Test7", "m2", "java.lang.String", null, ReferenceModifiers.REF_RETURNTYPE, refs);
assertTrue("m2 should have a REF_RETURNTYPE ref to java.lang.String", ref != null);
ref = findMemberReference("classes.Test7", "m2", "java.lang.String", null, ReferenceModifiers.REF_PARAMETER, refs);
assertTrue("m2 should have a REF_PARAMETER ref to java.lang.String", ref != null);
ref = findMemberReference("classes.Test7", "m3", "java.lang.String", null, ReferenceModifiers.REF_RETURNTYPE, refs);
assertTrue("m3 should have a REF_RETURNTYPE ref to java.lang.String", ref != null);
ref = findMemberReference("classes.Test7", "m3", "java.lang.String", null, ReferenceModifiers.REF_PARAMETER, refs);
assertTrue("m3 should have a REF_PARAMETER ref to java.lang.String", ref != null);
ref = findMemberReference("classes.Test7", "m7", "java.lang.String", null, ReferenceModifiers.REF_RETURNTYPE, refs);
assertTrue("m7 should have a REF_RETURNTYPE ref to java.lang.String", ref != null);
ref = findMemberReference("classes.Test7", "m7", "java.lang.String", null, ReferenceModifiers.REF_PARAMETER, refs);
assertTrue("m7 should have a REF_PARAMETER ref to java.lang.String", ref != null);
ref = findMemberReference("classes.Test7", "m8", "java.lang.String", null, ReferenceModifiers.REF_RETURNTYPE, refs);
assertTrue("m8 should have a REF_RETURNTYPE ref to java.lang.String", ref != null);
ref = findMemberReference("classes.Test7", "m8", "java.lang.String", null, ReferenceModifiers.REF_PARAMETER, refs);
assertTrue("m8 should have a REF_PARAMETER ref to java.lang.String", ref != null);
ref = findMemberReference("classes.Test7", "m9", "java.lang.String", null, ReferenceModifiers.REF_RETURNTYPE, refs);
assertTrue("m9 should have a REF_RETURNTYPE ref to java.lang.String", ref != null);
ref = findMemberReference("classes.Test7", "m9", "java.lang.String", null, ReferenceModifiers.REF_PARAMETER, refs);
assertTrue("m9 should have a REF_PARAMETER ref to java.lang.String", ref != null);
}
/**
* Tests a variety of method declarations with array types in them
*/
public void testScanMethodDeclArrayTypes() {
List refs = getRefSet("Test7");
IReference ref = findMemberReference("classes.Test7", "m4", "java.lang.Integer", null, ReferenceModifiers.REF_RETURNTYPE, refs);
assertTrue("m4 should have a REF_RETURNTYPE ref to java.lang.Integer", ref != null);
ref = findMemberReference("classes.Test7", "m4", "java.lang.Double", null, ReferenceModifiers.REF_PARAMETER, refs);
assertTrue("m4 should have a REF_PARAMETER ref to java.lang.Double", ref != null);
ref = findMemberReference("classes.Test7", "m5", "java.lang.Integer", null, ReferenceModifiers.REF_RETURNTYPE, refs);
assertTrue("m5 should have a REF_RETURNTYPE ref to java.lang.Integer", ref != null);
ref = findMemberReference("classes.Test7", "m5", "java.lang.Double", null, ReferenceModifiers.REF_PARAMETER, refs);
assertTrue("m5 should have a REF_PARAMETER ref to java.lang.Double", ref != null);
ref = findMemberReference("classes.Test7", "m6", "java.lang.Integer", null, ReferenceModifiers.REF_RETURNTYPE, refs);
assertTrue("m6 should have a REF_RETURNTYPE ref to java.lang.Integer", ref != null);
ref = findMemberReference("classes.Test7", "m6", "java.lang.Double", null, ReferenceModifiers.REF_PARAMETER, refs);
assertTrue("m6 should have a REF_PARAMETER ref to java.lang.Double", ref != null);
ref = findMemberReference("classes.Test7", "m10", "java.lang.Integer", null, ReferenceModifiers.REF_RETURNTYPE, refs);
assertTrue("m10 should have a REF_RETURNTYPE ref to java.lang.Integer", ref != null);
ref = findMemberReference("classes.Test7", "m10", "java.lang.Double", null, ReferenceModifiers.REF_PARAMETER, refs);
assertTrue("m10 should have a REF_PARAMETER ref to java.lang.Double", ref != null);
ref = findMemberReference("classes.Test7", "m11", "java.lang.Integer", null, ReferenceModifiers.REF_RETURNTYPE, refs);
assertTrue("m11 should have a REF_RETURNTYPE ref to java.lang.Integer", ref != null);
ref = findMemberReference("classes.Test7", "m11", "java.lang.Double", null, ReferenceModifiers.REF_PARAMETER, refs);
assertTrue("m11 should have a REF_PARAMETER ref to java.lang.Double", ref != null);
ref = findMemberReference("classes.Test7", "m12", "java.lang.Integer", null, ReferenceModifiers.REF_RETURNTYPE, refs);
assertTrue("m12 should have a REF_RETURNTYPE ref to java.lang.Integer", ref != null);
ref = findMemberReference("classes.Test7", "m12", "java.lang.Double", null, ReferenceModifiers.REF_PARAMETER, refs);
assertTrue("m12 should have a REF_PARAMETER ref to java.lang.Double", ref != null);
}
/**
* Tests a variety of method declarations with generic types
*/
public void testScanMethodDeclGenerics() {
List refs = getRefSet("Test8");
IReference ref = findMemberReference("classes.Test8", "m1", "java.util.ArrayList", null, ReferenceModifiers.REF_RETURNTYPE, refs);
assertTrue("there should be a REF_RETURNTYPE ref for m1", ref != null);
ref = findMemberReference("classes.Test8", "m1", "java.util.Map", null, ReferenceModifiers.REF_PARAMETER, refs);
assertTrue("there should be a REF_PARAMETER ref for m1", ref != null);
ref = findMemberReference("classes.Test8", "m1", "java.lang.Double", null, ReferenceModifiers.REF_PARAMETER, refs);
assertTrue("there should be a REF_PARAMETER ref for m1 for java.lang.Double", ref != null);
ref = findMemberReference("classes.Test8", "m1", "java.lang.Integer", null, ReferenceModifiers.REF_PARAMETERIZED_METHODDECL, refs);
assertTrue("there should be a REF_PARAMETERIZED_METHODDECL ref for m1 for java.lang.Integer", ref != null);
ref = findMemberReference("classes.Test8", "m1", "java.lang.String", null, ReferenceModifiers.REF_PARAMETERIZED_METHODDECL, refs);
assertTrue("there should be a REF_PARAMETERIZED_METHODDECL ref for m1 for java.lang.String", ref != null);
ref = findMemberReference("classes.Test8", "m1", "classes.Test8Outer", null, ReferenceModifiers.REF_PARAMETERIZED_METHODDECL, refs);
assertTrue("there should be a REF_PARAMETERIZED_METHODDECL ref for m1 for classes.Test8Outer", ref != null);
ref = findMemberReference("classes.Test8", "m2", "java.util.ArrayList", null, ReferenceModifiers.REF_RETURNTYPE, refs);
assertTrue("there should be a REF_RETURNTYPE ref for m2", ref != null);
ref = findMemberReference("classes.Test8", "m2", "java.util.Map", null, ReferenceModifiers.REF_PARAMETER, refs);
assertTrue("there should be a REF_PARAMETER ref for m2", ref != null);
ref = findMemberReference("classes.Test8", "m2", "java.lang.Double", null, ReferenceModifiers.REF_PARAMETER, refs);
assertTrue("there should be a REF_PARAMETER ref for m2 for java.lang.Double", ref != null);
ref = findMemberReference("classes.Test8", "m2", "java.lang.Integer", null, ReferenceModifiers.REF_PARAMETERIZED_METHODDECL, refs);
assertTrue("there should be a REF_PARAMETERIZED_METHODDECL ref for m2 for java.lang.Integer", ref != null);
ref = findMemberReference("classes.Test8", "m2", "java.lang.String", null, ReferenceModifiers.REF_PARAMETERIZED_METHODDECL, refs);
assertTrue("there should be a REF_PARAMETERIZED_METHODDECL ref for m2 for java.lang.String", ref != null);
ref = findMemberReference("classes.Test8", "m2", "classes.Test8Outer", null, ReferenceModifiers.REF_PARAMETERIZED_METHODDECL, refs);
assertTrue("there should be a REF_PARAMETERIZED_METHODDECL ref for m2 for classes.Test8Outer", ref != null);
}
/**
* Tests a variety of field declarations
*/
public void testScanFieldDecl() {
List refs = getRefSet("Test9");
IReference ref = findMemberReference("classes.Test9", "strs", "java.lang.String", null, ReferenceModifiers.REF_FIELDDECL, refs);
assertTrue("there should be a REF_FIELDDECL ref for java.lang.String", ref != null);
ref = findMemberReference("classes.Test9", "list", "java.util.ArrayList", null, ReferenceModifiers.REF_FIELDDECL, refs);
assertTrue("there should be a REF_FIELDDECL ref for java.util.ArrayList", ref != null);
ref = findMemberReference("classes.Test9", "object", "java.lang.Object", null, ReferenceModifiers.REF_FIELDDECL, refs);
assertTrue("there should be a REF_FIELDDECL ref for java.lang.Object", ref != null);
//TODO does not collect ref to Runnable in Test9 as there is no direct ref to Runnable in that classfile
}
/**
* Tests a variety of arrays that have been declared as local variables in methods
*/
public void testScanLocalVariableArrays() {
List refs = getRefSet("Test10");
IReference ref = findMemberReference("classes.Test10", null, "java.lang.String", null, ReferenceModifiers.REF_ARRAYALLOC, refs);
assertTrue("there should be a REF_ARRAYALLOC ref to java.lang.String", ref != null);
ref = findMemberReference("classes.Test10", null, "java.lang.Object", null, ReferenceModifiers.REF_ARRAYALLOC, refs);
assertTrue("there should be a REF_ARRAYALLOC ref to java.lang.Object", ref != null);
ref = findMemberReference("classes.Test10", null, "java.lang.Integer", null, ReferenceModifiers.REF_ARRAYALLOC, refs);
assertTrue("there should be a REF_ARRAYALLOC ref to java.lang.Integer", ref != null);
ref = findMemberReference("classes.Test10", null, "java.lang.Double", null, ReferenceModifiers.REF_ARRAYALLOC, refs);
assertTrue("there should be a REF_ARRAYALLOC ref to java.lang.Double", ref != null);
}
/**
* Tests a variety of LDC ops that load things like Integer.class onto the stack
*/
public void testScanConstantPoolAccess() {
List refs = getRefSet("Test11");
IReference ref = findMemberReference("classes.Test11", null, "java.lang.Integer", null, ReferenceModifiers.REF_CONSTANTPOOL, refs);
assertTrue("there should be a REF_CONSTANTPOOL ref to java.lang.Integer", ref != null);
ref = findMemberReference("classes.Test11", null, "java.lang.Double", null, ReferenceModifiers.REF_CONSTANTPOOL, refs);
assertTrue("there should be a REF_CONSTANTPOOL ref to java.lang.Integer", ref != null);
ref = findMemberReference("classes.Test11", null, "java.lang.String", null, ReferenceModifiers.REF_CONSTANTPOOL, refs);
assertTrue("there should be a REF_CONSTANTPOOL ref to java.lang.Integer", ref != null);
}
/**
* Tests a variety of LDC ops that load things like Integer.class onto the stack. This method uses a
* 1.4 code level class, and checks that the LDC ref is actually processed via a Class.forName static method call
*/
public void testScanConstantPoolAccess1_4() {
List refs = getRefSet("Test12");
IReference ref = findMemberReference("classes.Test12", null, "java.lang.Integer", null, ReferenceModifiers.REF_CONSTANTPOOL, refs);
assertTrue("there should be a REF_CONSTANTPOOL ref to java.lang.Integer", ref != null);
ref = findMemberReference("classes.Test12", null, "java.lang.Double", null, ReferenceModifiers.REF_CONSTANTPOOL, refs);
assertTrue("there should be a REF_CONSTANTPOOL ref to java.lang.Integer", ref != null);
ref = findMemberReference("classes.Test12", null, "java.lang.String", null, ReferenceModifiers.REF_CONSTANTPOOL, refs);
assertTrue("there should be a REF_CONSTANTPOOL ref to java.lang.Integer", ref != null);
}
/**
* Tests a variety of method calls
*/
public void testScanMethodCalls() {
List refs = getRefSet("Test13");
IReference ref = findMemberReference("classes.Test13", "m1", "classes.Test13", "m2", ReferenceModifiers.REF_VIRTUALMETHOD, refs);
assertTrue("the should be a REF_VIRTUALMETHOD ref to m2 from classes.Test13", ref != null);
ref = findMemberReference("classes.Test13", "m1", "classes.Test13", "m3", ReferenceModifiers.REF_VIRTUALMETHOD, refs);
assertTrue("the should be a REF_VIRTUALMETHOD ref to m3 from classes.Test13", ref != null);
ref = findMemberReference("classes.Test13", "m4", "classes.Test13A", "getInteger", ReferenceModifiers.REF_VIRTUALMETHOD, refs);
assertTrue("the should be a REF_VIRTUALMETHOD ref to getInteger from classes.Test13A", ref != null);
ref = findMemberReference("classes.Test13", "m3", "classes.Test13A", "doSomething", ReferenceModifiers.REF_STATICMETHOD, refs);
assertTrue("the should be a REF_STATICMETHOD ref to doSomething from classes.Test13A", ref != null);
}
/**
* Cleans up after the tests are done. This must be the last test run
*/
public void testCleanup() {
// remove workspace root
assertTrue(TestSuiteHelper.delete(new File(WORKSPACE_ROOT.toOSString())));
}
}