|
What this is
Other links
The source code
/*
* Sun Public License Notice
*
* The contents of this file are subject to the Sun Public License
* Version 1.0 (the "License"). You may not use this file except in
* compliance with the License. A copy of the License is available at
* http://www.sun.com/
*
* The Original Code is NetBeans. The Initial Developer of the Original
* Code is Sun Microsystems, Inc. Portions Copyright 1997-2004 Sun
* Microsystems, Inc. All Rights Reserved.
*/
package org.netbeans.modules.refactoring;
import java.lang.reflect.Modifier;
import java.util.*;
import org.netbeans.jmi.javamodel.*;
import org.openide.filesystems.FileObject;
import org.openide.loaders.DataFolder;
import org.openide.loaders.DataObject;
/**
* Methods for validating parameters. Used in different refactorings, e.g.
* rename class, change method signature etc.
*
* @author Dan Prusa
* @author Pavel Flaska
*/
public final class CheckUtils {
/**
* Check if the provided method is overriden by another method.
*
* @param method
* @param name
* @param argTypes
*
* @return method which overrides provided method, otherwise null
*/
public static Collection isOverridden(Method method, String name, List argTypes) {
if (!isVirtual(method))
return null;
Collection res = new HashSet();
ClassDefinition jc = method.getDeclaringClass();
LinkedList subtypes = new LinkedList();
addSubtypes(jc, subtypes);
while (subtypes.size() > 0) {
jc = (ClassDefinition) subtypes.removeFirst();
Method m = getMethod(jc, name, argTypes);
if ((m != null) && isVirtual(m))
res.add(m);
addSubtypes(jc, subtypes);
}
return res;
}
/**
* @param method
* @param name
* @param argTypes
* @param findFinal
* @return
*/
public static Collection overrides(Method method, String name, List argTypes, boolean findFinal) {
Collection res = new HashSet();
if (!isVirtual(method))
return null;
ClassDefinition jc = method.getDeclaringClass ();
LinkedList supertypes = new LinkedList ();
supertypes.addAll (jc.getInterfaces ());
jc = jc.getSuperClass ();
if (jc != null)
supertypes.add (jc);
while (supertypes.size () > 0) {
jc = (ClassDefinition) supertypes.removeFirst ();
Method m = getMethod (jc, name, argTypes);
if ((m != null) && isVirtual(m)) {
if ((m.getModifiers () & Modifier.FINAL) > 0) {
res.add(m);
continue;
} else if (res == null) {
res.add(m);
if (!findFinal)
continue;
}
}
supertypes.addAll (jc.getInterfaces ());
jc = jc.getSuperClass ();
if (jc != null)
supertypes.add (jc);
}
return res;
}
/**
* Checks, if method or constructor has variable arguments paramater.
* If so, returns true, otherwise false.
*
* @param constructor or method to check
* @return true, if callable contain variable argument parameter
*/
public static boolean hasVarArgs(CallableFeature callable) {
for (Iterator it = callable.getParameters().iterator(); it.hasNext(); ) {
if (((Parameter) it.next()).isVarArg()) {
return true;
}
}
return false;
}
private static boolean isVirtual(Feature feature) {
int mod = feature.getModifiers ();
return ((mod & Modifier.PROTECTED) > 0) || ((mod & Modifier.PUBLIC) > 0);
}
public static Constructor getConstructor(ClassDefinition cd, List argTypes) {
return (Constructor) getCallable(cd, null, argTypes);
}
public static Method getMethod (ClassDefinition cd, String name, List argTypes) {
return (Method) getCallable(cd, name, argTypes);
}
public static CallableFeature getCallable(ClassDefinition cd, String name, List argTypes) {
boolean isMethod = name != null;
Iterator iter = cd.getFeatures().iterator();
while (iter.hasNext()) {
Object obj = iter.next ();
if (!(obj instanceof CallableFeature)) {
continue;
}
CallableFeature method = (CallableFeature) obj;
if (isMethod && !name.equals(method.getName())) {
continue;
}
List pars = method.getParameters ();
if (argTypes.size () != pars.size ()) {
continue;
}
Iterator parsIter = pars.iterator ();
Iterator argsIter = argTypes.iterator ();
boolean matches = true;
while (parsIter.hasNext ()) {
String t1 = ((Parameter) parsIter.next()).getType().getName();
String t2 = ((Type) argsIter.next()).getName();
if (!t1.equals (t2)) {
matches = false;
break;
}
} // while
if (matches) {
return method;
}
} // while
return null;
}
public static Field getField (ClassDefinition cd, String fieldName) {
for (Iterator it = cd.getFeatures().iterator(); it.hasNext();) {
Object f = it.next();
if ((f instanceof Field) && fieldName.equals(((Field) f).getName())) {
return (Field) f;
}
}
return null;
}
public static JavaClass getClass (JavaPackage pkg, String clsName) {
for (Iterator it = pkg.getResources().iterator(); it.hasNext();) {
Resource res = (Resource) it.next();
for (Iterator it2 = res.getClassifiers().iterator(); it2.hasNext();) {
Object obj = it2.next();
if (obj instanceof JavaClass) {
if (clsName.equals(((JavaClass) obj).getName())) {
return (JavaClass) obj;
}
}
} // for
} // for
return null;
}
public static boolean isFolderEmpty(FileObject f) {
DataFolder dob = DataFolder.findFolder(f);
DataObject children[] = dob.getChildren();
for (int i = 0; i < children.length; i++) {
if (!(children[i] instanceof DataFolder))
return false;
}
return true;
}
////////////////////////////////////////////////////////////////////////////
// INTERNAL METHODS
////////////////////////////////////////////////////////////////////////////
private static void addSubtypes(ClassDefinition cd, List list) {
if (!(cd instanceof JavaClass)) {
return;
}
JavaClass jc = (JavaClass) cd;
Collection desc = null;
if (jc.isInterface()) {
desc = jc.getImplementors();
} else {
desc = jc.getSubClasses();
}
list.addAll(desc);
}
}
|
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.