make sure the visibiltiy is passed around
diff --git a/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/validation/RMethodFunctionWrapper.java b/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/validation/RMethodFunctionWrapper.java
index bd5fff8..c83c782 100644
--- a/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/validation/RMethodFunctionWrapper.java
+++ b/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/validation/RMethodFunctionWrapper.java
@@ -16,7 +16,11 @@
import org.eclipse.dltk.compiler.problem.IProblemCategory;
import org.eclipse.dltk.compiler.problem.IProblemIdentifier;
+import org.eclipse.dltk.internal.javascript.ti.IReferenceAttributes;
+import org.eclipse.dltk.javascript.typeinference.IValueReference;
+import org.eclipse.dltk.javascript.typeinfo.IModelBuilder.IMethod;
import org.eclipse.dltk.javascript.typeinfo.IRFunctionType;
+import org.eclipse.dltk.javascript.typeinfo.IRMember;
import org.eclipse.dltk.javascript.typeinfo.IRMethod;
import org.eclipse.dltk.javascript.typeinfo.IRParameter;
import org.eclipse.dltk.javascript.typeinfo.IRType;
@@ -28,9 +32,23 @@
public class RMethodFunctionWrapper implements IRMethod {
private final IRFunctionType functionType;
+ private final Visibility visibility;
- public RMethodFunctionWrapper(IRFunctionType functionType) {
+ public RMethodFunctionWrapper(IRFunctionType functionType,
+ IValueReference reference) {
this.functionType = functionType;
+ IMethod method = (IMethod) reference.getAttribute(
+ IReferenceAttributes.METHOD, true);
+ if (method != null)
+ visibility = method.getVisibility();
+ else {
+ IRMember member = (IRMember) reference.getAttribute(
+ IReferenceAttributes.ELEMENT, true);
+ if (member != null)
+ visibility = member.getVisibility();
+ else
+ visibility = Visibility.PUBLIC;
+ }
}
public boolean isDeprecated() {
@@ -38,7 +56,7 @@
}
public Visibility getVisibility() {
- return Visibility.PUBLIC;
+ return visibility;
}
public String getName() {
diff --git a/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/validation/TypeInfoValidator.java b/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/validation/TypeInfoValidator.java
index 0d4a14f..95d6aff 100644
--- a/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/validation/TypeInfoValidator.java
+++ b/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/validation/TypeInfoValidator.java
@@ -1082,7 +1082,7 @@
if (expressionType instanceof IRFunctionType) {
validateCallExpressionRMethod(reference, arguments,
methodNode, new RMethodFunctionWrapper(
- (IRFunctionType) expressionType));
+ (IRFunctionType) expressionType, reference));
return;
} else if (expressionType instanceof IRClassType) {
final IRTypeDeclaration target = ((IRClassType) expressionType)
diff --git a/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/javascript/internal/core/RRecordMember.java b/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/javascript/internal/core/RRecordMember.java
index 9daa896..27dc9e6 100644
--- a/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/javascript/internal/core/RRecordMember.java
+++ b/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/javascript/internal/core/RRecordMember.java
@@ -69,6 +69,8 @@
}
public Visibility getVisibility() {
+ if (source instanceof IMember)
+ return ((IMember) source).getVisibility();
return Visibility.PUBLIC;
}