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.

DeclareParentsImpl.java 2.8KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. /* *******************************************************************
  2. * Copyright (c) 2005 Contributors.
  3. * All rights reserved.
  4. * This program and the accompanying materials are made available
  5. * under the terms of the Eclipse Public License v1.0
  6. * which accompanies this distribution and is available at
  7. * http://eclipse.org/legal/epl-v10.html
  8. *
  9. * Contributors:
  10. * Adrian Colyer Initial implementation
  11. * ******************************************************************/
  12. package org.aspectj.internal.lang.reflect;
  13. import java.lang.reflect.Type;
  14. import org.aspectj.lang.reflect.AjType;
  15. import org.aspectj.lang.reflect.DeclareParents;
  16. import org.aspectj.lang.reflect.TypePattern;
  17. /**
  18. * @author colyer
  19. *
  20. */
  21. public class DeclareParentsImpl implements DeclareParents {
  22. private AjType<?> declaringType;
  23. private TypePattern targetTypesPattern;
  24. private Type[] parents;
  25. private String parentsString;
  26. private String firstMissingTypeName;
  27. private boolean isExtends;
  28. private boolean parentsError = false;
  29. /**
  30. * Parents arg is a comma-separate list of type names that needs to be turned into
  31. * AjTypes
  32. */
  33. public DeclareParentsImpl(String targets, String parentsAsString, boolean isExtends, AjType<?> declaring)
  34. {
  35. this.targetTypesPattern = new TypePatternImpl(targets);
  36. this.isExtends = isExtends;
  37. this.declaringType = declaring;
  38. this.parentsString = parentsAsString;
  39. try {
  40. this.parents = StringToType.commaSeparatedListToTypeArray(parentsAsString, declaring.getJavaClass());
  41. } catch (ClassNotFoundException cnfEx) {
  42. this.parentsError = true;
  43. this.firstMissingTypeName = cnfEx.getMessage();
  44. }
  45. }
  46. /* (non-Javadoc)
  47. * @see org.aspectj.lang.reflect.DeclareParents#getDeclaringType()
  48. */
  49. public AjType getDeclaringType() {
  50. return this.declaringType;
  51. }
  52. /* (non-Javadoc)
  53. * @see org.aspectj.lang.reflect.DeclareParents#getTargetTypesPattern()
  54. */
  55. public TypePattern getTargetTypesPattern() {
  56. return this.targetTypesPattern;
  57. }
  58. /* (non-Javadoc)
  59. * @see org.aspectj.lang.reflect.DeclareParents#isExtends()
  60. */
  61. public boolean isExtends() {
  62. return this.isExtends;
  63. }
  64. /* (non-Javadoc)
  65. * @see org.aspectj.lang.reflect.DeclareParents#isImplements()
  66. */
  67. public boolean isImplements() {
  68. return !this.isExtends;
  69. }
  70. /* (non-Javadoc)
  71. * @see org.aspectj.lang.reflect.DeclareParents#getParentTypes()
  72. */
  73. public Type[] getParentTypes() throws ClassNotFoundException {
  74. if (parentsError) {
  75. throw new ClassNotFoundException(this.firstMissingTypeName);
  76. }
  77. return this.parents;
  78. }
  79. public String toString() {
  80. StringBuffer sb = new StringBuffer();
  81. sb.append("declare parents : ");
  82. sb.append(getTargetTypesPattern().asString());
  83. sb.append(isExtends() ? " extends " : " implements ");
  84. sb.append(this.parentsString);
  85. return sb.toString();
  86. }
  87. }