* revert some ruby stuff
diff --git a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/mixin/RubyMixinBuildVisitor.java b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/mixin/RubyMixinBuildVisitor.java
index 68abcb2..9880824 100644
--- a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/mixin/RubyMixinBuildVisitor.java
+++ b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/mixin/RubyMixinBuildVisitor.java
@@ -133,9 +133,7 @@
}
public String reportInclude(String object) {
- return report(getClassKey() + INSTANCE_SUFFIX,
- new RubyMixinElementInfo(RubyMixinElementInfo.K_INCLUDE,
- object));
+ return null;
}
public String reportExtend(String object) {
diff --git a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/mixin/RubyMixinClass.java b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/mixin/RubyMixinClass.java
index 5fea05b..6673230 100644
--- a/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/mixin/RubyMixinClass.java
+++ b/plugins/org.eclipse.dltk.ruby.core/src/org/eclipse/dltk/ruby/internal/parser/mixin/RubyMixinClass.java
@@ -161,7 +161,7 @@
return s;
}
- protected RubyMixinClass[] getIncluded() {
+ public RubyMixinClass[] getIncluded() {
List result = new ArrayList();
HashSet names = new HashSet();
IMixinElement mixinElement = model.getRawModel().get(key);
@@ -175,14 +175,13 @@
}
if (info.getKind() == RubyMixinElementInfo.K_INCLUDE) {
String inclKey = (String) info.getObject();
- if (names.add(inclKey)) {
+ if (!names.contains(inclKey)) {
+ names.add(inclKey);
if (/* !this.isMeta() && */!inclKey
.endsWith(RubyMixin.INSTANCE_SUFFIX))
inclKey += RubyMixin.INSTANCE_SUFFIX;
IRubyMixinElement element = model
.createRubyElement(inclKey);
- // TODO if element is not found - try to use different path
- // combinations
if (element instanceof RubyMixinClass)
result.add(element);
}
@@ -192,7 +191,7 @@
.size()]);
}
- protected RubyMixinClass[] getExtended() {
+ public RubyMixinClass[] getExtended() {
List result = new ArrayList();
HashSet names = new HashSet();
IMixinElement mixinElement = model.getRawModel().get(key);
@@ -206,7 +205,8 @@
}
if (info.getKind() == RubyMixinElementInfo.K_EXTEND) {
String extKey = (String) info.getObject();
- if (!names.add(extKey)) {
+ if (!names.contains(extKey)) {
+ names.add(extKey);
if (/* !this.isMeta() && */!extKey
.endsWith(RubyMixin.INSTANCE_SUFFIX))
extKey += RubyMixin.INSTANCE_SUFFIX;
@@ -222,14 +222,7 @@
public void findMethods(String prefix, boolean includeTopLevel,
IMixinSearchRequestor requestor) {
- findMethods(prefix, includeTopLevel, requestor, new HashSet());
- }
- protected void findMethods(String prefix, boolean includeTopLevel,
- IMixinSearchRequestor requestor, Set processedKeys) {
- if (!processedKeys.add(key)) {
- return;
- }
IMixinElement mixinElement = model.getRawModel().get(key);
if (mixinElement == null)
return;
@@ -240,7 +233,8 @@
.createRubyElement(children[i]);
if (element instanceof RubyMixinMethod) {
requestor.acceptResult(element);
- } else if (element instanceof RubyMixinAlias) {
+ }
+ if (element instanceof RubyMixinAlias) {
RubyMixinAlias alias = (RubyMixinAlias) element;
IRubyMixinElement oldElement = alias.getOldElement();
if (oldElement instanceof RubyMixinMethod) {
@@ -254,14 +248,12 @@
RubyMixinClass[] included = this.getIncluded();
for (int i = 0; i < included.length; i++) {
- included[i].findMethods(prefix, includeTopLevel, requestor,
- processedKeys);
+ included[i].findMethods(prefix, includeTopLevel, requestor);
}
RubyMixinClass[] extended = this.getExtended();
for (int i = 0; i < extended.length; i++) {
- extended[i].findMethods(prefix, includeTopLevel, requestor,
- processedKeys);
+ extended[i].findMethods(prefix, includeTopLevel, requestor);
}
if (!this.key.endsWith(RubyMixin.VIRTUAL_SUFFIX)) {
@@ -269,8 +261,11 @@
if (superclass != null) {
if (!superclass.getKey().equals(key)) {
- superclass.findMethods(prefix, includeTopLevel, requestor,
- processedKeys);
+ RubyMixinMethod[] methods = superclass.findMethods(prefix,
+ includeTopLevel);
+ for (int j = 0; j < methods.length; j++) {
+ requestor.acceptResult(methods[j]);
+ }
}
}
} else {
@@ -279,8 +274,7 @@
IRubyMixinElement realElement = model.createRubyElement(stdKey);
if (realElement instanceof RubyMixinClass) {
RubyMixinClass rubyMixinClass = (RubyMixinClass) realElement;
- rubyMixinClass.findMethods(prefix, includeTopLevel, requestor,
- processedKeys);
+ rubyMixinClass.findMethods(prefix, includeTopLevel, requestor);
}
}
@@ -300,21 +294,13 @@
}
}
- }, new HashSet());
+ });
return (RubyMixinMethod[]) result.toArray(new RubyMixinMethod[result
.size()]);
}
public void findMethodsExact(String methodName,
IMixinSearchRequestor requestor) {
- findMethodsExact(methodName, requestor, new HashSet());
- }
-
- protected void findMethodsExact(String methodName,
- IMixinSearchRequestor requestor, Set processedKeys) {
- if (!processedKeys.add(key)) {
- return;
- }
IMixinElement mixinElement = model.getRawModel().get(key);
if (mixinElement == null)
@@ -326,7 +312,8 @@
.createRubyElement(children[i]);
if (element instanceof RubyMixinMethod) {
requestor.acceptResult(element);
- } else if (element instanceof RubyMixinAlias) {
+ }
+ if (element instanceof RubyMixinAlias) {
RubyMixinAlias alias = (RubyMixinAlias) element;
IRubyMixinElement oldElement = alias.getOldElement();
if (oldElement instanceof RubyMixinMethod) {
@@ -340,12 +327,12 @@
RubyMixinClass[] included = this.getIncluded();
for (int i = 0; i < included.length; i++) {
- included[i].findMethodsExact(methodName, requestor, processedKeys);
+ included[i].findMethodsExact(methodName, requestor);
}
RubyMixinClass[] extended = this.getExtended();
for (int i = 0; i < extended.length; i++) {
- extended[i].findMethodsExact(methodName, requestor, processedKeys);
+ extended[i].findMethodsExact(methodName, requestor);
}
if (!this.key.endsWith(RubyMixin.VIRTUAL_SUFFIX)) {
@@ -353,8 +340,11 @@
if (superclass != null) {
if (!superclass.getKey().equals(key)) {
- superclass.findMethodsExact(methodName, requestor,
- processedKeys);
+ RubyMixinMethod[] methods = superclass
+ .findMethodsExact(methodName);
+ for (int j = 0; j < methods.length; j++) {
+ requestor.acceptResult(methods[j]);
+ }
}
}
} else {
@@ -363,8 +353,7 @@
IRubyMixinElement realElement = model.createRubyElement(stdKey);
if (realElement instanceof RubyMixinClass) {
RubyMixinClass rubyMixinClass = (RubyMixinClass) realElement;
- rubyMixinClass.findMethodsExact(methodName, requestor,
- processedKeys);
+ rubyMixinClass.findMethodsExact(methodName, requestor);
}
}
@@ -384,7 +373,7 @@
}
}
- }, new HashSet());
+ });
return (RubyMixinMethod[]) result.toArray(new RubyMixinMethod[result
.size()]);
}