Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[aspectj-users] Problems with AJDT 1.6.4 RC

Hi,

I am just migrating a larger code base from eclipse 3.2 (actually RSA
7.0) with AJDT 1.5.3 to eclipse 3.4 (actually RSA 7.5). I want to
benefit from the performance improvements made AJDT 1.6.x.

I started of by installing a pure eclipse 3.4 SDK with AJDT 1.6.3 (which
is the official release right now). When I made only a small change in a
Java file that would previously cause a long workspace build performance
very much improved. Then I installed AJDT 1.6.3 into RSA 7.5. The
performance improvement was the same as with the eclipse SDK.

Since I want to use the auto format on save feature of eclipse 3.4, I
decided to install AJDT 1.6.4 dev build since it does not try to auto
format AJ files (which would not work).

So, now I have RSA 7.5.1 installed with AJDT 1.6.4.20090304121956 and I
notice strange things while looking at the AJDT trace. Performance also
got much worse.

I am getting errors of the mode checker. This is taken from a full
workspace build after cleaning all:

7:20:9 Compiler configuration for project
com.dcx.ivkmds.common.businessobjects.persistent doesn't know previous
state, so assuming EVERYTHING has changed.
7:20:9
========================================================================
===================
7:20:9 Build kind = FULLBUILD
7:20:9 Project=com.dcx.ivkmds.common.businessobjects.persistent, kind of
build requested=Full AspectJ compilation
7:20:9 Builder: Tidied output folder(s), removed class files and derived
resources
7:20:15 Timer event: 6031ms: Pre compile
7:20:16 Compiler configuration for project
com.dcx.ivkmds.common.businessobjects.persistent has been read by
compiler.  Resetting.
7:20:16      Configuration was [PROJECTSOURCEFILES_CHANGED,
JAVAOPTIONS_CHANGED, ASPECTPATH_CHANGED, CLASSPATH_CHANGED,
INPATH_CHANGED, NONSTANDARDOPTIONS_CHANGED, OUTJAR_CHANGED,
PROJECTSOURCERESOURCES_CHANGED, OUTPUTDESTINATIONS_CHANGED,
INJARS_CHANGED]



7:20:16 Resetting list of modified source files.  Was null
7:20:16 Preparing for build: not going to be incremental because no
successful previous full build
7:20:19 Timer event: 3172ms: Time to first compiled message
7:20:19 Timer event: 3187ms: Time to first woven message
7:20:26 AspectJ reports build successful, build was: FULL
7:20:27 AJDE Callback: finish. Was full build: true
7:20:27 Timer event: 11469ms: Total time spent in AJDE
7:20:33 Timer event: 6062ms: Refresh after build
7:20:33 Types affected during build = 319
7:20:35 Crosscutting model sanity checked.  The following problems
found:
7:20:35 Java Element does not exist:
=com.dcx.ivkmds.common.businessobjects.persistent/src<com.dcx.ivkmds.com
mon.bo.persistent.ps.property{CategoryHasProperty.java[CategoryHasProper
ty~setValueGathering~QValueGatheringEnum$ValueGathering;
	It is the source relationship of
=com.dcx.ivkmds.common.businessobjects.persistent/src<com.dcx.ivkmds.com
mon.bo.persistent.ps.property{CategoryHasProperty.java[CategoryHasProper
ty~setValueGathering~QValueGatheringEnum$ValueGathering; --advised by-->
=com.dcx.ivkmds.common.businessobjects.persistent/binaries<com.dcx.ivkmd
s.fwk.common.ass.persist.internal(Aggregates.class}Aggregates&around!2
	This may not actually be a problem if compiling broken code or
advising static initializers.

Lots of messages like this follow. 

Now, I do not understand what the error message actually is telling me.
I think it says that
com.dcx.ivkmds.fwk.common.ass.persist.internal(Aggregates.class}Aggregat
es advises
.dcx.ivkmds.common.bo.persistent.ps.property{CategoryHasProperty.java[Ca
tegoryHasProperty~setValueGathering~QValueGatheringEnum$ValueGathering
and that target class cannot be found. The model checker is looking in
com.dcx.ivkmds.common.businessobjects.persistent/src for that target. 

The strange thing is that the file CategoryHasProperty.java exists where
it should.

I also don't understand why
com.dcx.ivkmds.common.businessobjects.persistent/binaries is said to be
the path where the advice lives. Actually it is in project (and path)
com.dcx.ivkmds.fwk.common.ass.persist.internal. The
com.dcx.ivkmds.fwk.common.ass.persist.internal/bin folder is linked to
the com.dcx.ivkmds.common.businessobjects.persistent project (and path)
because it is configured as aspect path.


Does this actually tell me that the advice was not applied? Shouldn't
this result in some kind of compile error?

I think that the inner class it is complaining about may not be
supported.

The signature of the method being complained about is this:

public void setValueGathering(ValueGatheringEnum.ValueGathering
valueGathering) {

whereas ValueGatheringEnum looks like this:

public class ValueGatheringEnum extends BaseEnumerationEntity {
	public static final class ValueGathering extends Enum {
		public static final String _ESTIMATED_VALUE_LITERAL =
"estimatedValue";

		public static final int _ESTIMATED_VALUE_VALUE = 3;

		public static final String _NOT_RELEVANT_LITERAL =
"notRelevant";

		public static final int _NOT_RELEVANT_VALUE = 0;

		public static final String _ON_REQUEST_LITERAL =
"onRequest";

		public static final int _ON_REQUEST_VALUE = 1;

		public static final String _REAL_VALUE_LITERAL =
"realValue";

		public static final int _REAL_VALUE_VALUE = 2;

		public static final ValueGathering ESTIMATED_VALUE = new
ValueGathering(_ESTIMATED_VALUE_LITERAL, _ESTIMATED_VALUE_VALUE);

		public static final ValueGathering NOT_RELEVANT = new
ValueGathering(_NOT_RELEVANT_LITERAL, _NOT_RELEVANT_VALUE);

		public static final ValueGathering ON_REQUEST = new
ValueGathering(_ON_REQUEST_LITERAL, _ON_REQUEST_VALUE);

		public static final ValueGathering REAL_VALUE = new
ValueGathering(_REAL_VALUE_LITERAL, _REAL_VALUE_VALUE);

		public static ValueGathering getEnum(int value) {
			return (ValueGathering)
getEnum(ValueGathering.class, value);
		}

		public static ValueGathering getEnum(Integer integer) {
			if (integer == null) {
				throw new
IllegalArgumentException("integer must not be null");
			}
			return getEnum(integer.intValue());
		}

		public static ValueGathering getEnum(String literal) {
			return (ValueGathering)
getEnum(ValueGathering.class, literal);
		}

		public static List getEnumList() {
			return getEnumList(ValueGathering.class);
		}

		public static Map getEnumMap() {
			return getEnumMap(ValueGathering.class);
		}

		public static Iterator iterator() {
			return iterator(ValueGathering.class);
		}

		private ValueGathering(String name, int value) {
			super(name, value);
		}
	}



Thanks for your support,

Thomas





Back to the top