Author: akazakov
Date: 2008-02-18 13:16:20 -0500 (Mon, 18 Feb 2008)
New Revision: 6413
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/el/SeamELCompletionEngine.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/el/SeamExpressionResolver.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/el/TypeInfoCollector.java
Log:
http://jira.jboss.com/jira/browse/JBIDE-999 Added handling ListDataModel, SetDataNodel,
ArrayDataModel, MapDataModel
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/el/SeamELCompletionEngine.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/el/SeamELCompletionEngine.java 2008-02-18
18:11:32 UTC (rev 6412)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/el/SeamELCompletionEngine.java 2008-02-18
18:16:20 UTC (rev 6413)
@@ -22,6 +22,8 @@
import org.eclipse.core.resources.IResource;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IMember;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IRegion;
@@ -30,6 +32,7 @@
import org.jboss.tools.seam.core.ISeamContextVariable;
import org.jboss.tools.seam.core.ISeamProject;
import org.jboss.tools.seam.core.ScopeType;
+import org.jboss.tools.seam.core.SeamCorePlugin;
import org.jboss.tools.seam.internal.core.el.ElVarSearcher.Var;
/**
@@ -109,7 +112,17 @@
Set<String> proposals;
private ELOperandToken lastResolvedToken;
private boolean isMapOrCollectionOrBundleAmoungTheTokens = false;
+ private TypeInfoCollector.MemberInfo memberOfResolvedOperand;
+ public TypeInfoCollector.MemberInfo getMemberOfResolvedOperand() {
+ return memberOfResolvedOperand;
+ }
+
+ public void setMemberOfResolvedOperand(
+ TypeInfoCollector.MemberInfo lastResolvedMember) {
+ this.memberOfResolvedOperand = lastResolvedMember;
+ }
+
public SeamELOperandResolveStatus(List<ELOperandToken> tokens) {
this.tokens = tokens;
}
@@ -192,11 +205,32 @@
}
}
+ private static final String collectionAdditionForCollectionDataModel =
".iterator().next()";
+ private static final String collectionAdditionForMapDataModel = ".get()";
+
public SeamELOperandResolveStatus resolveSeamELOperand(ISeamProject project, IFile file,
String documentContent, CharSequence prefix,
int position, boolean returnEqualedVariablesOnly, List<Var> vars) throws
BadLocationException, StringIndexOutOfBoundsException {
String oldEl = prefix.toString();
Var var = findVarForEl(oldEl, vars);
- String newEl = replacePrefixByVar(oldEl, var);
+ String suffix = "";
+ if(var!=null) {
+ TypeInfoCollector.MemberInfo member = resolveSeamEL(project, file,
var.getElToken().getText());
+ if(member!=null && !member.isTypeArray()) {
+ IType type = member.getMemberType();
+ if(type!=null) {
+ try {
+ if(TypeInfoCollector.isInstanceofType(type, "java.util.Map")) {
+ suffix = collectionAdditionForMapDataModel;
+ } else {
+ suffix = collectionAdditionForCollectionDataModel;
+ }
+ } catch (JavaModelException e) {
+ SeamCorePlugin.getPluginLog().logError(e);
+ }
+ }
+ }
+ }
+ String newEl = replacePrefixByVar(oldEl, var, suffix);
String newDocumentContent = documentContent;
boolean prefixWasChanged = newEl!=oldEl;
if(prefixWasChanged) {
@@ -212,12 +246,12 @@
List<ELOperandToken> oldTokens = tokenizer.getTokens();
status.setTokens(oldTokens);
if(newLastResolvedToken != null) {
- if(newLastResolvedToken.getStart() < var.getElToken().getLength()) {
+ if(newLastResolvedToken.getStart() < var.getElToken().getLength() +
suffix.length()) {
// Last resolved token is token from "var". Set first token of original EL
as last resolved one.
- status.setLastResolvedToken(oldTokens.get(0));
+ status.setLastResolvedToken(null);
} else {
// Last resolved token is token outside "var" prefix. Correct last
resolved token.
- int oldLastResolvedTokenStart = newLastResolvedToken.getStart() -
var.getElToken().getText().length() + var.getName().length();
+ int oldLastResolvedTokenStart = newLastResolvedToken.getStart() -
var.getElToken().getText().length() - suffix.length() + var.getName().length();
for (ELOperandToken oldToken : oldTokens) {
if(oldToken.getStart() == oldLastResolvedTokenStart) {
status.setLastResolvedToken(oldToken);
@@ -252,16 +286,56 @@
* @param vars
* @return
*/
- private String replacePrefixByVar(String el, Var var) {
+ private String replacePrefixByVar(String el, Var var, String suffix) {
if(var!=null) {
ELToken token = var.getElToken();
if(token!=null) {
- return token.getText() + ".iterator().next()" +
el.substring(var.getName().length());
+ return token.getText() + suffix + el.substring(var.getName().length());
}
}
return el;
}
+ public TypeInfoCollector.MemberInfo resolveSeamEL(ISeamProject project, IFile file,
String elBody) throws BadLocationException, StringIndexOutOfBoundsException {
+ SeamELOperandResolveStatus status = resolveSeamELOperand(project, file, elBody, elBody,
0, true);
+ return status.getMemberOfResolvedOperand();
+ }
+
+ public List<ISeamContextVariable> resolveSeamVariableFromEL(ISeamProject project,
IFile file, String el) throws BadLocationException, StringIndexOutOfBoundsException {
+ SeamELOperandTokenizer tokenizer = new SeamELOperandTokenizer(el, el.length());
+ List<ELOperandToken> tokens = tokenizer.getTokens();
+
+ SeamELOperandResolveStatus status = new
SeamELOperandResolveStatus(tokenizer.getTokens());
+ status.setTokens(tokens);
+
+ List<ISeamContextVariable> resolvedVariables = new
ArrayList<ISeamContextVariable>();
+ ScopeType scope = getScope(project, file);
+ List<List<ELOperandToken>> variations = getPossibleVarsFromPrefix(tokens);
+
+ if (variations.isEmpty()) {
+ resolvedVariables = resolveVariables(project, scope,
+ tokens, tokens,
+ true);
+ } else {
+ for (List<ELOperandToken> variation : variations) {
+ List<ISeamContextVariable> resolvedVars = resolveVariables(project, scope,
+ variation, tokens,
+ true);
+ if (resolvedVars != null && !resolvedVars.isEmpty()) {
+ resolvedVariables = resolvedVars;
+ status.setLastResolvedToken(variation.get(variation.size() - 1));
+ break;
+ }
+ }
+ }
+
+ if (!areEqualExpressions(status.getResolvedTokens(), status.getTokens())) {
+ resolvedVariables.clear();
+ }
+
+ return resolvedVariables;
+ }
+
/**
* Resolves Seam EL
* @param project
@@ -337,6 +411,7 @@
} else if(returnEqualedVariablesOnly) {
proposals.add(varName);
}
+ status.setMemberOfResolvedOperand(SeamExpressionResolver.getMemberInfoByVariable(var,
true));
}
status.setLastResolvedToken(status.getTokens().isEmpty() ? null :
status.getTokens().get(status.getTokens().size() - 1));
status.setProposals(proposals);
@@ -366,7 +441,7 @@
for (TypeInfoCollector.MemberInfo mbr : members) {
if (mbr.getMemberType() == null) continue;
TypeInfoCollector infos = SeamExpressionResolver.collectTypeInfo(mbr);
- if (TypeInfoCollector.isMapOrNotParameterizedCollection(mbr.getMemberType()) ||
TypeInfoCollector.isResourceBundle(mbr.getMemberType())) {
+ if (TypeInfoCollector.isNotParameterizedCollection(mbr.getMemberType()) ||
TypeInfoCollector.isResourceBundle(mbr.getMemberType())) {
status.setMapOrCollectionOrBundleAmoungTheTokens();
}
List<TypeInfoCollector.MemberInfo> properties = infos.getProperties();
@@ -395,7 +470,7 @@
for (TypeInfoCollector.MemberInfo mbr : members) {
if (mbr.getMemberType() == null) continue;
TypeInfoCollector infos = SeamExpressionResolver.collectTypeInfo(mbr);
- if (TypeInfoCollector.isMapOrNotParameterizedCollection(mbr.getMemberType()) ||
TypeInfoCollector.isResourceBundle(mbr.getMemberType())) {
+ if (TypeInfoCollector.isNotParameterizedCollection(mbr.getMemberType()) ||
TypeInfoCollector.isResourceBundle(mbr.getMemberType())) {
status.setMapOrCollectionOrBundleAmoungTheTokens();
}
List<TypeInfoCollector.MemberInfo> methods = infos.getMethods();
@@ -416,7 +491,7 @@
for (TypeInfoCollector.MemberInfo mbr : members) {
if (mbr.getMemberType() == null) continue;
TypeInfoCollector infos = SeamExpressionResolver.collectTypeInfo(mbr);
- if (TypeInfoCollector.isMapOrNotParameterizedCollection(mbr.getMemberType()) ||
TypeInfoCollector.isResourceBundle(mbr.getMemberType())) {
+ if (TypeInfoCollector.isNotParameterizedCollection(mbr.getMemberType()) ||
TypeInfoCollector.isResourceBundle(mbr.getMemberType())) {
status.setMapOrCollectionOrBundleAmoungTheTokens();
}
proposals.addAll(infos.getMethodPresentations());
@@ -430,11 +505,12 @@
for (TypeInfoCollector.MemberInfo mbr : members) {
if (mbr.getMemberType() == null) continue;
TypeInfoCollector infos = SeamExpressionResolver.collectTypeInfo(mbr);
- if (TypeInfoCollector.isMapOrNotParameterizedCollection(mbr.getMemberType()) ||
TypeInfoCollector.isResourceBundle(mbr.getMemberType())) {
+ if (TypeInfoCollector.isNotParameterizedCollection(mbr.getMemberType()) ||
TypeInfoCollector.isResourceBundle(mbr.getMemberType())) {
status.setMapOrCollectionOrBundleAmoungTheTokens();
}
proposalsToFilter.addAll(infos.getMethodPresentations());
proposalsToFilter.addAll(infos.getPropertyPresentations(status.getUnpairedGettersOrSetters()));
+ status.setMemberOfResolvedOperand(mbr);
}
for (String proposal : proposalsToFilter) {
// We do expect nothing but name for method tokens (No round brackets)
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/el/SeamExpressionResolver.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/el/SeamExpressionResolver.java 2008-02-18
18:11:32 UTC (rev 6412)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/el/SeamExpressionResolver.java 2008-02-18
18:16:20 UTC (rev 6413)
@@ -16,6 +16,7 @@
import java.util.Set;
import org.eclipse.jdt.core.IMember;
+import org.jboss.tools.seam.core.BijectedAttributeType;
import org.jboss.tools.seam.core.IBijectedAttribute;
import org.jboss.tools.seam.core.ISeamComponent;
import org.jboss.tools.seam.core.ISeamComponentMethod;
@@ -182,7 +183,15 @@
}
}
if (member == null && variable instanceof IBijectedAttribute) {
- member =
TypeInfoCollector.createMemberInfo(((ISeamJavaSourceReference)variable).getSourceMember());
+ boolean isDataModel = false;
+ BijectedAttributeType[] types = ((IBijectedAttribute)variable).getTypes();
+ for(int i=0; i<types.length; i++) {
+ if(types[i]==BijectedAttributeType.DATA_BINDER) {
+ isDataModel = true;
+ break;
+ }
+ }
+ member =
TypeInfoCollector.createMemberInfo(((ISeamJavaSourceReference)variable).getSourceMember(),
isDataModel);
}
if (member == null && variable instanceof ISeamJavaSourceReference) {
member =
TypeInfoCollector.createMemberInfo(((ISeamJavaSourceReference)variable).getSourceMember());
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/el/TypeInfoCollector.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/el/TypeInfoCollector.java 2008-02-18
18:11:32 UTC (rev 6412)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/el/TypeInfoCollector.java 2008-02-18
18:16:20 UTC (rev 6413)
@@ -52,15 +52,20 @@
private Map<String, String> fParametersOfDeclaringType;
private IType fMemberType;
private String fTypeName;
+ private boolean fTypeIsArray;
+ private String fTypeNameOfArray;
+ private String fQualifiedTypeNameOfErrayElement;
+ private boolean isDataModel;
protected MemberInfo (
IType sourceType,
- String declaringTypeQualifiedName, String name, int modifiers, MemberInfo
parentMember) {
+ String declaringTypeQualifiedName, String name, int modifiers, MemberInfo
parentMember, boolean dataModel) {
setSourceType(sourceType);
setDeclaringTypeQualifiedName(declaringTypeQualifiedName);
setName(name);
setModifiers(modifiers);
setParentMember(parentMember);
+ setDataModel(dataModel);
}
protected void initializeParametersOfDeclaringType() {
@@ -188,7 +193,7 @@
if(fMemberType==null) {
initializeParametersOfDeclaringType();
fMemberType = getMemberTypeInner();
- if(fMemberType==null) {
+ if(fMemberType==null && fParametersOfDeclaringType!=null) {
// Maybe type name is parameter.
String typeName = fParametersOfDeclaringType.get(fTypeName);
if(typeName!=null) {
@@ -203,6 +208,37 @@
return fMemberType;
}
+ public boolean isTypeArray() {
+ return fTypeIsArray;
+ }
+
+ void setTypeArray(boolean typeIsArray) {
+ fTypeIsArray = typeIsArray;
+ }
+
+ public String getTypeNameOfArray() {
+ return fTypeNameOfArray;
+ }
+
+ void setTypeNameOfArray(String typeNameOfArray) {
+ fTypeNameOfArray = typeNameOfArray;
+ }
+
+ public String getQualifiedTypeNameOfArrayElement() {
+ if(fQualifiedTypeNameOfErrayElement == null) {
+ fQualifiedTypeNameOfErrayElement = EclipseJavaUtil.resolveType(getSourceType(),
getTypeNameOfArray());
+ }
+ return fQualifiedTypeNameOfErrayElement;
+ }
+
+ public boolean isDataModel() {
+ return isDataModel;
+ }
+
+ void setDataModel(boolean isDataModel) {
+ this.isDataModel = isDataModel;
+ }
+
abstract protected IType getMemberTypeInner();
abstract public IJavaElement getJavaElement();
@@ -211,8 +247,8 @@
public static class TypeInfo extends MemberInfo {
private IType fType;
- public TypeInfo(IType type, MemberInfo parentMember) throws JavaModelException {
- super(type.getDeclaringType(), (type.getDeclaringType() == null ? null :
type.getDeclaringType().getFullyQualifiedName()), type.getFullyQualifiedName(),
type.getFlags(), parentMember);
+ public TypeInfo(IType type, MemberInfo parentMember, boolean dataModel) throws
JavaModelException {
+ super(type.getDeclaringType(), (type.getDeclaringType() == null ? null :
type.getDeclaringType().getFullyQualifiedName()), type.getFullyQualifiedName(),
type.getFlags(), parentMember, dataModel);
this.fType = type;
}
@@ -234,21 +270,29 @@
public static class FieldInfo extends MemberInfo {
private String fQualifiedTypeName;
- public FieldInfo(IType sourceType, String declaringTypeQualifiedName, String name, int
modifiers, String typeQualifiedName, String[] parametersOfType, MemberInfo parentMember)
{
- super(sourceType, declaringTypeQualifiedName, name, modifiers, parentMember);
+ public FieldInfo(IType sourceType, String declaringTypeQualifiedName, String name, int
modifiers, String typeQualifiedName, String[] parametersOfType, MemberInfo parentMember,
boolean dataModel) {
+ super(sourceType, declaringTypeQualifiedName, name, modifiers, parentMember,
dataModel);
setTypeName(typeQualifiedName);
setParametersOfType(parametersOfType);
}
- public FieldInfo(IField field, MemberInfo parentMember) throws JavaModelException {
+ public FieldInfo(IField field, MemberInfo parentMember, boolean dataModel) throws
JavaModelException {
super(field.getDeclaringType(),
(field.getDeclaringType() == null ? null :
field.getDeclaringType().getFullyQualifiedName()),
field.getElementName(),
field.getFlags(),
- parentMember);
+ parentMember,
+ dataModel);
String fullTypeSignature = field.getTypeSignature();
- String type =
String.valueOf(Signature.toString(Signature.getTypeErasure(fullTypeSignature)));
+ String typeErasureSignature = Signature.getTypeErasure(fullTypeSignature);
+ String typeOfArray =
String.valueOf(Signature.toString(Signature.getElementType(typeErasureSignature)));
+ String type = String.valueOf(Signature.toString(typeErasureSignature));
+ if(!type.equals(typeOfArray)) {
+ // this is an array
+ setTypeArray(true);
+ setTypeNameOfArray(typeOfArray);
+ }
String[] signaturesOfParametersOfType =
Signature.getTypeArguments(fullTypeSignature);
String[] parametersOfType =
getQualifiedClassNamesFromSignatureArray(signaturesOfParametersOfType);
@@ -267,6 +311,9 @@
public IType getType() {
try {
+ if(isDataModel() && isTypeArray()) {
+ return
getSourceType().getJavaProject().findType(getQualifiedTypeNameOfArrayElement());
+ }
return getSourceType().getJavaProject().findType(getQualifiedTypeName());
} catch (JavaModelException e) {
SeamCorePlugin.getPluginLog().logError(e);
@@ -300,29 +347,39 @@
String[] parameterNames,
String returnTypeQualifiedName,
String[] parametersOfReturnType,
- MemberInfo parentMember) {
- super(sourceType, declaringTypeQualifiedName, name, modifiers, parentMember);
+ MemberInfo parentMember,
+ boolean dataModel) {
+ super(sourceType, declaringTypeQualifiedName, name, modifiers, parentMember,
dataModel);
setParameterTypeNames(parameterTypeQualifiedNames);
setParameterNames(parameterNames);
setTypeName(returnTypeQualifiedName);
setParametersOfType(parametersOfReturnType);
}
- public MethodInfo(IMethod method, MemberInfo parentMember) throws JavaModelException {
+ public MethodInfo(IMethod method, MemberInfo parentMember, boolean dataModel) throws
JavaModelException {
super(method.getDeclaringType(),
(method.getDeclaringType() == null ? null :
method.getDeclaringType().getFullyQualifiedName()),
method.getElementName(),
method.getFlags(),
- parentMember);
+ parentMember,
+ dataModel);
setParameterNames(method.getParameterNames());
setParameterTypeNames(resolveSignatures(method.getDeclaringType(),
method.getParameterTypes()));
String fullReturnTypeSignature = method.getReturnType();
- String returnType =
String.valueOf(Signature.toString(Signature.getTypeErasure(fullReturnTypeSignature)));
+ String returnTypeErasureSignature =
Signature.getTypeErasure(fullReturnTypeSignature);
+ String returnTypeOfArray =
String.valueOf(Signature.toString(Signature.getElementType(returnTypeErasureSignature)));
+ String returnType = String.valueOf(Signature.toString(returnTypeErasureSignature));
String[] signaturesOfParametersOfReturnType =
Signature.getTypeArguments(fullReturnTypeSignature);
String[] parametersOfReturnType =
getQualifiedClassNamesFromSignatureArray(signaturesOfParametersOfReturnType);
+ if(!returnType.equals(returnTypeOfArray)) {
+ // this is an array
+ setTypeArray(true);
+ setTypeNameOfArray(returnTypeOfArray);
+ }
+
setTypeName(returnType);
setParametersOfType(parametersOfReturnType);
setParametersNamesOfDeclaringType(getTypeErasureFromSignatureArray(method.getDeclaringType().getTypeParameterSignatures()));
@@ -373,6 +430,9 @@
public IType getReturnType() {
try {
+ if(isDataModel() && isTypeArray()) {
+ return
getSourceType().getJavaProject().findType(getQualifiedTypeNameOfArrayElement());
+ }
return getSourceType().getJavaProject().findType(getReturnTypeQualifiedName());
} catch (JavaModelException e) {
SeamCorePlugin.getPluginLog().logError(e);
@@ -462,70 +522,7 @@
}
}
}
-/*
- CompletionRequestor fRequestor = new CompletionRequestor() {
- @Override
- public void accept(CompletionProposal proposal) {
- switch(proposal.getKind()) {
- case CompletionProposal.FIELD_REF:
- {
- char[] declarationSignature = proposal.getDeclarationSignature();
- String declarationType =
String.valueOf(Signature.toCharArray(declarationSignature));
-
- char[] fullSignature = proposal.getSignature();
- String type =
String.valueOf(Signature.toCharArray(Signature.getTypeErasure(fullSignature)));
- char[][] signaturesOfParametersOfType = Signature.getTypeArguments(fullSignature);
- String[] parametersOfType =
getQualifiedClassNameFromCharArray(signaturesOfParametersOfType);
-
- FieldInfo info = new FieldInfo(TypeInfoCollector.this.fType,
- declarationType,
- String.valueOf(proposal.getName()), proposal.getFlags(),
- type,
- parametersOfType);
- fFields.add(info);
- }
- break;
- case CompletionProposal.METHOD_REF:
- {
- String[] parameterNames = convertToStringArray(proposal.findParameterNames(null));
-
- char[] declarationSignature = proposal.getDeclarationSignature();
- String declarationType =
String.valueOf(Signature.toCharArray(Signature.getTypeErasure(declarationSignature)));
-
- char[] signature = proposal.getSignature();
- char[][] parametesSignatures = Signature.getParameterTypes(signature);
- String[] parametersTypes =
getQualifiedClassNameFromCharArray(parametesSignatures);
-
- char[] fullReturnTypeSignature = Signature.getReturnType(signature);
- String returnType =
String.valueOf(Signature.toCharArray(Signature.getTypeErasure(fullReturnTypeSignature)));
- char[][] signaturesOfParametersOfReturnType =
Signature.getTypeArguments(fullReturnTypeSignature);
- String[] parametersOfReturnType =
getQualifiedClassNameFromCharArray(signaturesOfParametersOfReturnType);
-
- MethodInfo info = new MethodInfo(TypeInfoCollector.this.fType,
- declarationType,
- String.valueOf(proposal.getName()), proposal.getFlags(),
- parametersTypes,
- parameterNames,
- returnType,
- parametersOfReturnType);
- fMethods.add(info);
- }
- break;
- case CompletionProposal.KEYWORD:
- case CompletionProposal.PACKAGE_REF:
- case CompletionProposal.TYPE_REF:
- case CompletionProposal.METHOD_DECLARATION:
- case CompletionProposal.ANONYMOUS_CLASS_DECLARATION:
- case CompletionProposal.LABEL_REF :
- case CompletionProposal.LOCAL_VARIABLE_REF:
- case CompletionProposal.VARIABLE_DECLARATION:
- case CompletionProposal.POTENTIAL_METHOD_DECLARATION:
- break;
- }
- }
- };
-*/
public TypeInfoCollector(MemberInfo member) {
this.fMember = member;
this.fType = member.getMemberType();
@@ -551,16 +548,12 @@
if (fType == null)
return;
try {
-// fType.codeComplete("".toCharArray(), -1, 0, new char[0][0], new
char[0][0], new int[0], false, fRequestor);
IType binType = fType;
while (binType != null) {
IMethod[] binMethods = binType.getMethods();
for (int i = 0; binMethods != null && i < binMethods.length; i++) {
if (binMethods[i].isConstructor()) continue;
-// MethodInfo[] infos = findMethodInfos(binMethods[i]);
-// if (infos == null || infos.length == 0) {
- fMethods.add(new MethodInfo(binMethods[i], fMember));
-// }
+ fMethods.add(new MethodInfo(binMethods[i], fMember, false));
}
binType = getSuperclass(binType);
}
@@ -572,6 +565,10 @@
if(isDataModelObject(fType)) {
addInfoForDataModelObject();
}
+ // This inserts here methods "public int getRowCount()" for @DataModel
variables.
+ if(fMember.isDataModel) {
+ addInfoForDataModelVariable();
+ }
} catch (JavaModelException e) {
SeamCorePlugin.getPluginLog().logError(e);
}
@@ -589,10 +586,10 @@
}
}
- public static boolean isMapOrNotParameterizedCollection(IType type) {
+ public static boolean isNotParameterizedCollection(IType type) {
try {
String name = type.getFullyQualifiedParameterizedName();
- return isInstanceofType(type, "java.util.Map") || (isInstanceofType(type,
"java.util.Collection") && name.indexOf('<')==-1);
+ return (name.indexOf('<')==-1) && (isInstanceofType(type,
"java.util.Map") || (isInstanceofType(type,
"java.util.Collection")));
} catch (JavaModelException e) {
return false;
}
@@ -614,6 +611,18 @@
return true;
}
+ void addInfoForDataModelVariable() {
+ fMethods.add(new MethodInfo(fType,
+ fType.getFullyQualifiedName(),
+ "getRowCount", Modifier.PUBLIC,
+ new String[0],
+ new String[0],
+ "int",
+ new String[0],
+ fMember,
+ false));
+ }
+
void addInfoForDataModelObject() {
fMethods.add(new MethodInfo(fType,
fType.getFullyQualifiedName(),
@@ -622,7 +631,8 @@
new String[0],
"int",
new String[0],
- fMember));
+ fMember,
+ false));
fMethods.add(new MethodInfo(fType,
fType.getFullyQualifiedName(),
"isEmpty", Modifier.PUBLIC,
@@ -630,7 +640,8 @@
new String[0],
"boolean",
new String[0],
- fMember));
+ fMember,
+ false));
}
private static IType getSuperclass(IType type) throws JavaModelException {
@@ -843,14 +854,14 @@
return properties;
}
- public static MemberInfo createMemberInfo(IMember member) {
+ public static MemberInfo createMemberInfo(IMember member, boolean dataModel) {
try {
if (member instanceof IType)
- return new TypeInfo((IType)member, null);
+ return new TypeInfo((IType)member, null, dataModel);
else if (member instanceof IField)
- return new FieldInfo((IField)member, null);
+ return new FieldInfo((IField)member, null, dataModel);
else if (member instanceof IMethod)
- return new MethodInfo((IMethod)member, null);
+ return new MethodInfo((IMethod)member, null, dataModel);
} catch (JavaModelException e) {
SeamCorePlugin.getPluginLog().logError(e);
}
@@ -858,6 +869,10 @@
return null;
}
+ public static MemberInfo createMemberInfo(IMember member) {
+ return createMemberInfo(member, false);
+ }
+
static String[] resolveSignatures (IType type, String[] signatures) {
if (signatures == null || signatures.length == 0)
return new String[0];