You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ASTitdTest.java 3.3KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. /********************************************************************
  2. * Copyright (c) 2005 Contributors. All rights reserved.
  3. * This program and the accompanying materials are made available
  4. * under the terms of the Eclipse Public License v 2.0
  5. * which accompanies this distribution and is available at
  6. * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt
  7. *
  8. * Contributors: IBM Corporation - initial API and implementation
  9. * Helen Hawkins - iniital version
  10. *******************************************************************/
  11. package org.aspectj.tools.ajc;
  12. import java.lang.reflect.Modifier;
  13. import java.util.HashMap;
  14. import junit.framework.TestCase;
  15. import org.aspectj.org.eclipse.jdt.core.dom.AST;
  16. import org.aspectj.org.eclipse.jdt.core.dom.ASTParser;
  17. import org.aspectj.org.eclipse.jdt.core.dom.AjASTVisitor;
  18. import org.aspectj.org.eclipse.jdt.core.dom.CompilationUnit;
  19. import org.aspectj.org.eclipse.jdt.core.dom.InterTypeFieldDeclaration;
  20. import org.aspectj.org.eclipse.jdt.core.dom.InterTypeMethodDeclaration;
  21. import org.aspectj.org.eclipse.jdt.core.dom.MethodDeclaration;
  22. public class ASTitdTest extends TestCase {
  23. public void testAspectWithPublicMethodITD() {
  24. checkNameAndModifiers("aspect A{ public void B.x(){} }","name = x, modifier = public");
  25. }
  26. public void testAspectWithPrivateMethodITD() {
  27. checkNameAndModifiers("aspect A{ private void B.x(){} }","name = x, modifier = private");
  28. }
  29. public void testAspectWithPublicAbstractMethodITD() {
  30. checkNameAndModifiers("aspect A{ public abstract void B.x(){} }","name = x, modifier = public abstract");
  31. }
  32. public void testAspectWithConstructorITD() {
  33. checkNameAndModifiers("class A {}aspect B {public A.new(){}}","name = A_new, modifier = public");
  34. }
  35. public void testAspectWithPublicFieldITD() {
  36. checkNameAndModifiers("class A {}aspect B {public int A.a;}","name = a, modifier = public");
  37. }
  38. private void checkNameAndModifiers(String source, String expectedOutput){
  39. ASTParser parser = ASTParser.newParser(AST.JLS2); // ajh02: need to use 2 for returnType - in 3 it has "returnType2"
  40. parser.setCompilerOptions(new HashMap());//JavaCore.getOptions());
  41. parser.setSource(source.toCharArray());
  42. CompilationUnit cu2 = (CompilationUnit) parser.createAST(null);
  43. ITDTestVisitor visitor = new ITDTestVisitor();
  44. cu2.accept(visitor);
  45. String result = visitor.toString();
  46. //System.err.println("actual:\n" + result);
  47. assertTrue("Expected:\n"+ expectedOutput + "====Actual:\n" + result,
  48. expectedOutput.equals(result));
  49. }
  50. }
  51. class ITDTestVisitor extends AjASTVisitor {
  52. StringBuffer b = new StringBuffer();
  53. boolean visitDocTags;
  54. ITDTestVisitor() {
  55. this(false);
  56. }
  57. public String toString(){
  58. return b.toString();
  59. }
  60. ITDTestVisitor(boolean visitDocTags) {
  61. super(visitDocTags);
  62. this.visitDocTags = visitDocTags;
  63. }
  64. public boolean visit(MethodDeclaration node) {
  65. if (node instanceof InterTypeMethodDeclaration)
  66. return visit((InterTypeMethodDeclaration)node);
  67. return true;
  68. }
  69. public boolean visit(InterTypeFieldDeclaration node) {
  70. b.append("name = " + node.fragments().get(0) + ", modifier = " + Modifier.toString(node.getModifiers()));
  71. return true;
  72. }
  73. public boolean visit(InterTypeMethodDeclaration node) {
  74. b.append("name = " + node.getName() + ", modifier = " + Modifier.toString(node.getModifiers()));
  75. return true;
  76. }
  77. }