PageRenderTime 44ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/bundles/plugins-trunk/RubyPlugin/src/org/jedit/ruby/cache/NameToParents.java

#
Java | 116 lines | 71 code | 19 blank | 26 comment | 10 complexity | d79325dffd245540a2c0e76c3b85e6f9 MD5 | raw file
Possible License(s): BSD-3-Clause, AGPL-1.0, Apache-2.0, LGPL-2.0, LGPL-3.0, GPL-2.0, CC-BY-SA-3.0, LGPL-2.1, GPL-3.0, MPL-2.0-no-copyleft-exception, IPL-1.0
  1. /*
  2. * ParentToMethods.java -
  3. *
  4. * Copyright 2005 Robert McKinnon
  5. *
  6. * This program is free software; you can redistribute it and/or
  7. * modify it under the terms of the GNU General Public License
  8. * as published by the Free Software Foundation; either version 2
  9. * of the License, or any later version.
  10. *
  11. * This program is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. * GNU General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU General Public License
  17. * along with this program; if not, write to the Free Software
  18. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  19. */
  20. package org.jedit.ruby.cache;
  21. import org.jedit.ruby.ast.Member;
  22. import org.jedit.ruby.ast.ParentMember;
  23. import org.jedit.ruby.ast.ClassMember;
  24. import org.jedit.ruby.ast.MemberVisitorAdapter;
  25. import java.util.*;
  26. /**
  27. * Manages mapping of module or class name
  28. * to cached {@link ParentMember} object
  29. * that have that name.
  30. *
  31. * @author robmckinnon at users.sourceforge.net
  32. */
  33. final class NameToParents {
  34. private final Map<String, ParentMember> fullNameToMember = new HashMap<String, ParentMember>();
  35. private final Map<String, ParentMember> nameToMember = new HashMap<String, ParentMember>();
  36. private final ClassVisitor classVisitor = new ClassVisitor();
  37. private List<Member> allMembers;
  38. private ParentToImmediateMethods parentToImmediateMethods;
  39. final void add(ParentMember member) {
  40. String fullName = member.getFullName();
  41. String name = member.getName();
  42. fullNameToMember.put(fullName, member);
  43. nameToMember.put(name, member);
  44. }
  45. final ClassMember getClass(String name) {
  46. ParentMember member = getMember(name);
  47. if (member == null) {
  48. return null;
  49. } else {
  50. member.accept(classVisitor);
  51. return classVisitor.classMember;
  52. }
  53. }
  54. final ParentMember getMember(String name) {
  55. if (fullNameToMember.containsKey(name)) {
  56. return fullNameToMember.get(name);
  57. } else if(nameToMember.containsKey(name)) {
  58. return nameToMember.get(name);
  59. } else {
  60. return null;
  61. }
  62. }
  63. final void clear() {
  64. fullNameToMember.clear();
  65. nameToMember.clear();
  66. }
  67. final List<Member> getAllMembers() {
  68. if (allMembers == null) {
  69. allMembers = new ArrayList<Member>();
  70. for (String parentName : getAllParentNames()) {
  71. allMembers.add(fullNameToMember.get(parentName));
  72. allMembers.addAll(parentToImmediateMethods.getImmediateMethodList(parentName));
  73. }
  74. }
  75. return allMembers;
  76. }
  77. final List<String> getAllParentNames() {
  78. List<String> names = new ArrayList<String>(fullNameToMember.keySet());
  79. Collections.sort(names);
  80. return names;
  81. }
  82. final Collection<ParentMember> getAllParents() {
  83. return fullNameToMember.values();
  84. }
  85. final void reset() {
  86. allMembers = null;
  87. }
  88. public final void setParentToImmediateMethods(ParentToImmediateMethods parentToImmediateMethods) {
  89. this.parentToImmediateMethods = parentToImmediateMethods;
  90. }
  91. private static final class ClassVisitor extends MemberVisitorAdapter {
  92. ClassMember classMember = null;
  93. public final void handleClass(ClassMember clas) {
  94. classMember = clas;
  95. }
  96. }
  97. }