Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

PrivilegedHandler.java 2.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. /* *******************************************************************
  2. * Copyright (c) 2002 Palo Alto Research Center, Incorporated (PARC).
  3. * All rights reserved.
  4. * This program and the accompanying materials are made available
  5. * under the terms of the Common Public License v1.0
  6. * which accompanies this distribution and is available at
  7. * http://www.eclipse.org/legal/cpl-v10.html
  8. *
  9. * Contributors:
  10. * Xerox/PARC initial implementation
  11. * ******************************************************************/
  12. package org.aspectj.ajdt.internal.compiler.lookup;
  13. import java.util.*;
  14. import org.aspectj.ajdt.internal.compiler.ast.AspectDeclaration;
  15. import org.aspectj.weaver.*;
  16. import org.eclipse.jdt.internal.compiler.lookup.*;
  17. public class PrivilegedHandler implements IPrivilegedHandler {
  18. private AspectDeclaration inAspect;
  19. private Map accessors = new HashMap();
  20. public PrivilegedHandler(AspectDeclaration inAspect) {
  21. this.inAspect = inAspect;
  22. }
  23. public FieldBinding getPrivilegedAccessField(FieldBinding baseField) {
  24. ResolvedMember key = inAspect.world.makeResolvedMember(baseField);
  25. if (accessors.containsKey(key)) return (FieldBinding)accessors.get(key);
  26. FieldBinding ret = new PrivilegedFieldBinding(inAspect, baseField);
  27. accessors.put(key, ret);
  28. return ret;
  29. }
  30. public MethodBinding getPrivilegedAccessMethod(MethodBinding baseMethod) {
  31. ResolvedMember key = inAspect.world.makeResolvedMember(baseMethod);
  32. if (accessors.containsKey(key)) return (MethodBinding)accessors.get(key);
  33. MethodBinding ret = inAspect.world.makeMethodBinding(
  34. AjcMemberMaker.privilegedAccessMethodForMethod(inAspect.typeX, key)
  35. );
  36. //new PrivilegedMethodBinding(inAspect, baseMethod);
  37. accessors.put(key, ret);
  38. return ret;
  39. }
  40. public void notePrivilegedTypeAccess(ReferenceBinding type) {
  41. ResolvedMember key =
  42. new ResolvedMember(Member.STATIC_INITIALIZATION,
  43. inAspect.world.fromEclipse(type), 0, ResolvedTypeX.VOID, "", TypeX.NONE);
  44. accessors.put(key, key);
  45. }
  46. public ResolvedMember[] getMembers() {
  47. Collection m = accessors.keySet();
  48. int len = m.size();
  49. ResolvedMember[] ret = new ResolvedMember[len];
  50. int index = 0;
  51. for (Iterator i = m.iterator(); i.hasNext(); ) {
  52. ret[index++] = (ResolvedMember)i.next();
  53. }
  54. return ret;
  55. }
  56. }