From: jsurfer Date: Sun, 19 Sep 2004 20:37:37 +0000 (+0000) Subject: misc changes X-Git-Url: http://git.phpeclipse.com?hp=b8a0cf2d672f8d35a004ad25e8d8d45d73a98b2f misc changes --- diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/SourceType.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/SourceType.java index 8a9c259..4c4e8e8 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/SourceType.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/SourceType.java @@ -24,445 +24,474 @@ import net.sourceforge.phpdt.core.jdom.IDOMNode; import net.sourceforge.phpdt.internal.core.util.Util; import net.sourceforge.phpdt.internal.corext.Assert; - /** * Handle for a source type. Info object is a SourceTypeElementInfo. - * + * * Note: Parent is either an IClassFile, an ICompilationUnit or an IType. - * + * * @see IType */ public class SourceType extends Member implements IType { - /** - * An empty list of Strings - */ - protected static final String[] fgEmptyList= new String[] {}; - protected SourceType(JavaElement parent, String name) { - super(parent, name); - Assert.isTrue(name.indexOf('.') == -1, Util.bind("sourcetype.invalidName", name)); //$NON-NLS-1$ - } -/** - * @see IType - */ -//public void codeComplete(char[] snippet,int insertion,int position,char[][] localVariableTypeNames,char[][] localVariableNames,int[] localVariableModifiers,boolean isStatic,ICompletionRequestor requestor) throws JavaModelException { -// if (requestor == null) { -// throw new IllegalArgumentException(Util.bind("codeAssist.nullRequestor")); //$NON-NLS-1$ -// } -// -// JavaProject project = (JavaProject) getJavaProject(); -// SearchableEnvironment environment = (SearchableEnvironment) project.getSearchableNameEnvironment(); -// NameLookup nameLookup = project.getNameLookup(); -// CompletionEngine engine = new CompletionEngine(environment, new CompletionRequestorWrapper(requestor,nameLookup), project.getOptions(true), project); -// -// String source = getCompilationUnit().getSource(); -// if (source != null && insertion > -1 && insertion < source.length()) { -// String encoding = project.getOption(JavaCore.CORE_ENCODING, true); -// -// char[] prefix = CharOperation.concat(source.substring(0, insertion).toCharArray(), new char[]{'{'}); -// char[] suffix = CharOperation.concat(new char[]{'}'}, source.substring(insertion).toCharArray()); -// char[] fakeSource = CharOperation.concat(prefix, snippet, suffix); -// -// BasicCompilationUnit cu = -// new BasicCompilationUnit( -// fakeSource, -// null, -// getElementName(), -// encoding); -// -// engine.complete(cu, prefix.length + position, prefix.length); -// } else { -// engine.complete(this, snippet, position, localVariableTypeNames, localVariableNames, localVariableModifiers, isStatic); -// } -//} -/** - * @see IType - */ -//public IField createField(String contents, IJavaElement sibling, boolean force, IProgressMonitor monitor) throws JavaModelException { -// CreateFieldOperation op = new CreateFieldOperation(this, contents, force); -// if (sibling != null) { -// op.createBefore(sibling); -// } -// runOperation(op, monitor); -// return (IField) op.getResultElements()[0]; -//} -/** - * @see IType - */ -//public IInitializer createInitializer(String contents, IJavaElement sibling, IProgressMonitor monitor) throws JavaModelException { -// CreateInitializerOperation op = new CreateInitializerOperation(this, contents); -// if (sibling != null) { -// op.createBefore(sibling); -// } -// runOperation(op, monitor); -// return (IInitializer) op.getResultElements()[0]; -//} -/** - * @see IType - */ -//public IMethod createMethod(String contents, IJavaElement sibling, boolean force, IProgressMonitor monitor) throws JavaModelException { -// CreateMethodOperation op = new CreateMethodOperation(this, contents, force); -// if (sibling != null) { -// op.createBefore(sibling); -// } -// runOperation(op, monitor); -// return (IMethod) op.getResultElements()[0]; -//} -/** - * @see IType - */ -//public IType createType(String contents, IJavaElement sibling, boolean force, IProgressMonitor monitor) throws JavaModelException { -// CreateTypeOperation op = new CreateTypeOperation(this, contents, force); -// if (sibling != null) { -// op.createBefore(sibling); -// } -// runOperation(op, monitor); -// return (IType) op.getResultElements()[0]; -//} -/** - * @see JavaElement#equalsDOMNode - */ -protected boolean equalsDOMNode(IDOMNode node) throws JavaModelException { - return (node.getNodeType() == IDOMNode.TYPE) && super.equalsDOMNode(node); -} -/* - * @see IType - */ -public IMethod[] findMethods(IMethod method) { - try { - return this.findMethods(method, this.getMethods()); - } catch (JavaModelException e) { - // if type doesn't exist, no matching method can exist - return null; - } -} -/** - * @see IMember - */ -public IType getDeclaringType() { - IJavaElement parent = getParent(); - while (parent != null) { - if (parent.getElementType() == IJavaElement.TYPE) { - return (IType) parent; - } else - if (parent instanceof IMember) { - parent = parent.getParent(); - } else { - return null; - } - } - return null; -} -/** - * @see IJavaElement - */ -public int getElementType() { - return TYPE; -} -/** - * @see IType#getField - */ -public IField getField(String name) { - return new SourceField(this, name); -} -/** - * @see IType - */ -public IField[] getFields() throws JavaModelException { - ArrayList list = getChildrenOfType(FIELD); - IField[] array= new IField[list.size()]; - list.toArray(array); - return array; -} -/** - * @see IType#getFullyQualifiedName - */ -public String getFullyQualifiedName() { - return this.getFullyQualifiedName('$'); -} -/** - * @see IType#getFullyQualifiedName(char) - */ -public String getFullyQualifiedName(char enclosingTypeSeparator) { - String packageName = getPackageFragment().getElementName(); - if (packageName.equals(IPackageFragment.DEFAULT_PACKAGE_NAME)) { - return getTypeQualifiedName(enclosingTypeSeparator); - } - return packageName + '.' + getTypeQualifiedName(enclosingTypeSeparator); -} + /** + * An empty list of Strings + */ + protected static final String[] fgEmptyList = new String[] {}; -/** - * @see IType - */ -//public IInitializer getInitializer(int occurrenceCount) { -// return new Initializer(this, occurrenceCount); -//} -/** - * @see IType - */ -//public IInitializer[] getInitializers() throws JavaModelException { -// ArrayList list = getChildrenOfType(INITIALIZER); -// IInitializer[] array= new IInitializer[list.size()]; -// list.toArray(array); -// return array; -//} -/** - * @see IType#getMethod - */ -public IMethod getMethod(String name, String[] parameterTypeSignatures) { - return new SourceMethod(this, name, parameterTypeSignatures); -} -/** - * @see IType - */ -public IMethod[] getMethods() throws JavaModelException { - ArrayList list = getChildrenOfType(METHOD); - IMethod[] array= new IMethod[list.size()]; - list.toArray(array); - return array; -} -/** - * @see IType - */ -public IPackageFragment getPackageFragment() { - IJavaElement parentElement = this.parent; - while (parentElement != null) { - if (parentElement.getElementType() == IJavaElement.PACKAGE_FRAGMENT) { - return (IPackageFragment)parentElement; - } - else { - parentElement = parentElement.getParent(); - } - } - Assert.isTrue(false); // should not happen - return null; -} + protected SourceType(JavaElement parent, String name) { + super(parent, name); + Assert.isTrue(name.indexOf('.') == -1, Util.bind("sourcetype.invalidName", name)); //$NON-NLS-1$ + } -/** - * @see IType - */ -public String getSuperclassName() throws JavaModelException { - SourceTypeElementInfo info = (SourceTypeElementInfo) getElementInfo(); - char[] superclassName= info.getSuperclassName(); - if (superclassName == null) { - return null; - } - return new String(superclassName); -} -/** - * @see IType - */ -public String[] getSuperInterfaceNames() throws JavaModelException { - SourceTypeElementInfo info = (SourceTypeElementInfo) getElementInfo(); - char[][] names= info.getInterfaceNames(); - if (names == null) { - return fgEmptyList; - } - String[] strings= new String[names.length]; - for (int i= 0; i < names.length; i++) { - strings[i]= new String(names[i]); - } - return strings; -} + /** + * @see IType + */ + //public void codeComplete(char[] snippet,int insertion,int position,char[][] localVariableTypeNames,char[][] + // localVariableNames,int[] localVariableModifiers,boolean isStatic,ICompletionRequestor requestor) throws JavaModelException { + // if (requestor == null) { + // throw new IllegalArgumentException(Util.bind("codeAssist.nullRequestor")); //$NON-NLS-1$ + // } + // + // JavaProject project = (JavaProject) getJavaProject(); + // SearchableEnvironment environment = (SearchableEnvironment) project.getSearchableNameEnvironment(); + // NameLookup nameLookup = project.getNameLookup(); + // CompletionEngine engine = new CompletionEngine(environment, new CompletionRequestorWrapper(requestor,nameLookup), + // project.getOptions(true), project); + // + // String source = getCompilationUnit().getSource(); + // if (source != null && insertion > -1 && insertion < source.length()) { + // String encoding = project.getOption(JavaCore.CORE_ENCODING, true); + // + // char[] prefix = CharOperation.concat(source.substring(0, insertion).toCharArray(), new char[]{'{'}); + // char[] suffix = CharOperation.concat(new char[]{'}'}, source.substring(insertion).toCharArray()); + // char[] fakeSource = CharOperation.concat(prefix, snippet, suffix); + // + // BasicCompilationUnit cu = + // new BasicCompilationUnit( + // fakeSource, + // null, + // getElementName(), + // encoding); + // + // engine.complete(cu, prefix.length + position, prefix.length); + // } else { + // engine.complete(this, snippet, position, localVariableTypeNames, localVariableNames, localVariableModifiers, isStatic); + // } + //} + /** + * @see IType + */ + //public IField createField(String contents, IJavaElement sibling, boolean force, IProgressMonitor monitor) throws + // JavaModelException { + // CreateFieldOperation op = new CreateFieldOperation(this, contents, force); + // if (sibling != null) { + // op.createBefore(sibling); + // } + // runOperation(op, monitor); + // return (IField) op.getResultElements()[0]; + //} + /** + * @see IType + */ + //public IInitializer createInitializer(String contents, IJavaElement sibling, IProgressMonitor monitor) throws + // JavaModelException { + // CreateInitializerOperation op = new CreateInitializerOperation(this, contents); + // if (sibling != null) { + // op.createBefore(sibling); + // } + // runOperation(op, monitor); + // return (IInitializer) op.getResultElements()[0]; + //} + /** + * @see IType + */ + //public IMethod createMethod(String contents, IJavaElement sibling, boolean force, IProgressMonitor monitor) throws + // JavaModelException { + // CreateMethodOperation op = new CreateMethodOperation(this, contents, force); + // if (sibling != null) { + // op.createBefore(sibling); + // } + // runOperation(op, monitor); + // return (IMethod) op.getResultElements()[0]; + //} + /** + * @see IType + */ + //public IType createType(String contents, IJavaElement sibling, boolean force, IProgressMonitor monitor) throws + // JavaModelException { + // CreateTypeOperation op = new CreateTypeOperation(this, contents, force); + // if (sibling != null) { + // op.createBefore(sibling); + // } + // runOperation(op, monitor); + // return (IType) op.getResultElements()[0]; + //} + /** + * @see JavaElement#equalsDOMNode + */ + protected boolean equalsDOMNode(IDOMNode node) throws JavaModelException { + return (node.getNodeType() == IDOMNode.TYPE) && super.equalsDOMNode(node); + } -/** - * @see IType - */ -public IType getType(String name) { - return new SourceType(this, name); -} -/** - * @see IType#getTypeQualifiedName - */ -public String getTypeQualifiedName() { - return this.getTypeQualifiedName('$'); -} -/** - * @see IType#getTypeQualifiedName(char) - */ -public String getTypeQualifiedName(char enclosingTypeSeparator) { - if (parent.getElementType() == IJavaElement.COMPILATION_UNIT) { - return name; - } else { - return ((IType) parent).getTypeQualifiedName(enclosingTypeSeparator) + enclosingTypeSeparator + name; - } -} + /* + * @see IType + */ + public IMethod[] findMethods(IMethod method) { + try { + return this.findMethods(method, this.getMethods()); + } catch (JavaModelException e) { + // if type doesn't exist, no matching method can exist + return null; + } + } -/** - * @see IType - */ -public IType[] getTypes() throws JavaModelException { - ArrayList list= getChildrenOfType(TYPE); - IType[] array= new IType[list.size()]; - list.toArray(array); - return array; -} -/** - * @see IParent - */ -public boolean hasChildren() throws JavaModelException { - return getChildren().length > 0; -} -/** - * @see IType#isAnonymous() - */ -public boolean isAnonymous() throws JavaModelException { - return false; // cannot create source handle onto anonymous types -} -/** - * @see IType - */ -public boolean isClass() throws JavaModelException { - return !isInterface(); -} -/** - * @see IType - */ -public boolean isInterface() throws JavaModelException { - SourceTypeElementInfo info = (SourceTypeElementInfo) getElementInfo(); - return info.isInterface(); -} -/** - * @see IType#isLocal() - */ -public boolean isLocal() throws JavaModelException { - return false; // cannot create source handle onto local types -} -/** - * @see IType#isMember() - */ -public boolean isMember() throws JavaModelException { - return getDeclaringType() != null; -} -/** - * @see IType - */ -//public ITypeHierarchy loadTypeHierachy(InputStream input, IProgressMonitor monitor) throws JavaModelException { -// return TypeHierarchy.load(this, input); -//} -/** - * @see IType - */ -//public ITypeHierarchy newSupertypeHierarchy(IProgressMonitor monitor) throws JavaModelException { -// return this.newSupertypeHierarchy(null, monitor); -//} -/** - * @see IType#newSupertypeHierarchy(IWorkingCopy[], IProgressMonitor) - */ -//public ITypeHierarchy newSupertypeHierarchy( -// IWorkingCopy[] workingCopies, -// IProgressMonitor monitor) -// throws JavaModelException { -// -// CreateTypeHierarchyOperation op= new CreateTypeHierarchyOperation(this, workingCopies, SearchEngine.createWorkspaceScope(), false); -// runOperation(op, monitor); -// return op.getResult(); -//} + /** + * @see IMember + */ + public IType getDeclaringType() { + IJavaElement parent = getParent(); + while (parent != null) { + if (parent.getElementType() == IJavaElement.TYPE) { + return (IType) parent; + } else if (parent instanceof IMember) { + parent = parent.getParent(); + } else { + return null; + } + } + return null; + } -/** - * @see IType - */ -//public ITypeHierarchy newTypeHierarchy(IProgressMonitor monitor) throws JavaModelException { -// return this.newTypeHierarchy((IWorkingCopy[])null, monitor); -//} -/** - * @see IType#newTypeHierarchy(IWorkingCopy[], IProgressMonitor) - */ -//public ITypeHierarchy newTypeHierarchy( -// IWorkingCopy[] workingCopies, -// IProgressMonitor monitor) -// throws JavaModelException { -// -// CreateTypeHierarchyOperation op= new CreateTypeHierarchyOperation(this, workingCopies, SearchEngine.createWorkspaceScope(), true); -// runOperation(op, monitor); -// return op.getResult(); -//} + /** + * @see IJavaElement + */ + public int getElementType() { + return TYPE; + } -/** - * @see IType - */ -//public ITypeHierarchy newTypeHierarchy(IJavaProject project, IProgressMonitor monitor) throws JavaModelException { -// if (project == null) { -// throw new IllegalArgumentException(Util.bind("hierarchy.nullProject")); //$NON-NLS-1$ -// } -// -// CreateTypeHierarchyOperation op= new CreateTypeHierarchyOperation( -// this, -// (IWorkingCopy[])null, // no working copies -// project, -// true); -// runOperation(op, monitor); -// return op.getResult(); -//} -/** - * See ISourceType.resolveType(...) - */ + /** + * @see IType#getField + */ + public IField getField(String name) { + return new SourceField(this, name); + } -// public String[][] resolveType(String typeName) throws JavaModelException { -// ISourceType info = (ISourceType) this.getElementInfo(); -// ISearchableNameEnvironment environment = ((JavaProject)getJavaProject()).getSearchableNameEnvironment(); -// -// class TypeResolveRequestor implements ISelectionRequestor { -// String[][] answers = null; -// void acceptType(String[] answer){ -// if (answers == null) { -// answers = new String[][]{ answer }; -// } else { -// // grow -// int length = answers.length; -// System.arraycopy(answers, 0, answers = new String[length+1][], 0, length); -// answers[length] = answer; -// } -// } -// public void acceptClass(char[] packageName, char[] className, boolean needQualification) { -// acceptType(new String[] { new String(packageName), new String(className) }); -// } -// -// public void acceptInterface(char[] packageName, char[] interfaceName, boolean needQualification) { -// acceptType(new String[] { new String(packageName), new String(interfaceName) }); -// } -// -// public void acceptError(IProblem error) {} -// public void acceptField(char[] declaringTypePackageName, char[] declaringTypeName, char[] name) {} -// public void acceptMethod(char[] declaringTypePackageName, char[] declaringTypeName, char[] selector, char[][] parameterPackageNames, char[][] parameterTypeNames, boolean isConstructor) {} -// public void acceptPackage(char[] packageName){} -// -// } -// TypeResolveRequestor requestor = new TypeResolveRequestor(); -// SelectionEngine engine = -// new SelectionEngine(environment, requestor, this.getJavaProject().getOptions(true)); -// -// IType[] topLevelTypes = this.getCompilationUnit().getTypes(); -// int length = topLevelTypes.length; -// ISourceType[] topLevelInfos = new ISourceType[length]; -// for (int i = 0; i < length; i++) { -// topLevelInfos[i] = (ISourceType)((SourceType)topLevelTypes[i]).getElementInfo(); -// } -// -// engine.selectType(info, typeName.toCharArray(), topLevelInfos, false); -// return requestor.answers; -//} -/** - * @private Debugging purposes - */ -protected void toStringInfo(int tab, StringBuffer buffer, Object info) { - buffer.append(this.tabString(tab)); - if (info == null) { - buffer.append(this.getElementName()); - buffer.append(" (not open)"); //$NON-NLS-1$ - } else if (info == NO_INFO) { - buffer.append(getElementName()); - } else { - try { - if (this.isInterface()) { - buffer.append("interface "); //$NON-NLS-1$ - } else { - buffer.append("class "); //$NON-NLS-1$ - } - buffer.append(this.getElementName()); - } catch (JavaModelException e) { - buffer.append(" 0; + } + + /** + * @see IType#isAnonymous() + */ + public boolean isAnonymous() throws JavaModelException { + return false; // cannot create source handle onto anonymous types + } + + /** + * @see IType + */ + public boolean isClass() throws JavaModelException { + return !isInterface(); + } + + /** + * @see IType + */ + public boolean isInterface() throws JavaModelException { + Object obj = getElementInfo(); + if (obj instanceof SourceTypeElementInfo) { + SourceTypeElementInfo info = (SourceTypeElementInfo) getElementInfo(); + return info.isInterface(); + } + return false; + } + + /** + * @see IType#isLocal() + */ + public boolean isLocal() throws JavaModelException { + return false; // cannot create source handle onto local types + } + + /** + * @see IType#isMember() + */ + public boolean isMember() throws JavaModelException { + return getDeclaringType() != null; + } + + /** + * @see IType + */ + //public ITypeHierarchy loadTypeHierachy(InputStream input, IProgressMonitor monitor) throws JavaModelException { + // return TypeHierarchy.load(this, input); + //} + /** + * @see IType + */ + //public ITypeHierarchy newSupertypeHierarchy(IProgressMonitor monitor) throws JavaModelException { + // return this.newSupertypeHierarchy(null, monitor); + //} + /** + * @see IType#newSupertypeHierarchy(IWorkingCopy[], IProgressMonitor) + */ + //public ITypeHierarchy newSupertypeHierarchy( + // IWorkingCopy[] workingCopies, + // IProgressMonitor monitor) + // throws JavaModelException { + // + // CreateTypeHierarchyOperation op= new CreateTypeHierarchyOperation(this, workingCopies, SearchEngine.createWorkspaceScope(), + // false); + // runOperation(op, monitor); + // return op.getResult(); + //} + /** + * @see IType + */ + //public ITypeHierarchy newTypeHierarchy(IProgressMonitor monitor) throws JavaModelException { + // return this.newTypeHierarchy((IWorkingCopy[])null, monitor); + //} + /** + * @see IType#newTypeHierarchy(IWorkingCopy[], IProgressMonitor) + */ + //public ITypeHierarchy newTypeHierarchy( + // IWorkingCopy[] workingCopies, + // IProgressMonitor monitor) + // throws JavaModelException { + // + // CreateTypeHierarchyOperation op= new CreateTypeHierarchyOperation(this, workingCopies, SearchEngine.createWorkspaceScope(), + // true); + // runOperation(op, monitor); + // return op.getResult(); + //} + /** + * @see IType + */ + //public ITypeHierarchy newTypeHierarchy(IJavaProject project, IProgressMonitor monitor) throws JavaModelException { + // if (project == null) { + // throw new IllegalArgumentException(Util.bind("hierarchy.nullProject")); //$NON-NLS-1$ + // } + // + // CreateTypeHierarchyOperation op= new CreateTypeHierarchyOperation( + // this, + // (IWorkingCopy[])null, // no working copies + // project, + // true); + // runOperation(op, monitor); + // return op.getResult(); + //} + /** + * See ISourceType.resolveType(...) + */ + + // public String[][] resolveType(String typeName) throws JavaModelException { + // ISourceType info = (ISourceType) this.getElementInfo(); + // ISearchableNameEnvironment environment = ((JavaProject)getJavaProject()).getSearchableNameEnvironment(); + // + // class TypeResolveRequestor implements ISelectionRequestor { + // String[][] answers = null; + // void acceptType(String[] answer){ + // if (answers == null) { + // answers = new String[][]{ answer }; + // } else { + // // grow + // int length = answers.length; + // System.arraycopy(answers, 0, answers = new String[length+1][], 0, length); + // answers[length] = answer; + // } + // } + // public void acceptClass(char[] packageName, char[] className, boolean needQualification) { + // acceptType(new String[] { new String(packageName), new String(className) }); + // } + // + // public void acceptInterface(char[] packageName, char[] interfaceName, boolean needQualification) { + // acceptType(new String[] { new String(packageName), new String(interfaceName) }); + // } + // + // public void acceptError(IProblem error) {} + // public void acceptField(char[] declaringTypePackageName, char[] declaringTypeName, char[] name) {} + // public void acceptMethod(char[] declaringTypePackageName, char[] declaringTypeName, char[] selector, char[][] + // parameterPackageNames, char[][] parameterTypeNames, boolean isConstructor) {} + // public void acceptPackage(char[] packageName){} + // + // } + // TypeResolveRequestor requestor = new TypeResolveRequestor(); + // SelectionEngine engine = + // new SelectionEngine(environment, requestor, this.getJavaProject().getOptions(true)); + // + // IType[] topLevelTypes = this.getCompilationUnit().getTypes(); + // int length = topLevelTypes.length; + // ISourceType[] topLevelInfos = new ISourceType[length]; + // for (int i = 0; i < length; i++) { + // topLevelInfos[i] = (ISourceType)((SourceType)topLevelTypes[i]).getElementInfo(); + // } + // + // engine.selectType(info, typeName.toCharArray(), topLevelInfos, false); + // return requestor.answers; + //} + /** + * @private Debugging purposes + */ + protected void toStringInfo(int tab, StringBuffer buffer, Object info) { + buffer.append(this.tabString(tab)); + if (info == null) { + buffer.append(this.getElementName()); + buffer.append(" (not open)"); //$NON-NLS-1$ + } else if (info == NO_INFO) { + buffer.append(getElementName()); + } else { + try { + if (this.isInterface()) { + buffer.append("interface "); //$NON-NLS-1$ + } else { + buffer.append("class "); //$NON-NLS-1$ + } + buffer.append(this.getElementName()); + } catch (JavaModelException e) { + buffer.append("true for forwards, false for backward + * @param annotationPosition + * the position of the found annotation + * @return the found annotation + */ + private Annotation getNextAnnotation(final int offset, final int length, boolean forward, Position annotationPosition) { + + Annotation nextAnnotation = null; + Position nextAnnotationPosition = null; + Annotation containingAnnotation = null; + Position containingAnnotationPosition = null; + boolean currentAnnotation = false; + + IDocument document = getDocumentProvider().getDocument(getEditorInput()); + int endOfDocument = document.getLength(); + int distance = Integer.MAX_VALUE; + + IAnnotationModel model = getDocumentProvider().getAnnotationModel(getEditorInput()); + Iterator e = new JavaAnnotationIterator(model, true, true); + while (e.hasNext()) { + Annotation a = (Annotation) e.next(); + if ((a instanceof IJavaAnnotation) && ((IJavaAnnotation) a).hasOverlay() || !isNavigationTarget(a)) + continue; + + Position p = model.getPosition(a); + if (p == null) + continue; + + if (forward && p.offset == offset || !forward && p.offset + p.getLength() == offset + length) {// || p.includes(offset)) { + if (containingAnnotation == null + || (forward && p.length >= containingAnnotationPosition.length || !forward + && p.length >= containingAnnotationPosition.length)) { + containingAnnotation = a; + containingAnnotationPosition = p; + currentAnnotation = p.length == length; + } + } else { + int currentDistance = 0; + + if (forward) { + currentDistance = p.getOffset() - offset; + if (currentDistance < 0) + currentDistance = endOfDocument + currentDistance; + + if (currentDistance < distance || currentDistance == distance && p.length < nextAnnotationPosition.length) { + distance = currentDistance; + nextAnnotation = a; + nextAnnotationPosition = p; + } + } else { + currentDistance = offset + length - (p.getOffset() + p.length); + if (currentDistance < 0) + currentDistance = endOfDocument + currentDistance; + + if (currentDistance < distance || currentDistance == distance && p.length < nextAnnotationPosition.length) { + distance = currentDistance; + nextAnnotation = a; + nextAnnotationPosition = p; + } + } + } + } + if (containingAnnotationPosition != null && (!currentAnnotation || nextAnnotation == null)) { + annotationPosition.setOffset(containingAnnotationPosition.getOffset()); + annotationPosition.setLength(containingAnnotationPosition.getLength()); + return containingAnnotation; + } + if (nextAnnotationPosition != null) { + annotationPosition.setOffset(nextAnnotationPosition.getOffset()); + annotationPosition.setLength(nextAnnotationPosition.getLength()); + } + + return nextAnnotation; + } + + /** + * Returns the annotation overlapping with the given range or null. + * + * @param offset + * the region offset + * @param length + * the region length + * @return the found annotation or null + * @since 3.0 + */ + private Annotation getAnnotation(int offset, int length) { + IAnnotationModel model = getDocumentProvider().getAnnotationModel(getEditorInput()); + Iterator e = new JavaAnnotationIterator(model, true, true); + while (e.hasNext()) { + Annotation a = (Annotation) e.next(); + if (!isNavigationTarget(a)) + continue; + + Position p = model.getPosition(a); + if (p != null && p.overlapsWith(offset, length)) + return a; + } + + return null; + } + + /** + * Returns whether the given annotation is configured as a target for the "Go to Next/Previous Annotation" actions + * + * @param annotation + * the annotation + * @return true if this is a target, false otherwise + * @since 3.0 + */ + private boolean isNavigationTarget(Annotation annotation) { + Preferences preferences = EditorsUI.getPluginPreferences(); + AnnotationPreference preference = getAnnotationPreferenceLookup().getAnnotationPreference(annotation); + // See bug 41689 + // String key= forward ? preference.getIsGoToNextNavigationTargetKey() : preference.getIsGoToPreviousNavigationTargetKey(); + String key = preference == null ? null : preference.getIsGoToNextNavigationTargetKey(); + return (key != null && preferences.getBoolean(key)); + } + + /** * Returns a segmentation of the line of the given document appropriate for bidi rendering. The default implementation returns * only the string literals of a php code line as segments. * @@ -3409,17 +3668,20 @@ public abstract class PHPEditor extends AbstractDecoratedTextEditor implements I return viewer; } + /* - * @see AbstractTextEditor#affectsTextPresentation(PropertyChangeEvent) - */ - protected boolean affectsTextPresentation(PropertyChangeEvent event) { - return ((PHPSourceViewerConfiguration)getSourceViewerConfiguration()).affectsTextPresentation(event) || super.affectsTextPresentation(event); - } -// -// protected boolean affectsTextPresentation(PropertyChangeEvent event) { -// JavaTextTools textTools = PHPeclipsePlugin.getDefault().getJavaTextTools(); -// return textTools.affectsBehavior(event); -// } + * @see AbstractTextEditor#affectsTextPresentation(PropertyChangeEvent) + */ + protected boolean affectsTextPresentation(PropertyChangeEvent event) { + return ((PHPSourceViewerConfiguration) getSourceViewerConfiguration()).affectsTextPresentation(event) + || super.affectsTextPresentation(event); + } + + // + // protected boolean affectsTextPresentation(PropertyChangeEvent event) { + // JavaTextTools textTools = PHPeclipsePlugin.getDefault().getJavaTextTools(); + // return textTools.affectsBehavior(event); + // } /** * Creates and returns the preference store for this Java editor with the given input. * @@ -3571,29 +3833,43 @@ public abstract class PHPEditor extends AbstractDecoratedTextEditor implements I } } - // protected void uninstallOverrideIndicator() { - // if (fOverrideIndicatorManager != null) { - // fOverrideIndicatorManager.removeAnnotations(); - // fOverrideIndicatorManager= null; - // } - //} + protected void uninstallOverrideIndicator() { +// if (fOverrideIndicatorManager != null) { +// fOverrideIndicatorManager.removeAnnotations(); +// fOverrideIndicatorManager= null; +// } + } protected void installOverrideIndicator(boolean waitForReconcilation) { - // uninstallOverrideIndicator(); - IAnnotationModel model = getDocumentProvider().getAnnotationModel(getEditorInput()); - // IJavaElement inputElement= getInputJavaElement(); + uninstallOverrideIndicator(); + IAnnotationModel model= getDocumentProvider().getAnnotationModel(getEditorInput()); + final IJavaElement inputElement= getInputJavaElement(); - // if (model == null || inputElement == null) - // return; + if (model == null || inputElement == null) + return; - // CompilationUnit ast= - // PHPeclipsePlugin.getDefault().getASTProvider().getAST(inputElement, - // true, null); - // fOverrideIndicatorManager= new OverrideIndicatorManager(model, - // inputElement, ast); +// fOverrideIndicatorManager= new OverrideIndicatorManager(model, inputElement, null); +// +// if (provideAST) { +// Job job= new Job(JavaEditorMessages.getString("OverrideIndicatorManager.intallJob")) { //$NON-NLS-1$ +// /* +// * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor) +// * @since 3.0 +// */ +// protected IStatus run(IProgressMonitor monitor) { +// CompilationUnit ast= JavaPlugin.getDefault().getASTProvider().getAST(inputElement, true, null); +// if (fOverrideIndicatorManager != null) // editor might have been closed in the meanwhile +// fOverrideIndicatorManager.reconciled(ast, true, monitor); +// return Status.OK_STATUS; +// } +// }; +// job.setPriority(Job.DECORATE); +// job.setSystem(true); +// job.schedule(); +// } } - /** + /** * Tells whether override indicators are shown. * * @return true if the override indicators are shown @@ -3643,7 +3919,7 @@ public abstract class PHPEditor extends AbstractDecoratedTextEditor implements I if (getPreferenceStore().getBoolean(PreferenceConstants.EDITOR_SYNC_OUTLINE_ON_CURSOR_MOVE)) synchronizeOutlinePage(element); setSelection(element, false); - // updateStatusLine(); + updateStatusLine(); } private boolean isJavaOutlinePageActive() { diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPUnitEditor.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPUnitEditor.java index ae9f4ca..182b550 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPUnitEditor.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPUnitEditor.java @@ -2430,10 +2430,6 @@ public class PHPUnitEditor extends PHPEditor { //implements } } - private boolean synchronizeOutlineOnCursorMove() { - return PreferenceConstants.getPreferenceStore().getBoolean(PreferenceConstants.EDITOR_SYNC_OUTLINE_ON_CURSOR_MOVE); - } - /** * Returns the updated java element for the old java element. */