400
401
declareDeclaration = new DeclareAtTypeDeclaration(this.ast);
401
402
((DeclareAtTypeDeclaration) declareDeclaration).setPatternNode(convert(da.getTypePattern()));
402
403
SimpleName annotationName = new SimpleName(this.ast);
404
annotationName.setSourceRange(da.getAnnotationSourceStart(),
405
da.getAnnotationSourceEnd() - da.getAnnotationSourceStart());
403
406
annotationName.internalSetIdentifier(da.getAnnotationString());
404
407
((DeclareAtTypeDeclaration) declareDeclaration).setAnnotationName(annotationName);
405
408
} else if (da.getKind().equals(DeclareAnnotation.AT_CONSTRUCTOR)) {
406
409
declareDeclaration = new DeclareAtConstructorDeclaration(this.ast);
407
((DeclareAtConstructorDeclaration) declareDeclaration).setPatternNode(convert(da.getSignaturePattern()));
410
((DeclareAtConstructorDeclaration) declareDeclaration).setPatternNode(convertSignature(da.getSignaturePattern()));
408
411
SimpleName annotationName = new SimpleName(this.ast);
412
annotationName.setSourceRange(da.getAnnotationSourceStart(),
413
da.getAnnotationSourceEnd() - da.getAnnotationSourceStart());
409
414
annotationName.internalSetIdentifier(da.getAnnotationString());
410
415
((DeclareAtConstructorDeclaration) declareDeclaration).setAnnotationName(annotationName);
411
416
} else if (da.getKind().equals(DeclareAnnotation.AT_FIELD)) {
412
417
declareDeclaration = new DeclareAtFieldDeclaration(this.ast);
413
((DeclareAtFieldDeclaration) declareDeclaration).setPatternNode(convert(da.getSignaturePattern()));
418
((DeclareAtFieldDeclaration) declareDeclaration).setPatternNode(convertSignature(da.getSignaturePattern()));
414
419
SimpleName annotationName = new SimpleName(this.ast);
420
annotationName.setSourceRange(da.getAnnotationSourceStart(),
421
da.getAnnotationSourceEnd() - da.getAnnotationSourceStart());
415
422
annotationName.internalSetIdentifier(da.getAnnotationString());
416
423
((DeclareAtFieldDeclaration) declareDeclaration).setAnnotationName(annotationName);
417
424
} else if (da.getKind().equals(DeclareAnnotation.AT_METHOD)) {
418
425
declareDeclaration = new DeclareAtMethodDeclaration(this.ast);
419
((DeclareAtMethodDeclaration) declareDeclaration).setPatternNode(convert(da.getSignaturePattern()));
426
((DeclareAtMethodDeclaration) declareDeclaration).setPatternNode(convertSignature(da.getSignaturePattern()));
420
427
SimpleName annotationName = new SimpleName(this.ast);
428
annotationName.setSourceRange(da.getAnnotationSourceStart(),
429
da.getAnnotationSourceEnd() - da.getAnnotationSourceStart());
421
430
annotationName.internalSetIdentifier(da.getAnnotationString());
422
431
((DeclareAtMethodDeclaration) declareDeclaration).setAnnotationName(annotationName);
631
public org.aspectj.org.eclipse.jdt.core.dom.PatternNode convert(PatternNode patternNode) {
632
// this is a stub to be used until dom classes have been created for
633
// the different weaver TypePattern's
643
public org.aspectj.org.eclipse.jdt.core.dom.PatternNode convert(
644
PatternNode patternNode) {
634
645
org.aspectj.org.eclipse.jdt.core.dom.PatternNode pNode = null;
635
646
if (patternNode instanceof TypePattern) {
636
TypePattern typePat = (TypePattern) patternNode;
637
pNode = new DefaultTypePattern(this.ast, typePat.toString());
638
pNode.setSourceRange(typePat.getStart(), (typePat.getEnd() - typePat.getStart() + 1));
647
TypePattern weaverTypePattern = (TypePattern) patternNode;
648
return convert(weaverTypePattern);
639
650
} else if (patternNode instanceof SignaturePattern) {
640
651
SignaturePattern sigPat = (SignaturePattern) patternNode;
641
652
pNode = new org.aspectj.org.eclipse.jdt.core.dom.SignaturePattern(this.ast, sigPat.toString());
659
public org.aspectj.org.eclipse.jdt.core.dom.TypePattern convert(
660
TypePattern weaverNode) {
662
// First check if the node is a Java type (WildType, ExactType,
664
org.aspectj.org.eclipse.jdt.core.dom.TypePattern domNode = createIdentifierTypePattern(weaverNode);
666
if (domNode == null) {
667
if (weaverNode instanceof org.aspectj.weaver.patterns.EllipsisTypePattern) {
668
domNode = new org.aspectj.org.eclipse.jdt.core.dom.EllipsisTypePattern(
670
} else if (weaverNode instanceof org.aspectj.weaver.patterns.NoTypePattern) {
671
domNode = new org.aspectj.org.eclipse.jdt.core.dom.NoTypePattern(
673
} else if (weaverNode instanceof org.aspectj.weaver.patterns.AnyTypePattern) {
674
domNode = new org.aspectj.org.eclipse.jdt.core.dom.AnyTypePattern(
676
} else if (weaverNode instanceof org.aspectj.weaver.patterns.AnyWithAnnotationTypePattern) {
677
// For now construct the node with just the annotation
679
String annotationExpression = ((org.aspectj.weaver.patterns.AnyWithAnnotationTypePattern) weaverNode)
681
domNode = new org.aspectj.org.eclipse.jdt.core.dom.AnyWithAnnotationTypePattern(
682
ast, annotationExpression);
684
} else if (weaverNode instanceof org.aspectj.weaver.patterns.OrTypePattern) {
685
org.aspectj.weaver.patterns.OrTypePattern compilerOrNode = (org.aspectj.weaver.patterns.OrTypePattern) weaverNode;
686
domNode = new OrTypePattern(this.ast,
687
convert(compilerOrNode.getLeft()),
688
convert(compilerOrNode.getRight()));
689
} else if (weaverNode instanceof org.aspectj.weaver.patterns.AndTypePattern) {
690
org.aspectj.weaver.patterns.AndTypePattern compilerAndType = (org.aspectj.weaver.patterns.AndTypePattern) weaverNode;
691
domNode = new org.aspectj.org.eclipse.jdt.core.dom.AndTypePattern(
692
this.ast, convert(compilerAndType.getLeft()),
693
convert(compilerAndType.getRight()));
694
} else if (weaverNode instanceof org.aspectj.weaver.patterns.NotTypePattern) {
695
//NOTE: the source range for not type patterns is the source range of the negated type pattern
696
// EXCLUDING the "!" character. Example: !A. If A starts at 1, the source starting point for the
697
// nottypepattern is 1, NOT 0.
698
TypePattern negatedTypePattern = ((org.aspectj.weaver.patterns.NotTypePattern) weaverNode)
699
.getNegatedPattern();
700
org.aspectj.org.eclipse.jdt.core.dom.TypePattern negatedDomTypePattern = convert(negatedTypePattern);
701
domNode = new org.aspectj.org.eclipse.jdt.core.dom.NotTypePattern(
702
ast, negatedDomTypePattern);
703
} else if (weaverNode instanceof org.aspectj.weaver.patterns.TypeCategoryTypePattern) {
704
org.aspectj.weaver.patterns.TypeCategoryTypePattern typeCategoryWeaverNode = (org.aspectj.weaver.patterns.TypeCategoryTypePattern) weaverNode;
705
domNode = new org.aspectj.org.eclipse.jdt.core.dom.TypeCategoryTypePattern(
706
ast, typeCategoryWeaverNode.getTypeCategory());
708
} else if (weaverNode instanceof org.aspectj.weaver.patterns.HasMemberTypePattern) {
709
ISignaturePattern weaverSignature = ((org.aspectj.weaver.patterns.HasMemberTypePattern) weaverNode)
710
.getSignaturePattern();
711
org.aspectj.org.eclipse.jdt.core.dom.SignaturePattern signature = convertSignature(weaverSignature);
712
domNode = new org.aspectj.org.eclipse.jdt.core.dom.HasMemberTypePattern(
715
// Handle any cases that are not yet implemented. Create a
718
domNode = new DefaultTypePattern(this.ast,
719
weaverNode.toString());
723
if (domNode != null) {
724
domNode.setSourceRange(weaverNode.getStart(), (weaverNode.getEnd()
725
- weaverNode.getStart() + 1));
731
* Creates an ExactType, WildType, or BindingType, or null if none of the
732
* three can be created
734
* @param weaverTypePattern
735
* to convert to a DOM equivalent
736
* @return DOM node or null if it was not created
738
protected org.aspectj.org.eclipse.jdt.core.dom.TypePattern createIdentifierTypePattern(
739
TypePattern weaverTypePattern) {
740
String typeExpression = weaverTypePattern.toString();
742
org.aspectj.org.eclipse.jdt.core.dom.TypePattern domTypePattern = null;
743
if (weaverTypePattern instanceof org.aspectj.weaver.patterns.WildTypePattern) {
744
// Use the expression for wild type patterns as a Name may not be
746
// for a Type with a unresolved typeExpression
747
domTypePattern = new org.aspectj.org.eclipse.jdt.core.dom.WildTypePattern(
748
ast, typeExpression);
750
// TODO: At this point, the type pattern should be resolved. Type
752
// may be able to be obtained from the exact type in the weaver
753
// pattern, therefore
754
// replace using the expression to construct the Type and use more
756
// information obtained from the exact type
758
if (weaverTypePattern instanceof org.aspectj.weaver.patterns.ExactTypePattern) {
759
Type type = this.ast.newSimpleType(this.ast
760
.newSimpleName(typeExpression));
761
domTypePattern = new ExactTypePattern(ast, type);
762
} else if (weaverTypePattern instanceof org.aspectj.weaver.patterns.BindingTypePattern) {
763
Type type = this.ast.newSimpleType(this.ast
764
.newSimpleName(typeExpression));
765
String binding = ((org.aspectj.weaver.patterns.BindingTypePattern) weaverTypePattern)
767
FormalBinding formalBinding = new FormalBinding(type, binding,
769
domTypePattern = new org.aspectj.org.eclipse.jdt.core.dom.BindingTypePattern(
773
return domTypePattern;
648
776
public ASTNode convert(
649
777
org.aspectj.org.eclipse.jdt.internal.compiler.ast.AnnotationMethodDeclaration annotationTypeMemberDeclaration) {