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.

ScopeWithTypeVariables.java 4.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  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 v 2.0
  6. * which accompanies this distribution and is available at
  7. * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt
  8. *
  9. * Contributors:
  10. * Adrian Colyer Initial implementation
  11. * ******************************************************************/
  12. package org.aspectj.weaver.patterns;
  13. import org.aspectj.bridge.IMessage;
  14. import org.aspectj.bridge.IMessageHandler;
  15. import org.aspectj.bridge.IMessage.Kind;
  16. import org.aspectj.weaver.IHasPosition;
  17. import org.aspectj.weaver.ResolvedType;
  18. import org.aspectj.weaver.TypeVariable;
  19. import org.aspectj.weaver.UnresolvedType;
  20. import org.aspectj.weaver.UnresolvedTypeVariableReferenceType;
  21. import org.aspectj.weaver.World;
  22. /**
  23. * A scope that also considers type variables when looking up a type.
  24. *
  25. */
  26. public class ScopeWithTypeVariables implements IScope {
  27. private IScope delegateScope;
  28. private String[] typeVariableNames;
  29. private UnresolvedTypeVariableReferenceType[] typeVarTypeXs;
  30. public ScopeWithTypeVariables(String[] typeVarNames, IScope delegate) {
  31. this.delegateScope = delegate;
  32. this.typeVariableNames = typeVarNames;
  33. this.typeVarTypeXs = new UnresolvedTypeVariableReferenceType[typeVarNames.length];
  34. }
  35. /* (non-Javadoc)
  36. * @see org.aspectj.weaver.patterns.IScope#lookupType(java.lang.String, org.aspectj.weaver.IHasPosition)
  37. */
  38. public UnresolvedType lookupType(String name, IHasPosition location) {
  39. for (int i = 0; i < typeVariableNames.length; i++) {
  40. if (typeVariableNames[i].equals(name)) {
  41. if (typeVarTypeXs[i] == null) {
  42. typeVarTypeXs[i] = new UnresolvedTypeVariableReferenceType(new TypeVariable(name));
  43. }
  44. return typeVarTypeXs[i];
  45. }
  46. }
  47. return delegateScope.lookupType(name, location);
  48. }
  49. /* (non-Javadoc)
  50. * @see org.aspectj.weaver.patterns.IScope#getWorld()
  51. */
  52. public World getWorld() {
  53. return delegateScope.getWorld();
  54. }
  55. /* (non-Javadoc)
  56. * @see org.aspectj.weaver.patterns.IScope#getEnclosingType()
  57. */
  58. public ResolvedType getEnclosingType() {
  59. return delegateScope.getEnclosingType();
  60. }
  61. /* (non-Javadoc)
  62. * @see org.aspectj.weaver.patterns.IScope#getMessageHandler()
  63. */
  64. public IMessageHandler getMessageHandler() {
  65. return delegateScope.getMessageHandler();
  66. }
  67. /* (non-Javadoc)
  68. * @see org.aspectj.weaver.patterns.IScope#lookupFormal(java.lang.String)
  69. */
  70. public FormalBinding lookupFormal(String name) {
  71. return delegateScope.lookupFormal(name);
  72. }
  73. /* (non-Javadoc)
  74. * @see org.aspectj.weaver.patterns.IScope#getFormal(int)
  75. */
  76. public FormalBinding getFormal(int i) {
  77. return delegateScope.getFormal(i);
  78. }
  79. /* (non-Javadoc)
  80. * @see org.aspectj.weaver.patterns.IScope#getFormalCount()
  81. */
  82. public int getFormalCount() {
  83. return delegateScope.getFormalCount();
  84. }
  85. /* (non-Javadoc)
  86. * @see org.aspectj.weaver.patterns.IScope#getImportedPrefixes()
  87. */
  88. public String[] getImportedPrefixes() {
  89. return delegateScope.getImportedPrefixes();
  90. }
  91. /* (non-Javadoc)
  92. * @see org.aspectj.weaver.patterns.IScope#getImportedNames()
  93. */
  94. public String[] getImportedNames() {
  95. return delegateScope.getImportedNames();
  96. }
  97. /* (non-Javadoc)
  98. * @see org.aspectj.weaver.patterns.IScope#message(org.aspectj.bridge.IMessage.Kind, org.aspectj.weaver.IHasPosition, java.lang.String)
  99. */
  100. public void message(Kind kind, IHasPosition location, String message) {
  101. delegateScope.message(kind, location, message);
  102. }
  103. /* (non-Javadoc)
  104. * @see org.aspectj.weaver.patterns.IScope#message(org.aspectj.bridge.IMessage.Kind, org.aspectj.weaver.IHasPosition, org.aspectj.weaver.IHasPosition, java.lang.String)
  105. */
  106. public void message(Kind kind, IHasPosition location1,
  107. IHasPosition location2, String message) {
  108. delegateScope.message(kind,location1,location2,message);
  109. }
  110. public void message(IMessage aMessage) {
  111. delegateScope.message(aMessage);
  112. }
  113. }