|
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-2003 Sun
* Microsystems, Inc. All Rights Reserved.
*/
/*
* EventSetInheritanceAnalyser.java
*
* Created on 24. leden 2001, 9:14
*/
package org.netbeans.modules.beans;
import java.lang.reflect.*;
import java.text.MessageFormat;
import org.openide.DialogDisplayer;
import org.openide.NotifyDescriptor;
import org.openide.src.*;
/**
*
* @author Petr Suchomel
* @version 0.1
* utility class, try to detect if given ClassElement has parent which contains given event set
*/
class EventSetInheritanceAnalyser extends Object {
/** Used to test if PropertyChangeSupport exists
* @param clazz Class which be tested for PropertyChangeSupport
* @return Class in which PropertySupport exist, or null
*/
static MemberElement detectPropertyChangeSupport(ClassElement clazz){
return findSupport(clazz, "java.beans.PropertyChangeSupport" ); // NOI18N
}
/** Used to test if VetoableChangeSupport exists
* @param clazz Class which be tested for VetoableChangeSupport
* @return Class in which VetoableSupport exist, or null
*/
static MemberElement detectVetoableChangeSupport(ClassElement clazz){
return findSupport(clazz, "java.beans.VetoableChangeSupport" ); // NOI18N
}
/** Used to test if given ChangeSupport exists
* @param clazz Class which be tested for ChangeSupport
* @param supportName full name of ChangeSupport
* @return Class in which ChangeSupport exist, or null
*/
private static MemberElement findSupport(ClassElement clazz, String supportName){
Identifier propertyChangeField = null;
if( clazz == null || clazz.getName().getFullName().equals("java.lang.Object")) //NOI18N
return null; //no super class given or super class is Object
Identifier superClass = clazz.getSuperclass();
if( superClass == null ) //no extends or implements clause
return null;
ClassElement parent = ClassElement.forName( superClass.getFullName(), PatternAnalyser.fileObjectForElement( clazz ) );
if( parent == null )
return parent;
else {
if( propertyChangeField == null )
propertyChangeField = Identifier.create( supportName ); // NOI18N
MethodElement methods[] = parent.getMethods();
for( int i = 0; i < methods.length; i++ ) {
if( !Modifier.isPrivate(methods[i].getModifiers()) && methods[i].getParameters().length == 0 ){
if( !methods[i].getReturn().isPrimitive() && !methods[i].getReturn().isArray() && methods[i].getReturn().getClassName().compareTo(propertyChangeField, false ) ){
return methods[i];
}
}
}
FieldElement fields[] = parent.getFields();
for( int i = 0; i < fields.length; i++ ) {
if( !Modifier.isPrivate(fields[i].getModifiers()) ){
if( !fields[i].getType().isPrimitive() && !fields[i].getType().isArray() && fields[i].getType().getClassName().compareTo(propertyChangeField, false ) ){
return fields[i];
}
}
}
}
return findSupport(parent, supportName); //Try to search recursively
}
static String showInheritanceEventDialog( MemberElement me , String supportTypeName){
String supportName = getInheritanceEventSupportName(me, supportTypeName);
if( me != null ){
Object msgfields[] = new Object[] {me.getDeclaringClass().getName().getFullName(), supportTypeName };
String msg = MessageFormat.format(PatternNode.getString("MSG_Inheritance_Found"), msgfields);
NotifyDescriptor nd = new NotifyDescriptor.Confirmation ( msg , NotifyDescriptor.YES_NO_OPTION );
DialogDisplayer.getDefault().notify( nd );
if( nd.getValue().equals( NotifyDescriptor.YES_OPTION ) ) {
return supportName;
}
}
return null;
}
static String getInheritanceEventSupportName( MemberElement me , String supportTypeName){
ElementFormat format = new ElementFormat("{n}({p})"); // NOI18N
String supportName = null;
if( me != null ){
if( me instanceof MethodElement )
supportName = format.format(((MethodElement)me));
else
supportName = me.getName().getFullName(); //prepare for later usage
}
return supportName;
}
}
|
| ... 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.