1 11 package org.eclipse.jdt.internal.ui.text.java; 12 13 import org.eclipse.text.edits.TextEdit; 14 15 import org.eclipse.core.runtime.CoreException; 16 import org.eclipse.core.runtime.NullProgressMonitor; 17 18 import org.eclipse.swt.graphics.Image; 19 20 import org.eclipse.jface.preference.IPreferenceStore; 21 22 import org.eclipse.jface.text.BadLocationException; 23 import org.eclipse.jface.text.IDocument; 24 25 import org.eclipse.jdt.core.ICompilationUnit; 26 import org.eclipse.jdt.core.IType; 27 import org.eclipse.jdt.core.Signature; 28 import org.eclipse.jdt.core.dom.rewrite.ImportRewrite; 29 30 import org.eclipse.jdt.internal.corext.codemanipulation.StubUtility; 31 32 import org.eclipse.jdt.ui.PreferenceConstants; 33 34 import org.eclipse.jdt.internal.ui.JavaPlugin; 35 36 39 public class JavaTypeCompletionProposal extends JavaCompletionProposal { 40 41 protected final ICompilationUnit fCompilationUnit; 42 43 44 private final String fUnqualifiedTypeName; 45 46 private final String fFullyQualifiedTypeName; 47 48 public JavaTypeCompletionProposal(String replacementString, ICompilationUnit cu, int replacementOffset, int replacementLength, Image image, String displayString, int relevance) { 49 this(replacementString, cu, replacementOffset, replacementLength, image, displayString, relevance, null); 50 } 51 52 public JavaTypeCompletionProposal(String replacementString, ICompilationUnit cu, int replacementOffset, int replacementLength, Image image, String displayString, int relevance, 53 String fullyQualifiedTypeName) 54 { 55 super(replacementString, replacementOffset, replacementLength, image, displayString, relevance); 56 fCompilationUnit= cu; 57 fFullyQualifiedTypeName= fullyQualifiedTypeName; 58 fUnqualifiedTypeName= fullyQualifiedTypeName != null ? Signature.getSimpleName(fullyQualifiedTypeName) : null; 59 } 60 61 protected boolean updateReplacementString(IDocument document, char trigger, int offset, ImportRewrite impRewrite) throws CoreException, BadLocationException { 62 if (impRewrite != null && fFullyQualifiedTypeName != null) { 64 String replacementString= getReplacementString(); 65 String qualifiedType= fFullyQualifiedTypeName; 66 if (qualifiedType.indexOf('.') != -1 && replacementString.startsWith(qualifiedType) && !replacementString.endsWith(String.valueOf(';'))) { 67 IType[] types= impRewrite.getCompilationUnit().getTypes(); 68 if (types.length > 0 && types[0].getSourceRange().getOffset() <= offset) { 69 setReplacementString(impRewrite.addImport(getReplacementString())); 71 return true; 72 } 73 } 74 } 75 return false; 76 } 77 78 79 82 public void apply(IDocument document, char trigger, int offset) { 83 try { 84 ImportRewrite impRewrite= null; 85 86 if (fCompilationUnit != null && allowAddingImports()) { 87 impRewrite= StubUtility.createImportRewrite(fCompilationUnit, true); 88 } 89 90 boolean importAdded= updateReplacementString(document, trigger, offset, impRewrite); 91 92 if (importAdded) 93 setCursorPosition(getReplacementString().length()); 94 95 super.apply(document, trigger, offset); 96 97 if (importAdded && impRewrite != null) { 98 int oldLen= document.getLength(); 99 impRewrite.rewriteImports(new NullProgressMonitor()).apply(document, TextEdit.UPDATE_REGIONS); 100 setReplacementOffset(getReplacementOffset() + document.getLength() - oldLen); 101 } 102 } catch (CoreException e) { 103 JavaPlugin.log(e); 104 } catch (BadLocationException e) { 105 JavaPlugin.log(e); 106 } 107 } 108 109 private boolean allowAddingImports() { 110 IPreferenceStore preferenceStore= JavaPlugin.getDefault().getPreferenceStore(); 111 return preferenceStore.getBoolean(PreferenceConstants.CODEASSIST_ADDIMPORT); 112 } 113 114 117 protected boolean isValidPrefix(String prefix) { 118 return super.isValidPrefix(prefix) || isPrefix(prefix, fUnqualifiedTypeName) || isPrefix(prefix, fFullyQualifiedTypeName); 119 } 120 121 124 public CharSequence getPrefixCompletionText(IDocument document, int completionOffset) { 125 return fUnqualifiedTypeName; 126 } 127 128 } 129 | Popular Tags |