Project: AspectJ
Bug 107713 ClassCastException popup
Reported: 2005-08-23 06:56:58 | Status: resolved fixed

Whenever I change any file and save(auto-compile) I get this in a popup. ClassCastException thrown: org.aspectj.ajdt.internal.compiler.lookup.EclipseSourceType cannot be cast to org.aspectj.weaver.bcel.BcelObjectType This started happening when I wrote these aspects. Before this started happening the IDE showed this line as an error. b.support.firePropertyChange( property, ( oldval == null ) ? oldval : new String(oldval), new String(newval)); ---------------------------------------------------------------- /** * */ package com.blueprint.util.mixin.test; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; import java.lang.reflect.Field; import com.blueprint.util.mixin.test.*; import org.aspectj.lang.Signature; public aspect PropertySupportAspect { PropertyChangeSupport PropertySupport.support = new PropertyChangeSupport(this); public interface PropertySupport{ public void addPropertyChangeListener( PropertyChangeListener listener ); public void addPropertyChangeListener( String propertyName, PropertyChangeListener listener ); public void removePropertyChangeListener( String propertyName, PropertyChangeListener listener ); public void removePropertyChangeListener( PropertyChangeListener listener ); public void hasListeners( String propertyName ); } public void PropertySupport.addPropertyChangeListener (PropertyChangeListener listener){ support.addPropertyChangeListener(listener); } public void PropertySupport.addPropertyChangeListener( String propertyName, PropertyChangeListener listener){ support.addPropertyChangeListener(propertyName, listener); } public void PropertySupport.removePropertyChangeListener( String propertyName, PropertyChangeListener listener) { support.removePropertyChangeListener(propertyName, listener); } public void PropertySupport.removePropertyChangeListener (PropertyChangeListener listener) { support.removePropertyChangeListener(listener); } public void PropertySupport.hasListeners(String propertyName) { support.hasListeners(propertyName); } pointcut callSetter( Bean b ) : call( public void com.blueprint.util.test.Bean.setName( String ) ) && target( b ); void around( Bean b ) : callSetter( b ) { String propertyName = getField( thisJoinPointStaticPart.getSignature() ). getName (); System.out.println( "The property is [" + propertyName + "]" ); String oldValue = b.getName(); proceed( b ); firePropertyChange( b, propertyName, oldValue, b.getName ()); } private Field getField( Signature signature ){ Field field = null; System.out.println( "Getting the field name of [" +signature.getName() + "]" ); try{ String methodName = signature.getName(); field = signature.getDeclaringType(). getDeclaredField( methodName. substring( 3, methodName.length() ). toLowerCase()); field.setAccessible(true); }catch( NoSuchFieldException nsfe ){ nsfe.printStackTrace(); } return field; } void firePropertyChange( Bean b, String property, String oldval, String newval) { System.out.println( "The property is [" + property + "]"); System.out.println( "The old value is [" + oldval + "]"); System.out.println( "The new value is [" + newval + "]"); b.support.firePropertyChange( property, ( oldval == null ) ? oldval : new String(oldval), new String(newval)); } } ---------------------------------------------------------------- import java.io.Serializable; public class Bean implements Serializable{ private String name; public String getName() { return name; } public void setName( String name ) { this.name = name; } } ---------------------------------------------------------------- public aspect BeanSupport { declare parents: Bean implements PropertySupportAspect.PropertySupport; } ----------------------------------------------------------------

Files changed in fix:
weaver/src/org/aspectj/weaver/bcel/BcelWeaver.java weaver/src/org/aspectj/weaver/bcel/BcelWorld.java