⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 eventsetdescriptor.java

📁 this gcc-g++-3.3.1.tar.gz is a source file of gcc, you can learn more about gcc through this codes f
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
			throw new IntrospectionException("Listener remove method throws exceptions.");		}	}	/** Create a new EventSetDescriptor.	 ** This form of constructor allows you to explicitly say which methods do what, and	 ** no reflection is done by the EventSetDescriptor.  The methods are, however,	 ** checked to ensure that they follow the rules set forth at the top of the class.	 ** @param eventSetName the programmatic name of the event set, generally starting	 ** with a lowercase letter (i.e. fooManChu instead of FooManChu).	 ** @param listenerType the class containing the listenerMethods.	 ** @param listenerMethodDescriptors the event firing methods.	 ** @param addListenerMethod the add listener method.	 ** @param removeListenerMethod the remove listener method.	 ** @exception IntrospectionException if the listenerType is not an EventListener,	 **                                   or any of the methods are invalid.	 **/	public EventSetDescriptor(String eventSetName,				   Class listenerType,				   MethodDescriptor[] listenerMethodDescriptors,				   Method addListenerMethod,				   Method removeListenerMethod) throws IntrospectionException {		setName(eventSetName);		if(!java.util.EventListener.class.isAssignableFrom(listenerType)) {			throw new IntrospectionException("Listener type is not an EventListener.");		}		this.listenerMethodDescriptors = listenerMethodDescriptors;		this.listenerMethods = new Method[listenerMethodDescriptors.length];		for(int i=0;i<this.listenerMethodDescriptors.length;i++) {			this.listenerMethods[i] = this.listenerMethodDescriptors[i].getMethod();		}		this.addListenerMethod = addListenerMethod;		this.removeListenerMethod = removeListenerMethod;		this.listenerType = listenerType;		checkMethods();		checkAddListenerUnicast();		if(this.removeListenerMethod.getExceptionTypes().length > 0) {			throw new IntrospectionException("Listener remove method throws exceptions.");		}	}	/** Get the class that contains the event firing methods. **/	public Class getListenerType() {		return listenerType;	}	/** Get the event firing methods. **/	public Method[] getListenerMethods() {		return listenerMethods;	}	/** Get the event firing methods as MethodDescriptors. **/	public MethodDescriptor[] getListenerMethodDescriptors() {		if(listenerMethodDescriptors == null) {			listenerMethodDescriptors = new MethodDescriptor[listenerMethods.length];			for(int i=0;i<listenerMethods.length;i++) {				listenerMethodDescriptors[i] = new MethodDescriptor(listenerMethods[i]);			}		}		return listenerMethodDescriptors;	}	/** Get the add listener method. **/	public Method getAddListenerMethod() {		return addListenerMethod;	}	/** Get the remove listener method. **/	public Method getRemoveListenerMethod() {		return removeListenerMethod;	}	/** Set whether or not multiple listeners may be added.	 ** @param unicast whether or not multiple listeners may be added.	 **/	public void setUnicast(boolean unicast) {		this.unicast = unicast;	}	/** Get whether or not multiple listeners may be added.  (Defaults to false.) **/	public boolean isUnicast() {		return unicast;	}	/** Set whether or not this is in the default event set.	 ** @param inDefaultEventSet whether this is in the default event set.	 **/	public void setInDefaultEventSet(boolean inDefaultEventSet) {		this.inDefaultEventSet = inDefaultEventSet;	}	/** Get whether or not this is in the default event set.  (Defaults to true.)**/	public boolean isInDefaultEventSet() {		return inDefaultEventSet;	}	private void checkAddListenerUnicast() throws IntrospectionException {		Class[] addListenerExceptions = this.addListenerMethod.getExceptionTypes();		if(addListenerExceptions.length > 1) {			throw new IntrospectionException("Listener add method throws too many exceptions.");		} else if(addListenerExceptions.length == 1			  && !java.util.TooManyListenersException.class.isAssignableFrom(addListenerExceptions[0])) {			throw new IntrospectionException("Listener add method throws too many exceptions.");		}	}	private void checkMethods() throws IntrospectionException {		if(!addListenerMethod.getDeclaringClass().isAssignableFrom(removeListenerMethod.getDeclaringClass())		   && !removeListenerMethod.getDeclaringClass().isAssignableFrom(addListenerMethod.getDeclaringClass())) {			throw new IntrospectionException("add and remove listener methods do not come from the same class.  This is bad.");		}		if(!addListenerMethod.getReturnType().equals(java.lang.Void.TYPE)                   || addListenerMethod.getParameterTypes().length != 1		   || !listenerType.equals(addListenerMethod.getParameterTypes()[0])		   || !Modifier.isPublic(addListenerMethod.getModifiers())) {			throw new IntrospectionException("Add Listener Method invalid.");		}		if(!removeListenerMethod.getReturnType().equals(java.lang.Void.TYPE)                   || removeListenerMethod.getParameterTypes().length != 1		   || !listenerType.equals(removeListenerMethod.getParameterTypes()[0])		   || removeListenerMethod.getExceptionTypes().length > 0		   || !Modifier.isPublic(removeListenerMethod.getModifiers())) {			throw new IntrospectionException("Remove Listener Method invalid.");		}		for(int i=0;i<listenerMethods.length;i++) {			if(!listenerMethods[i].getReturnType().equals(java.lang.Void.TYPE)			   || Modifier.isPrivate(listenerMethods[i].getModifiers())) {				throw new IntrospectionException("Event Method " + listenerMethods[i].getName() + " non-void or private.");			}			if(!listenerMethods[i].getDeclaringClass().isAssignableFrom(listenerType)) {				throw new IntrospectionException("Event Method " + listenerMethods[i].getName() + " not from class " + listenerType.getName());			}		}	}	private void findMethods(Class eventSourceClass,		Class listenerType,		String listenerMethodNames[],		String addListenerMethodName,		String removeListenerMethodName,		String absurdEventClassCheckName) throws IntrospectionException {		/* Find add listener method and remove listener method. */		Class[] listenerArgList = new Class[1];		listenerArgList[0] = listenerType;		try {			this.addListenerMethod = eventSourceClass.getMethod(addListenerMethodName,listenerArgList);		} catch(SecurityException E) {			throw new IntrospectionException("SecurityException trying to access method " + addListenerMethodName + ".");		} catch(NoSuchMethodException E) {			throw new IntrospectionException("Could not find method " + addListenerMethodName + ".");		}		if(this.addListenerMethod == null || !this.addListenerMethod.getReturnType().equals(java.lang.Void.TYPE)) {			throw new IntrospectionException("Add listener method does not exist, is not public, or is not void.");		}		try {			this.removeListenerMethod = eventSourceClass.getMethod(removeListenerMethodName,listenerArgList);		} catch(SecurityException E) {			throw new IntrospectionException("SecurityException trying to access method " + removeListenerMethodName + ".");		} catch(NoSuchMethodException E) {			throw new IntrospectionException("Could not find method " + removeListenerMethodName + ".");		}		if(this.removeListenerMethod == null || !this.removeListenerMethod.getReturnType().equals(java.lang.Void.TYPE)) {			throw new IntrospectionException("Remove listener method does not exist, is not public, or is not void.");		}		/* Find the listener methods. */		Method[] methods;		try {			methods = ClassHelper.getAllMethods(listenerType);		} catch(SecurityException E) {			throw new IntrospectionException("Security: You cannot access fields in this class.");		}		Vector chosenMethods = new Vector();		boolean[] listenerMethodFound = new boolean[listenerMethodNames.length];		for(int i=0;i<methods.length;i++) {			if(Modifier.isPrivate(methods[i].getModifiers())) {				continue;			}			Method currentMethod = methods[i];			Class retval = currentMethod.getReturnType();			if(retval.equals(java.lang.Void.TYPE)) {				for(int j=0;j<listenerMethodNames.length;j++) {					if(currentMethod.getName().equals(listenerMethodNames[j])					   && (absurdEventClassCheckName == null					       || (currentMethod.getParameterTypes().length == 1					           && ((currentMethod.getParameterTypes()[0]).getName().equals(absurdEventClassCheckName)					               || (currentMethod.getParameterTypes()[0]).getName().endsWith("."+absurdEventClassCheckName)					              )					          )					      )					  ) {						chosenMethods.addElement(currentMethod);						listenerMethodFound[j] = true;					}				}			}		}		/* Make sure we found all the methods we were looking for. */		for(int i=0;i<listenerMethodFound.length;i++) {			if(!listenerMethodFound[i]) {				throw new IntrospectionException("Could not find event method " + listenerMethodNames[i]);			}		}		/* Now that we've chosen the listener methods we want, store them. */		this.listenerMethods = new Method[chosenMethods.size()];		for(int i=0;i<chosenMethods.size();i++) {			this.listenerMethods[i] = (Method)chosenMethods.elementAt(i);		}	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -