You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by xa...@apache.org on 2008/07/25 17:26:56 UTC
svn commit: r679833 [3/3] - in
/ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse: ./ META-INF/
src/java/org/apache/ivyde/common/
src/java/org/apache/ivyde/common/completion/
src/java/org/apache/ivyde/common/ivyfile/
src/java/org/apache/ivyde/common/model/ ...
Modified: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/editors/xml/IvyContentAssistProcessor.java
URL: http://svn.apache.org/viewvc/ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/editors/xml/IvyContentAssistProcessor.java?rev=679833&r1=679832&r2=679833&view=diff
==============================================================================
--- ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/editors/xml/IvyContentAssistProcessor.java (original)
+++ ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/editors/xml/IvyContentAssistProcessor.java Fri Jul 25 08:26:55 2008
@@ -24,12 +24,15 @@
import java.util.List;
import java.util.Map;
+import org.apache.ivyde.common.completion.CodeCompletionProposal;
+import org.apache.ivyde.common.completion.IvyCodeCompletionProcessor;
+import org.apache.ivyde.common.ivyfile.IvyModuleDescriptorModel;
+import org.apache.ivyde.common.model.IvyFile;
+import org.apache.ivyde.common.model.IvyModel;
+import org.apache.ivyde.common.model.IvyTag;
+import org.apache.ivyde.common.model.IvyTagAttribute;
+import org.apache.ivyde.common.model.Proposal;
import org.apache.ivyde.eclipse.IvyPlugin;
-import org.apache.ivyde.eclipse.ui.core.model.IvyFile;
-import org.apache.ivyde.eclipse.ui.core.model.IvyModel;
-import org.apache.ivyde.eclipse.ui.core.model.IvyTag;
-import org.apache.ivyde.eclipse.ui.core.model.IvyTagAttribute;
-import org.apache.ivyde.eclipse.ui.core.model.Proposal;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IStatus;
@@ -46,14 +49,14 @@
import org.eclipse.jface.text.contentassist.IContextInformationValidator;
import org.eclipse.swt.graphics.Point;
-public class IvyContentAssistProcessor implements IContentAssistProcessor {
+public abstract class IvyContentAssistProcessor implements IContentAssistProcessor {
private IContextInformationValidator fValidator = new ContextInformationValidator(this);
private String errorMessage = null;
private IFile file;
- private IvyModel _model;
+ private IvyCodeCompletionProcessor completionProcessor;
/**
* Call by viewer to retrieve a list of ICompletionProposal
@@ -63,7 +66,6 @@
IDocument doc = viewer.getDocument();
// Retrieve current selection range
Point selectedRange = viewer.getSelectedRange();
- List propList = new ArrayList();
String ivyFileString;
try {
ivyFileString = doc.get(0, doc.getLength());
@@ -74,172 +76,22 @@
return null;
}
IProject project = getProject();
- IvyFile ivyfile = new IvyFile(project != null ? project.getName() : "", ivyFileString,
+ IvyFile ivyfile = completionProcessor.getModel().newIvyFile(project != null ? project.getName() : "", ivyFileString,
documentOffset);
- if (ivyfile.inTag()) {
- String tagName = ivyfile.getTagName();
- if (ivyfile.readyForValue()) {
- computeValueProposals(tagName, ivyfile, propList, selectedRange);
- } else {
- // found a value to put in tag
- computeTagAttributeProposals(tagName, ivyfile, propList, selectedRange);
- }
- } else { // not in an xml tag
- computeStructureProposals(ivyfile, propList, selectedRange);
+ CodeCompletionProposal[] proposals =
+ completionProcessor.computeCompletionProposals(ivyfile, selectedRange.y);
+
+ // convert code completion proposal into eclipse ICompletionProposal
+ ICompletionProposal[] ret = new ICompletionProposal[proposals.length];
+ for (int i = 0; i < proposals.length; i++) {
+ CodeCompletionProposal prop = proposals[i];
+ ret[i] = new CompletionProposal(
+ prop.getReplacementString(), prop.getReplacementOffset(),
+ prop.getReplacementLength(), prop.getCursorPosition(),
+ null, prop.getDisplayString(), null, prop.getDoc());
}
- // Create completion proposal array
- ICompletionProposal[] proposals = new ICompletionProposal[propList.size()];
- // and fill with list elements
- propList.toArray(proposals);
-
- // Return the proposals
- return proposals;
- }
-
- /**
- * Compute a list of possible attribute for the tag given in arguement.<br/> If attribute are
- * already used in tag they are discard of the list
- *
- * @param tagName
- * @param doc
- * @param documentOffset
- * @param propList
- * @param selectedRange
- */
- private void computeTagAttributeProposals(String tagName, IvyFile ivyfile, List propList,
- Point selectedRange) {
- String qualifier = ivyfile.getQualifier();
- int qlen = qualifier.length();
- if (qualifier.indexOf('/') > -1) {
- String text = "/>";
- CompletionProposal proposal = new CompletionProposal(text, ivyfile.getOffset() - qlen,
- qlen + selectedRange.y, text.length());
- propList.add(proposal);
- } else {
- String parent = ivyfile.getParentTagName();
- IvyTag tag = _model.getIvyTag(tagName, parent);
- if (tag == null) {
- errorMessage = "tag :" + tagName + " not found in model:";
- return;
- }
- errorMessage = null;
- List atts = tag.getAttributes();
- Map existingAtts = ivyfile.getAllAttsValues();
- // Loop through all proposals
- for (Iterator iter = atts.iterator(); iter.hasNext();) {
- IvyTagAttribute att = (IvyTagAttribute) iter.next();
- if (att.getName().startsWith(qualifier) && !existingAtts.containsKey(att.getName())) {
- // Yes -- compute whole proposal text
- String text = att.getName() + "=\"\"";
- // Construct proposal
- CompletionProposal proposal = new CompletionProposal(text, ivyfile.getOffset()
- - qlen, qlen + selectedRange.y, text.length() - 1, null, att.getName(),
- null, att.getDoc());
- // and add to result list
- propList.add(proposal);
- }
- }
- }
- }
-
- /**
- * Compute a list of possible values for the current attribute of the given tag.<br>
- * The list is retrieve by calling <code> IvyTag.getPossibleValuesForAttribute</code>
- *
- * @see IvyTag#getPossibleValuesForAttribute(String, Map, String)
- * @param tagName
- * @param doc
- * @param documentOffset
- * @param propList
- * @param selection
- */
- private void computeValueProposals(String tagName, IvyFile ivyfile, List propList,
- Point selection) {
- String parent = null;
- String tag = ivyfile.getTagName();
- if (tag != null) {
- parent = ivyfile.getParentTagName(ivyfile.getStringIndexBackward("<" + tag));
- }
- IvyTag ivyTag = _model.getIvyTag(tag, parent);
- if (ivyTag != null) {
- String[] values = ivyTag.getPossibleValuesForAttribute(ivyfile.getAttributeName(),
- ivyfile);
- if (values != null) {
- String qualifier = ivyfile.getAttributeValueQualifier();
- int qlen = qualifier == null ? 0 : qualifier.length();
- Arrays.sort(values);
- for (int i = 0; i < values.length; i++) {
- String val = values[i];
- CompletionProposal proposal = new CompletionProposal(val, ivyfile.getOffset()
- - qlen, qlen + selection.y, val.length());
- propList.add(proposal);
- }
- }
- }
- }
-
- /**
- * Compute xml structural proposition
- */
- private void computeStructureProposals(IvyFile ivyfile, List propList, Point selectedRange) {
- String parent = ivyfile.getParentTagName();
- String qualifier = ivyfile.getQualifier();
- int qlen = qualifier.length();
- if (parent != null
- && ivyfile.getOffset() >= 2 + qualifier.length()
- && ivyfile.getString(ivyfile.getOffset() - 2 - qualifier.length(),
- ivyfile.getOffset()).startsWith("</")) {
- // closing tag (already started)
- String text = "</" + parent + ">";
- CompletionProposal proposal = new CompletionProposal(text, ivyfile.getOffset() - qlen
- - 2, qlen + 2 + selectedRange.y, text.length());
- propList.add(proposal);
- } else {
- if (parent != null && qualifier.length() == 0) {
- String text = "</" + parent + ">";
- int closingIndex = ivyfile.getStringIndexForward(text);
- int openingIndex = ivyfile.getStringIndexForward("<" + parent);
- if (closingIndex == -1 || (openingIndex != -1 && closingIndex > openingIndex)) {
- // suggest closing tag if tag not yet closed
- CompletionProposal proposal = new CompletionProposal(text, ivyfile.getOffset(),
- selectedRange.y, text.length());
- propList.add(proposal);
- }
- }
-
- List childs = null;
-
- if (parent != null) {
- String parentParent = ivyfile.getParentTagName(ivyfile.getStringIndexBackward("<"
- + parent));
- IvyTag root = _model.getIvyTag(parent, parentParent);
- if (root == null) {
- errorMessage = "parent tag :" + parent + " not found in model:";
- return;
- } else {
- childs = root.getChilds();
- }
- } else {
- childs = Collections.singletonList(_model.getRootIvyTag());
- }
- errorMessage = null;
- for (Iterator iter = childs.iterator(); iter.hasNext();) {
- IvyTag child = (IvyTag) iter.next();
-
- // Check if proposal matches qualifier
- if (child.getStartTag().startsWith(qualifier)) {
- Proposal[] props = child.getProposals();
- for (int i = 0; i < props.length; i++) {
- // Construct proposal and add to result list
- propList.add(new CompletionProposal(props[i].getProposal(), ivyfile
- .getOffset()
- - qlen, qlen + selectedRange.y, props[i].getCursor(), null, null,
- null, props[i].getDoc()));
- }
- }
- }
- }
+ return ret;
}
public IContextInformation[] computeContextInformation(ITextViewer viewer, int offset) {
@@ -273,7 +125,9 @@
public void setFile(IFile file) {
this.file = file;
- _model = new IvyModel(getJavaProject());
+ completionProcessor = new IvyCodeCompletionProcessor(newCompletionModel(file));
}
+ protected abstract IvyModel newCompletionModel(IFile file);
+
}
Modified: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/editors/xml/XMLConfiguration.java
URL: http://svn.apache.org/viewvc/ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/editors/xml/XMLConfiguration.java?rev=679833&r1=679832&r2=679833&view=diff
==============================================================================
--- ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/editors/xml/XMLConfiguration.java (original)
+++ ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/editors/xml/XMLConfiguration.java Fri Jul 25 08:26:55 2008
@@ -50,8 +50,9 @@
private IFile _file;
- public XMLConfiguration(ColorManager colorManager) {
+ public XMLConfiguration(ColorManager colorManager, IvyContentAssistProcessor processor) {
this.colorManager = colorManager;
+ this._processor = processor;
}
public String[] getConfiguredContentTypes(ISourceViewer sourceViewer) {
@@ -114,7 +115,6 @@
}
});
- _processor = new IvyContentAssistProcessor();
_processor.setFile(_file);
// Set this processor for each supported content type
assistant.setContentAssistProcessor(_processor, XMLPartitionScanner.XML_TAG);
Modified: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/editors/xml/XMLEditor.java
URL: http://svn.apache.org/viewvc/ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/editors/xml/XMLEditor.java?rev=679833&r1=679832&r2=679833&view=diff
==============================================================================
--- ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/editors/xml/XMLEditor.java (original)
+++ ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/editors/xml/XMLEditor.java Fri Jul 25 08:26:55 2008
@@ -29,10 +29,10 @@
private ColorManager colorManager;
- public XMLEditor() {
+ public XMLEditor(IvyContentAssistProcessor processor) {
super();
colorManager = new ColorManager();
- _configuration = new XMLConfiguration(colorManager);
+ _configuration = new XMLConfiguration(colorManager, processor);
setSourceViewerConfiguration(_configuration);
setDocumentProvider(new XMLDocumentProvider());
Modified: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/wizards/IvyNewWizard.java
URL: http://svn.apache.org/viewvc/ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/wizards/IvyNewWizard.java?rev=679833&r1=679832&r2=679833&view=diff
==============================================================================
--- ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/wizards/IvyNewWizard.java (original)
+++ ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/wizards/IvyNewWizard.java Fri Jul 25 08:26:55 2008
@@ -26,7 +26,7 @@
import org.apache.ivyde.eclipse.IvyPlugin;
import org.apache.ivyde.eclipse.ui.core.IvyFileEditorInput;
-import org.apache.ivyde.eclipse.ui.editors.IvyEditor;
+import org.apache.ivyde.eclipse.ui.editors.IvyModuleDescriptorEditor;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
@@ -156,7 +156,7 @@
IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow()
.getActivePage();
try {
- page.openEditor(new IvyFileEditorInput(file), IvyEditor.ID, true);
+ page.openEditor(new IvyFileEditorInput(file), IvyModuleDescriptorEditor.ID, true);
// IDE.openEditor(page, file, IvyEditor.ID, true);
} catch (PartInitException e) {
// this should not happen
Copied: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/test/java/org/apache/ivyde/common/model/IvyFileUtilTest.java (from r679832, ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/test/java/org/apache/ivyde/eclipse/core/model/IvyFileUtilTest.java)
URL: http://svn.apache.org/viewvc/ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/test/java/org/apache/ivyde/common/model/IvyFileUtilTest.java?p2=ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/test/java/org/apache/ivyde/common/model/IvyFileUtilTest.java&p1=ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/test/java/org/apache/ivyde/eclipse/core/model/IvyFileUtilTest.java&r1=679832&r2=679833&rev=679833&view=diff
==============================================================================
--- ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/test/java/org/apache/ivyde/eclipse/core/model/IvyFileUtilTest.java (original)
+++ ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/test/java/org/apache/ivyde/common/model/IvyFileUtilTest.java Fri Jul 25 08:26:55 2008
@@ -15,7 +15,7 @@
* limitations under the License.
*
*/
-package org.apache.ivyde.eclipse.core.model;
+package org.apache.ivyde.common.model;
import java.io.FileNotFoundException;
import java.io.IOException;
@@ -24,7 +24,8 @@
import junit.framework.TestCase;
-import org.apache.ivyde.eclipse.ui.core.model.IvyFile;
+import org.apache.ivyde.common.ivyfile.IvyModuleDescriptorFile;
+import org.apache.ivyde.common.model.IvyFile;
public class IvyFileUtilTest extends TestCase {
String hibContentStr;
@@ -48,13 +49,13 @@
}
public void testInTag() {
- IvyFile ivyFile = new IvyFile("", hibContentStr);
+ IvyFile ivyFile = new IvyModuleDescriptorFile(null, "", hibContentStr);
boolean b = ivyFile.inTag(200);
assertEquals(b, true);
}
public void testGetTagName() {
- IvyFile ivyFile = new IvyFile("", hibContentStr);
+ IvyFile ivyFile = new IvyModuleDescriptorFile(null, "", hibContentStr);
String tag = ivyFile.getTagName(200);
assertEquals("info", tag);
tag = ivyFile.getTagName(864);
@@ -64,7 +65,7 @@
public void testGetAllAttsValues() {
String test = "<test att1=\"value1\" att2 =\"value 2 \" att3 =\" value3 \" att4 = \" 4 \"";
- IvyFile ivyFile = new IvyFile("", test);
+ IvyFile ivyFile = new IvyModuleDescriptorFile(null, "", test);
Map all = ivyFile.getAllAttsValues(1);
assertNotNull(all);
assertEquals(4, all.size());
@@ -76,7 +77,7 @@
public void testGetAttributeName() {
String test = "<test nospace=\"\" 1Space =\"\" 2Space = \"\" lotofSpace = \" \"";
- IvyFile ivyFile = new IvyFile("", test);
+ IvyFile ivyFile = new IvyModuleDescriptorFile(null, "", test);
String name = ivyFile.getAttributeName(15);
assertEquals("nospace", name);
name = ivyFile.getAttributeName(28);
@@ -88,7 +89,7 @@
}
public void testGetParentTagName() {
- IvyFile ivyFile = new IvyFile("", hibContentStr);
+ IvyFile ivyFile = new IvyModuleDescriptorFile(null, "", hibContentStr);
String tag = ivyFile.getParentTagName(200);
assertEquals("ivy-module", tag);
tag = ivyFile.getParentTagName(2000);