Bug 539772: [SourceEditor, Templates] Revise some LTK editor assist
and templates code
- Correct names
- Add use of nullable annotations
- Replace deprecated class of org.eclipse.jface.text.templates by
org.eclipse.text.templates if possible
- Fix potential NullPointerException in ElementNameCompletionProposal
Change-Id: Ie44aa5fbfa96bfbc1f4476ed31b81385abc5680a
diff --git a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/ast/core/util/AstSelection.java b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/ast/core/util/AstSelection.java
index c377a2a..0733dce 100644
--- a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/ast/core/util/AstSelection.java
+++ b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/ast/core/util/AstSelection.java
@@ -16,6 +16,9 @@
import java.lang.reflect.InvocationTargetException;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
import org.eclipse.statet.ltk.ast.core.IAstNode;
import org.eclipse.statet.ltk.ast.core.ICommonAstVisitor;
@@ -23,6 +26,7 @@
/**
* Converts source range to a selection of AST nodes.
*/
+@NonNullByDefault
public class AstSelection {
/** Selects the node, greater than the selected range */
@@ -40,11 +44,11 @@
private int start;
private int stop;
- private IAstNode lastCovering;
- private IAstNode beforeChild;
- private IAstNode firstChild;
- private IAstNode lastChild;
- private IAstNode afterChild;
+ private @Nullable IAstNode lastCovering;
+ private @Nullable IAstNode beforeChild;
+ private @Nullable IAstNode firstChild;
+ private @Nullable IAstNode lastChild;
+ private @Nullable IAstNode afterChild;
private class CoveringGreaterFinder implements ICommonAstVisitor {
@@ -165,7 +169,7 @@
final AstSelection selection= new AstSelection();
selection.start= start;
selection.stop= stop;
- ICommonAstVisitor finder;
+ final ICommonAstVisitor finder;
switch (mode) {
case MODE_COVERING_GREATER:
finder= selection.new CoveringGreaterFinder();
@@ -195,23 +199,23 @@
return this.stop;
}
- public final IAstNode getCovering() {
+ public final @Nullable IAstNode getCovering() {
return this.lastCovering;
}
- public final IAstNode getChildBefore() {
+ public final @Nullable IAstNode getChildBefore() {
return this.beforeChild;
}
- public final IAstNode getChildFirstTouching() {
+ public final @Nullable IAstNode getChildFirstTouching() {
return this.firstChild;
}
- public final IAstNode getChildLastTouching() {
+ public final @Nullable IAstNode getChildLastTouching() {
return this.lastChild;
}
- public final IAstNode getChildAfter() {
+ public final @Nullable IAstNode getChildAfter() {
return this.afterChild;
}
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/internal/ltk/ui/AdvancedExtensionsInternal.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/internal/ltk/ui/AdvancedExtensionsInternal.java
index 7e99251..f5f43bb 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/internal/ltk/ui/AdvancedExtensionsInternal.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/internal/ltk/ui/AdvancedExtensionsInternal.java
@@ -29,11 +29,15 @@
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
import org.eclipse.statet.ecommons.ui.SharedUIResources;
import org.eclipse.statet.ltk.ui.sourceediting.assist.ContentAssistComputerRegistry;
+@NonNullByDefault
public class AdvancedExtensionsInternal {
public static final String CONTENTASSIST_EXTENSIONPOINT_ID= "org.eclipse.statet.ltk.AdvancedContentAssist"; //$NON-NLS-1$
@@ -74,7 +78,7 @@
return s;
}
- public static final ImageDescriptor getImageDescriptor(final IConfigurationElement element, final String attrName) throws CoreException {
+ public static final @Nullable ImageDescriptor getImageDescriptor(final IConfigurationElement element, final String attrName) throws CoreException {
final String imagePath= element.getAttribute(attrName);
if (imagePath != null) {
final Bundle bundle= ContentAssistComputerRegistry.getBundle(element);
@@ -92,11 +96,11 @@
* @param modifiers the string with the modifiers, separated by '+'
* @return the state mask or -1 if the input is invalid
*/
- public static int computeStateMask(final String modifiers) {
+ public static int computeStateMask(final @Nullable String modifiers) {
if (modifiers == null) {
return -1;
}
- if (modifiers.length() == 0) {
+ if (modifiers.isEmpty()) {
return SWT.NONE;
}
final String[] mods= MODIFIERS_PATTERN.split(modifiers);
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/internal/ltk/ui/TemplatesMessages.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/internal/ltk/ui/TemplatesMessages.java
index 1c772db..be02049 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/internal/ltk/ui/TemplatesMessages.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/internal/ltk/ui/TemplatesMessages.java
@@ -16,7 +16,11 @@
import org.eclipse.osgi.util.NLS;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
+@NonNullByDefault
+@SuppressWarnings("null")
public class TemplatesMessages extends NLS {
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/ISourceEditor.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/ISourceEditor.java
index 642d2c0..54d418d 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/ISourceEditor.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/ISourceEditor.java
@@ -20,6 +20,9 @@
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.services.IServiceLocator;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
import org.eclipse.statet.ecommons.text.core.sections.IDocContentSections;
import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
@@ -28,6 +31,7 @@
/**
* A interface for source editors independent of IEditorPart
*/
+@NonNullByDefault
public interface ISourceEditor extends IAdaptable {
@@ -36,28 +40,28 @@
*
* @return the content type or <code>null</code>
*/
- IContentType getContentType();
+ @Nullable IContentType getContentType();
/**
* Returns the source unit of editor input, if exists.
*
* @return model element or <code>null</code>
*/
- ISourceUnit getSourceUnit();
+ @Nullable ISourceUnit getSourceUnit();
/**
* Returns the part the editor belongs to
*
* @return the part or <code>null</code>, if not in part
*/
- IWorkbenchPart getWorkbenchPart();
+ @Nullable IWorkbenchPart getWorkbenchPart();
/**
* Returns the service locator for the editor
*
* @return service locator responsible for editor
*/
- IServiceLocator getServiceLocator();
+ @Nullable IServiceLocator getServiceLocator();
/**
* Allows access to the SourceViewer
@@ -83,13 +87,13 @@
boolean isEditable(boolean validate);
/**
- * Selects and reveals the specified range in this text editor
+ * Selects and reveals the specified region in this text editor
*
* @param offset the offset of the selection
* @param length the length of the selection
*/
void selectAndReveal(int offset, int length);
- ITextEditToolSynchronizer getTextEditToolSynchronizer();
+ @Nullable ITextEditToolSynchronizer getTextEditToolSynchronizer();
}
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/assist/AssistInvocationContext.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/assist/AssistInvocationContext.java
index 95632d7..34ee65e 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/assist/AssistInvocationContext.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/assist/AssistInvocationContext.java
@@ -25,6 +25,9 @@
import org.eclipse.jface.text.source.SourceViewer;
import org.eclipse.swt.graphics.Point;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
import org.eclipse.statet.ecommons.text.core.ITextRegion;
import org.eclipse.statet.ltk.ast.core.AstInfo;
@@ -34,6 +37,7 @@
import org.eclipse.statet.ltk.ui.sourceediting.ISourceEditor;
+@NonNullByDefault
public class AssistInvocationContext implements IQuickAssistInvocationContext, ITextRegion {
@@ -46,14 +50,14 @@
private final String invocationContentType;
- private String invocationPrefix;
+ private @Nullable String invocationPrefix;
- private final ISourceUnit sourceUnit;
- private AstInfo astInfo;
- private ISourceUnitModelInfo modelInfo;
+ private final @Nullable ISourceUnit sourceUnit;
+ private @Nullable AstInfo astInfo;
+ private @Nullable ISourceUnitModelInfo modelInfo;
- private AstSelection invocationAstSelection;
- private AstSelection astSelection;
+ private @Nullable AstSelection invocationAstSelection;
+ private @Nullable AstSelection astSelection;
int session;
@@ -120,7 +124,7 @@
}
- protected String getModelTypeId() {
+ protected @Nullable String getModelTypeId() {
return null;
}
@@ -180,19 +184,23 @@
public String getIdentifierPrefix() {
- if (this.invocationPrefix == null) {
+ String prefix= this.invocationPrefix;
+ if (prefix == null) {
try {
- this.invocationPrefix= computeIdentifierPrefix(getInvocationOffset());
- if (this.invocationPrefix == null) {
- this.invocationPrefix= ""; // prevent recomputing //$NON-NLS-1$
+ prefix= computeIdentifierPrefix(getInvocationOffset());
+ if (prefix == null) {
+ prefix= ""; // prevent recomputing //$NON-NLS-1$
}
}
catch (final BadPartitioningException | BadLocationException e) {
- this.invocationPrefix= ""; //$NON-NLS-1$
+ prefix= ""; //$NON-NLS-1$
throw new RuntimeException(e);
}
+ finally {
+ this.invocationPrefix= prefix;
+ }
}
- return this.invocationPrefix;
+ return prefix;
}
public int getIdentifierOffset() {
@@ -206,7 +214,7 @@
* @return the prefix preceding the content assist invocation offset, <code>null</code> if
* there is no document
*/
- protected String computeIdentifierPrefix(final int offset)
+ protected @Nullable String computeIdentifierPrefix(final int offset)
throws BadPartitioningException, BadLocationException {
final IDocument document= getDocument();
@@ -224,32 +232,42 @@
}
- public ISourceUnit getSourceUnit() {
+ public @Nullable ISourceUnit getSourceUnit() {
return this.sourceUnit;
}
- public AstInfo getAstInfo() {
+ public @Nullable AstInfo getAstInfo() {
return this.astInfo;
}
- public ISourceUnitModelInfo getModelInfo() {
+ public @Nullable ISourceUnitModelInfo getModelInfo() {
return this.modelInfo;
}
public AstSelection getInvocationAstSelection() {
- if (this.invocationAstSelection == null && this.astInfo != null && this.astInfo.root != null) {
- this.invocationAstSelection= AstSelection.search(this.astInfo.root,
+ AstSelection selection= this.invocationAstSelection;
+ if (selection == null) {
+ if (this.astInfo == null || this.astInfo.root == null) {
+ throw new UnsupportedOperationException("AST is missing.");
+ }
+ selection= AstSelection.search(this.astInfo.root,
getInvocationOffset(), getInvocationOffset(), AstSelection.MODE_COVERING_SAME_LAST );
+ this.invocationAstSelection= selection;
}
- return this.invocationAstSelection;
+ return selection;
}
public AstSelection getAstSelection() {
- if (this.astSelection == null && this.astInfo != null && this.astInfo.root != null) {
- this.astSelection= AstSelection.search(this.astInfo.root,
+ AstSelection selection= this.astSelection;
+ if (selection == null) {
+ if (this.astInfo == null || this.astInfo.root == null) {
+ throw new UnsupportedOperationException("AST is missing.");
+ }
+ selection= AstSelection.search(this.astInfo.root,
getOffset(), getOffset() + getLength(), AstSelection.MODE_COVERING_SAME_LAST );
+ this.astSelection= selection;
}
- return this.astSelection;
+ return selection;
}
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/assist/ContentAssistCategory.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/assist/ContentAssistCategory.java
index c86cc46..b59b508 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/assist/ContentAssistCategory.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/assist/ContentAssistCategory.java
@@ -15,24 +15,27 @@
package org.eclipse.statet.ltk.ui.sourceediting.assist;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.statet.ecommons.ui.util.MessageUtils;
+import org.eclipse.statet.jcommons.collections.ImCollections;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+import org.eclipse.statet.ecommons.ui.util.MessageUtils;
/**
* Describes a category for {@link ContentAssistProcessor}s.
*/
+@NonNullByDefault
public final class ContentAssistCategory {
- private static final List<IContentAssistComputer> NO_COMPUTERS= Collections.emptyList();
+ private static final List<IContentAssistComputer> NO_COMPUTERS= ImCollections.emptyList();
private final String id;
@@ -40,7 +43,7 @@
private final String name;
/** The image descriptor for this category, or <code>null</code> if none specified. */
- private final ImageDescriptor image;
+ private final @Nullable ImageDescriptor image;
boolean isEnabledAsSeparate= false;
@@ -56,13 +59,13 @@
this.id= "explicite:" + partitionId; //$NON-NLS-1$
this.name= null;
this.image= null;
- this.computerDescriptors= Collections.emptyList();
+ this.computerDescriptors= ImCollections.emptyList();
this.computersByPartition= new HashMap<>();
this.computersByPartition.put(partitionId, computers);
this.isIncludedInDefault= true;
}
- ContentAssistCategory(final String id, final String name, final ImageDescriptor imageDsrc,
+ ContentAssistCategory(final String id, final String name, final @Nullable ImageDescriptor imageDsrc,
final List<ContentAssistComputerRegistry.ComputerDescriptor> computers) {
this.id= id;
this.name= name;
@@ -79,6 +82,7 @@
this.computersByPartition= template.computersByPartition;
}
+
/**
* Returns the identifier of the described extension.
*
@@ -113,7 +117,7 @@
*
* @return the image descriptor of the described category
*/
- public ImageDescriptor getImageDescriptor() {
+ public @Nullable ImageDescriptor getImageDescriptor() {
return this.image;
}
@@ -132,8 +136,8 @@
public boolean hasComputers(final String contentTypeId) {
final List<IContentAssistComputer> computers= this.computersByPartition.get(contentTypeId);
if (computers == null) {
- for (final ContentAssistComputerRegistry.ComputerDescriptor dscr : this.computerDescriptors) {
- if (dscr.getPartitions().contains(contentTypeId)) {
+ for (final ContentAssistComputerRegistry.ComputerDescriptor descr : this.computerDescriptors) {
+ if (descr.getPartitions().contains(contentTypeId)) {
return true;
}
}
@@ -149,21 +153,21 @@
List<IContentAssistComputer> computers= this.computersByPartition.get(contentTypeId);
if (computers == null) {
computers= initComputers(contentTypeId);
+ this.computersByPartition.put(contentTypeId, computers);
}
return computers;
}
private List<IContentAssistComputer> initComputers(final String contentTypeId) {
final List<IContentAssistComputer> computers= new ArrayList<>();
- for (final ContentAssistComputerRegistry.ComputerDescriptor dscr : this.computerDescriptors) {
- if (dscr.getPartitions().contains(contentTypeId)) {
- final IContentAssistComputer computer= dscr.getComputer();
+ for (final ContentAssistComputerRegistry.ComputerDescriptor descr : this.computerDescriptors) {
+ if (descr.getPartitions().contains(contentTypeId)) {
+ final IContentAssistComputer computer= descr.getComputer();
if (computer != null) {
computers.add(computer);
}
}
}
- this.computersByPartition.put(contentTypeId, computers);
return computers;
}
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/assist/ContentAssistComputerRegistry.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/assist/ContentAssistComputerRegistry.java
index e5d2505..3b37a37 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/assist/ContentAssistComputerRegistry.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/assist/ContentAssistComputerRegistry.java
@@ -14,6 +14,8 @@
package org.eclipse.statet.ltk.ui.sourceediting.assist;
+import static org.eclipse.statet.jcommons.lang.ObjectUtils.nonNullAssert;
+
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
@@ -36,6 +38,9 @@
import org.eclipse.statet.jcommons.collections.ImCollections;
import org.eclipse.statet.jcommons.collections.ImList;
import org.eclipse.statet.jcommons.lang.Disposable;
+import org.eclipse.statet.jcommons.lang.NonNull;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
import org.eclipse.statet.ecommons.preferences.PreferencesUtil;
import org.eclipse.statet.ecommons.preferences.SettingsChangeNotifier;
@@ -53,6 +58,7 @@
/**
* Registry of contributions for {@link ContentAssistProcessor}s for a single content type.
*/
+@NonNullByDefault
public class ContentAssistComputerRegistry implements ManageListener, Disposable {
@@ -63,7 +69,7 @@
public static final Bundle getBundle(final IConfigurationElement element) {
final String namespace= element.getDeclaringExtension().getContributor().getName();
final Bundle bundle= Platform.getBundle(namespace);
- return bundle;
+ return nonNullAssert(bundle);
}
protected static final Map<String, ContentAssistCategory> createCategoryByIdMap(final List<ContentAssistCategory> categories) {
@@ -90,7 +96,7 @@
private final IConfigurationElement configurationElement;
/** The computer, if instantiated, <code>null</code> otherwise. */
- private IContentAssistComputer computer;
+ private @Nullable IContentAssistComputer computer;
/** Tells whether we tried to load the computer. */
private boolean triedLoadingComputer= false;
@@ -127,7 +133,7 @@
/**
* Returns a cached instance of the computer
*/
- public IContentAssistComputer getComputer() {
+ public @Nullable IContentAssistComputer getComputer() {
if (this.computer == null && !this.triedLoadingComputer && this.configurationElement != null) {
this.triedLoadingComputer= true;
try {
@@ -137,7 +143,7 @@
StatusManager.getManager().handle(new Status(IStatus.ERROR, SharedUIResources.BUNDLE_ID, -1,
NLS.bind("Loading Content Assist Computer ''{0}'' failed (contributed by= '' {1}'').", //$NON-NLS-1$
this.id, this.configurationElement.getDeclaringExtension().getContributor().getName() ),
- e ));
+ e ));
}
}
return this.computer;
@@ -169,7 +175,8 @@
private final StringSetPref prefDisabledCategoryIds;
private final StringArrayPref prefOrderedCategoryIds;
- private ImList<ContentAssistCategory> categories;
+ private @Nullable ImList<ComputerDescriptor> computers;
+ private @Nullable ImList<ContentAssistCategory> categories;
public ContentAssistComputerRegistry(final String contentTypeId, final String prefQualifier) {
@@ -219,8 +226,9 @@
public void afterSettingsChangeNotification(final Set<String> groupIds) {
}
- private ImList<ContentAssistCategory> loadExtensions() {
+ private void loadExtensions() {
final ArrayList<IConfigurationElement> categoryConfigs= new ArrayList<>(); // categories of all content types!
+ final List<ComputerDescriptor> allComputers= new ArrayList<>();
final Map<String, List<ComputerDescriptor>> computersByCategoryId= new HashMap<>();
final IExtensionRegistry extensionRegistry= Platform.getExtensionRegistry();
@@ -249,14 +257,15 @@
}
checkPartitions(partitions);
- final ComputerDescriptor comp= new ComputerDescriptor(id, partitions, element);
+ final ComputerDescriptor computer= new ComputerDescriptor(id, partitions, element);
+ allComputers.add(computer);
List<ComputerDescriptor> list= computersByCategoryId.get(categoryId);
if (list == null) {
list= new ArrayList<>(4);
computersByCategoryId.put(categoryId, list);
}
- list.add(comp);
+ list.add(computer);
}
catch (final CoreException e) {
StatusManager.getManager().handle(new Status(IStatus.ERROR, SharedUIResources.BUNDLE_ID, 0,
@@ -288,8 +297,9 @@
e ));
}
}
- return (this.categories= ImCollections.toList(
- applyPreferences(PreferenceUtils.getInstancePrefs(), categories) ));
+ this.computers= ImCollections.toList(allComputers);
+ this.categories= ImCollections.toList(
+ applyPreferences(PreferenceUtils.getInstancePrefs(), categories) );
}
List<ContentAssistCategory> applyPreferences(final PreferenceAccess prefAccess,
@@ -329,21 +339,9 @@
return ordered;
}
- public synchronized List<ContentAssistCategory> getCopyOfCategories() {
- ImList<ContentAssistCategory> categories= this.categories;
- if (categories == null) {
- categories= loadExtensions();
- }
- final List<ContentAssistCategory> copies= new ArrayList<>(categories.size());
- for (final ContentAssistCategory category : categories) {
- copies.add(new ContentAssistCategory(category));
- }
- return copies;
- }
-
Map<Preference<?>, Object> createPreferences(final List<ContentAssistCategory> orderedCategories) {
final Set<String> disabledIds= new HashSet<>();
- final String[] orderedPref= new String[orderedCategories.size()];
+ final String[] orderedPref= new @NonNull String[orderedCategories.size()];
for (int i= 0; i < orderedCategories.size(); i++) {
final ContentAssistCategory category= orderedCategories.get(i);
@@ -365,19 +363,27 @@
}
+ @SuppressWarnings("null")
public synchronized ImList<ContentAssistCategory> getCategories() {
ImList<ContentAssistCategory> categories= this.categories;
if (categories == null) {
- categories= loadExtensions();
+ loadExtensions();
+ categories= this.categories;
}
return categories;
}
- public synchronized ImList<ContentAssistCategory> getCategory(final String categoryId) {
- ImList<ContentAssistCategory> categories= this.categories;
- if (categories == null) {
- categories= loadExtensions();
+ public List<ContentAssistCategory> getCopyOfCategories() {
+ final ImList<ContentAssistCategory> categories= getCategories();
+ final List<ContentAssistCategory> copies= new ArrayList<>(categories.size());
+ for (final ContentAssistCategory category : categories) {
+ copies.add(new ContentAssistCategory(category));
}
+ return copies;
+ }
+
+ public ImList<ContentAssistCategory> getCategory(final String categoryId) {
+ final ImList<ContentAssistCategory> categories= getCategories();
for (final ContentAssistCategory category : categories) {
if (category.getId().equals(categoryId)) {
final ContentAssistCategory copy= new ContentAssistCategory(category);
@@ -388,4 +394,24 @@
return ImCollections.emptyList();
}
+ @SuppressWarnings("null")
+ private synchronized ImList<ComputerDescriptor> getComputers() {
+ ImList<ComputerDescriptor> computers= this.computers;
+ if (computers == null) {
+ loadExtensions();
+ computers= this.computers;
+ }
+ return computers;
+ }
+
+ public @Nullable IContentAssistComputer getComputer(final String id) {
+ final ImList<ComputerDescriptor> computers= getComputers();
+ for (final ComputerDescriptor descr : computers) {
+ if (descr.getId().equals(id)) {
+ return descr.getComputer();
+ }
+ }
+ return null;
+ }
+
}
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/assist/ElementNameCompletionProposal.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/assist/ElementNameCompletionProposal.java
index fddbd31..9796eca 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/assist/ElementNameCompletionProposal.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/assist/ElementNameCompletionProposal.java
@@ -28,6 +28,9 @@
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
import org.eclipse.statet.ltk.core.IElementName;
import org.eclipse.statet.ltk.model.core.elements.IModelElement;
import org.eclipse.statet.ltk.ui.IElementLabelProvider;
@@ -36,6 +39,7 @@
/**
* Proposal completing a given {@link IElementName} of a element.
*/
+@NonNullByDefault
public abstract class ElementNameCompletionProposal<E extends IModelElement>
extends CompletionProposalWithOverwrite
implements ICompletionProposalExtension3, ICompletionProposalExtension6 {
@@ -69,45 +73,30 @@
return this.element;
}
- protected IElementLabelProvider getLabelProvider() {
+ protected final IElementLabelProvider getLabelProvider() {
return this.labelProvider;
}
- /**
- * {@inheritDoc}
- */
@Override
public Image getImage() {
return this.labelProvider.getImage(getElement());
}
- /**
- * {@inheritDoc}
- */
@Override
public String getDisplayString() {
return this.labelProvider.getText(getElement());
}
- /**
- * {@inheritDoc}
- */
@Override
public StyledString getStyledDisplayString() {
return this.labelProvider.getStyledText(getElement());
}
- /**
- * {@inheritDoc}
- */
@Override
- public String getAdditionalProposalInfo() {
+ public @Nullable String getAdditionalProposalInfo() {
return null;
}
- /**
- * {@inheritDoc}
- */
@Override
public int getRelevance() {
return this.relevance;
@@ -123,9 +112,6 @@
return getReplacementName().getSegmentName();
}
- /**
- * {@inheritDoc}
- */
@Override
public boolean validate(final IDocument document, final int offset, final DocumentEvent event) {
try {
@@ -140,9 +126,6 @@
return false;
}
- /**
- * {@inheritDoc}
- */
@Override
public boolean isAutoInsertable() {
return false;
@@ -171,15 +154,12 @@
* This implementation returns <code>null</code>
*/
@Override
- public IContextInformation getContextInformation() {
+ public @Nullable IContextInformation getContextInformation() {
return null;
}
- /**
- * {@inheritDoc}
- */
@Override
- public Point getSelection(final IDocument document) {
+ public @Nullable Point getSelection(final IDocument document) {
if (this.cursorPosition >= 0) {
return new Point(this.cursorPosition, 0);
}
@@ -193,12 +173,12 @@
}
@Override
- public CharSequence getPrefixCompletionText(final IDocument document, final int offset) {
+ public @Nullable CharSequence getPrefixCompletionText(final IDocument document, final int offset) {
return null;
}
@Override
- public IInformationControlCreator getInformationControlCreator() {
+ public @Nullable IInformationControlCreator getInformationControlCreator() {
return null;
}
@@ -209,11 +189,11 @@
}
@Override
- public boolean equals(final Object obj) {
+ public boolean equals(final @Nullable Object obj) {
if (this == obj) {
return true;
}
- if (getClass() == obj.getClass()) {
+ if (obj != null && getClass() == obj.getClass()) {
final ElementNameCompletionProposal<?> other= (ElementNameCompletionProposal<?>) obj;
return (Objects.equals(getReplacementName(), other.getReplacementName())
&& Objects.equals(getElement(), other.getElement()) );
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/assist/IContentAssistComputer.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/assist/IContentAssistComputer.java
index 1d33026..67fbb3d 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/assist/IContentAssistComputer.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/assist/IContentAssistComputer.java
@@ -17,6 +17,9 @@
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
import org.eclipse.statet.ltk.ui.sourceediting.ISourceEditor;
@@ -25,6 +28,7 @@
* Contributions to the extension point <code>org.eclipse.statet.ltk.advancedContentAssist</code>
* must implement this interface.
*/
+@NonNullByDefault
public interface IContentAssistComputer {
@@ -62,7 +66,7 @@
* @param monitor a progress monitor to report progress. The monitor is private to this
* invocation, i.e. there is no need for the receiver to spawn a sub monitor.
*/
- IStatus computeCompletionProposals(AssistInvocationContext context, int mode,
+ @Nullable IStatus computeCompletionProposals(AssistInvocationContext context, int mode,
AssistProposalCollector proposals,
IProgressMonitor monitor);
@@ -74,7 +78,7 @@
* @param monitor a progress monitor to report progress. The monitor is private to this
* invocation, i.e. there is no need for the receiver to spawn a sub monitor.
*/
- IStatus computeInformationProposals(AssistInvocationContext context,
+ @Nullable IStatus computeInformationProposals(AssistInvocationContext context,
AssistProposalCollector proposals,
IProgressMonitor monitor);
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/assist/TemplateCompletionComputer.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/assist/TemplateCompletionComputer.java
index d6f6901..77000c3 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/assist/TemplateCompletionComputer.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/assist/TemplateCompletionComputer.java
@@ -24,7 +24,6 @@
import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.Region;
import org.eclipse.jface.text.source.ISourceViewer;
-import org.eclipse.jface.text.templates.ContextTypeRegistry;
import org.eclipse.jface.text.templates.DocumentTemplateContext;
import org.eclipse.jface.text.templates.GlobalTemplateVariables;
import org.eclipse.jface.text.templates.GlobalTemplateVariables.LineSelection;
@@ -34,24 +33,25 @@
import org.eclipse.jface.text.templates.TemplateException;
import org.eclipse.jface.text.templates.persistence.TemplateStore;
import org.eclipse.swt.graphics.Image;
+import org.eclipse.text.templates.ContextTypeRegistry;
import org.eclipse.statet.jcommons.collections.ImCollections;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
import org.eclipse.statet.internal.ltk.ui.LTKUIPlugin;
import org.eclipse.statet.ltk.ui.LTKUI;
import org.eclipse.statet.ltk.ui.sourceediting.ISourceEditor;
-import org.eclipse.statet.ltk.ui.sourceediting.assist.TemplateProposal.TemplateComparator;
import org.eclipse.statet.ltk.ui.templates.SourceEditorTemplateContext;
/**
* Content assist computer for editor templates.
*/
+@NonNullByDefault
public abstract class TemplateCompletionComputer implements IContentAssistComputer {
- private static final TemplateComparator fgTemplateComparator= new TemplateProposal.TemplateComparator();
-
private static final byte SELECTION_NONE= 0;
private static final byte SELECTION_INLINE= 1;
private static final byte SELECTION_MULTILINE= 2;
@@ -64,7 +64,7 @@
protected final TemplateStore templateStore;
- protected final ContextTypeRegistry typeRegistry;
+ protected final org.eclipse.text.templates.ContextTypeRegistry typeRegistry;
public TemplateCompletionComputer(final TemplateStore templateStore, final ContextTypeRegistry contextTypes) {
@@ -103,8 +103,8 @@
@Override
- public IStatus computeCompletionProposals(final AssistInvocationContext context, final int mode,
- final AssistProposalCollector proposals, final IProgressMonitor monitor) {
+ public @Nullable IStatus computeCompletionProposals(final AssistInvocationContext context,
+ final int mode, final AssistProposalCollector proposals, final IProgressMonitor monitor) {
final ISourceViewer viewer= context.getSourceViewer();
String prefix= extractPrefix(context);
@@ -116,7 +116,7 @@
region= new Region(context.getInvocationOffset() - prefix.length(), prefix.length());
}
else {
- region= new Region(context.getOffset(), context.getLength());
+ region= context;
}
DocumentTemplateContext templateContext= createTemplateContext(context, region);
if (templateContext == null) {
@@ -131,6 +131,9 @@
prefix= ""; // wenn erfolglos, dann ohne prefix //$NON-NLS-1$
if (count != 0) {
templateContext= createTemplateContext(context, region);
+ if (templateContext == null) {
+ return null;
+ }
}
}
try {
@@ -154,7 +157,7 @@
}
@Override
- public IStatus computeInformationProposals(final AssistInvocationContext context,
+ public @Nullable IStatus computeInformationProposals(final AssistInvocationContext context,
final AssistProposalCollector tenders, final IProgressMonitor monitor) {
return null;
}
@@ -208,16 +211,16 @@
return ImCollections.newList(this.templateStore.getTemplates(contextTypeId));
}
- protected abstract TemplateContextType getContextType(AssistInvocationContext context,
- IRegion region);
+ protected abstract @Nullable TemplateContextType getContextType(
+ AssistInvocationContext context, IRegion region);
- protected DocumentTemplateContext createTemplateContext(final AssistInvocationContext context,
- final IRegion region) {
- final ISourceViewer viewer= context.getSourceViewer();
+ protected @Nullable DocumentTemplateContext createTemplateContext(
+ final AssistInvocationContext context, final IRegion region) {
final TemplateContextType contextType= getContextType(context, region);
if (contextType != null) {
- final IDocument document= viewer.getDocument();
- return new SourceEditorTemplateContext(contextType, document, region.getOffset(), region.getLength(), context.getEditor());
+ return new SourceEditorTemplateContext(contextType, context.getDocument(),
+ region.getOffset(), region.getLength(),
+ context.getEditor() );
}
return null;
}
@@ -228,7 +231,7 @@
return new TemplateProposal(template, context, region, getImage(template), relevance);
}
- protected Image getImage(final Template template) {
+ protected @Nullable Image getImage(final Template template) {
return LTKUIPlugin.getInstance().getImageRegistry().get(LTKUI.OBJ_TEXT_TEMPLATE_IMAGE_ID);
}
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/assist/TemplateProposal.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/assist/TemplateProposal.java
index 30ae7b2..2f89cf2 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/assist/TemplateProposal.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/assist/TemplateProposal.java
@@ -56,6 +56,9 @@
import org.eclipse.swt.graphics.Point;
import org.eclipse.ui.statushandlers.StatusManager;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
import org.eclipse.statet.ecommons.text.ui.DefaultBrowserInformationInput;
import org.eclipse.statet.ecommons.text.ui.PositionBasedCompletionProposal;
import org.eclipse.statet.ecommons.ui.SharedUIResources;
@@ -71,6 +74,7 @@
* <li>supports {@link ITextEditToolSynchronizer}</li>
* </ul>
*/
+@NonNullByDefault
public class TemplateProposal implements IAssistCompletionProposal,
ICompletionProposalExtension, ICompletionProposalExtension3, ICompletionProposalExtension4,
ICompletionProposalExtension5, ICompletionProposalExtension6 {
@@ -96,16 +100,16 @@
private final int relevance;
- private final Image image;
+ private final @Nullable Image image;
private IRegion region;
- private IRegion selectionToSet; // initialized by apply()
- private InclusivePositionUpdater updater;
+ private @Nullable IRegion selectionToSet; // initialized by apply()
+ private @Nullable InclusivePositionUpdater updater;
public TemplateProposal(final Template template, final TemplateContext context,
- final IRegion region, final Image image, final int relevance) {
+ final IRegion region, final @Nullable Image image, final int relevance) {
assert (template != null);
assert (context != null);
assert (region != null);
@@ -184,46 +188,48 @@
@Override
public StyledString getStyledDisplayString() {
final StyledString s= new StyledString(this.template.getName());
- s.append(QUALIFIER_SEPARATOR, StyledString.QUALIFIER_STYLER);
- s.append(this.template.getDescription(), StyledString.QUALIFIER_STYLER);
+ if (!this.template.getDescription().isEmpty()) {
+ s.append(QUALIFIER_SEPARATOR, StyledString.QUALIFIER_STYLER);
+ s.append(this.template.getDescription(), StyledString.QUALIFIER_STYLER);
+ }
return s;
}
@Override
- public Image getImage() {
+ public @Nullable Image getImage() {
return this.image;
}
@Override
- public IInformationControlCreator getInformationControlCreator() {
+ public @Nullable IInformationControlCreator getInformationControlCreator() {
return null;
}
@Override
- public String getAdditionalProposalInfo() {
+ public @Nullable String getAdditionalProposalInfo() {
return null;
}
@Override
- public Object getAdditionalProposalInfo(final IProgressMonitor monitor) {
+ public @Nullable Object getAdditionalProposalInfo(final IProgressMonitor monitor) {
try {
final TemplateContext context= getContext();
context.setReadOnly(true);
if (context instanceof IWorkbenchTemplateContext) {
return new DefaultBrowserInformationInput(
- null, getDisplayString(), ((IWorkbenchTemplateContext) context).evaluateInfo(getTemplate()),
- DefaultBrowserInformationInput.FORMAT_SOURCE_INPUT);
+ null, getDisplayString(), ((IWorkbenchTemplateContext) context).evaluateInfo(getTemplate()),
+ DefaultBrowserInformationInput.FORMAT_SOURCE_INPUT );
}
final TemplateBuffer templateBuffer= context.evaluate(getTemplate());
if (templateBuffer != null) {
return new DefaultBrowserInformationInput(
- null, getDisplayString(), templateBuffer.toString(),
- DefaultBrowserInformationInput.FORMAT_SOURCE_INPUT);
+ null, getDisplayString(), templateBuffer.toString(),
+ DefaultBrowserInformationInput.FORMAT_SOURCE_INPUT );
}
}
- catch (final TemplateException e) { }
- catch (final BadLocationException e) { }
+ catch (final TemplateException e) {}
+ catch (final BadLocationException e) {}
return null;
}
@@ -291,7 +297,8 @@
for (int j= 0; j < offsets.length; j++) {
if (j == 0 && proposals.length > 1) {
group.addPosition(new ProposalPosition(document, offsets[j] + start, length, proposals));
- } else {
+ }
+ else {
group.addPosition(new LinkedPosition(document, offsets[j] + start, length));
}
}
@@ -315,11 +322,11 @@
ui.enter();
this.selectionToSet= ui.getSelectedRegion();
- } else {
+ }
+ else {
ensurePositionCategoryRemoved(document);
this.selectionToSet= new Region(getCaretOffset(templateBuffer) + start, 0);
}
-
}
catch (final BadLocationException e) {
handleError(e);
@@ -434,7 +441,7 @@
}
@Override
- public Point getSelection(final IDocument document) {
+ public @Nullable Point getSelection(final @Nullable IDocument document) {
if (this.selectionToSet != null) {
return new Point(this.selectionToSet.getOffset(), this.selectionToSet.getLength());
}
@@ -447,7 +454,7 @@
}
@Override
- public IContextInformation getContextInformation() {
+ public @Nullable IContextInformation getContextInformation() {
return null;
}
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/CodeGenerationTemplateContext.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/CodeGenerationTemplateContext.java
index fc01e83..3e08fbc 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/CodeGenerationTemplateContext.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/CodeGenerationTemplateContext.java
@@ -29,16 +29,20 @@
import org.eclipse.jface.text.templates.TemplateTranslator;
import org.eclipse.jface.text.templates.TemplateVariableResolver;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
import org.eclipse.statet.ltk.ui.sourceediting.SourceEditor1;
+@NonNullByDefault
public class CodeGenerationTemplateContext extends TemplateContext implements IWorkbenchTemplateContext {
private final String lineDelimiter;
- private ISourceUnit sourceUnit;
+ private @Nullable ISourceUnit sourceUnit;
public CodeGenerationTemplateContext(final TemplateContextType contextType,
@@ -55,17 +59,18 @@
@Override
- public SourceEditor1 getEditor() {
+ public @Nullable SourceEditor1 getEditor() {
return null;
}
@Override
- public ISourceUnit getSourceUnit() {
+ public @Nullable ISourceUnit getSourceUnit() {
return this.sourceUnit;
}
@Override
- public String evaluateInfo(final Template template) throws BadLocationException, TemplateException {
+ public @Nullable String evaluateInfo(final Template template)
+ throws BadLocationException, TemplateException {
final TemplateBuffer buffer= evaluate(template);
if (buffer != null) {
buffer.getString();
@@ -74,11 +79,17 @@
}
@Override
- public TemplateBuffer evaluate(final Template template) throws BadLocationException, TemplateException {
+ public boolean canEvaluate(final Template template) {
+ return true;
+ }
+
+ @Override
+ public @Nullable TemplateBuffer evaluate(final Template template)
+ throws BadLocationException, TemplateException {
// test that all variables are defined
- final Iterator iterator= getContextType().resolvers();
+ final Iterator<TemplateVariableResolver> iterator= getContextType().resolvers();
while (iterator.hasNext()) {
- final TemplateVariableResolver var= (TemplateVariableResolver) iterator.next();
+ final TemplateVariableResolver var= iterator.next();
if (var instanceof SourceEditorContextType.CodeTemplatesVariableResolver) {
Assert.isNotNull(getVariable(var.getType()), "Variable " + var.getType() + "not defined"); //$NON-NLS-1$ //$NON-NLS-2$
}
@@ -87,7 +98,7 @@
if (!canEvaluate(template)) {
return null;
}
-
+
final String pattern= changeLineDelimiter(template.getPattern(), this.lineDelimiter);
final TemplateTranslator translator= new TemplateTranslator();
@@ -119,15 +130,11 @@
buf.append(line);
}
return buf.toString();
- } catch (final BadLocationException e) {
+ }
+ catch (final BadLocationException e) {
// can not happen
return code;
}
}
- @Override
- public boolean canEvaluate(final Template template) {
- return true;
- }
-
}
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/IWorkbenchTemplateContext.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/IWorkbenchTemplateContext.java
index e926e49..b1c9214 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/IWorkbenchTemplateContext.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/IWorkbenchTemplateContext.java
@@ -18,6 +18,9 @@
import org.eclipse.jface.text.templates.Template;
import org.eclipse.jface.text.templates.TemplateException;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
import org.eclipse.statet.ltk.ui.sourceediting.ISourceEditor;
@@ -25,13 +28,15 @@
/**
* Can extend {@link org.eclipse.jface.text.templates.TemplateContext} and similar contexts.
*/
+@NonNullByDefault
public interface IWorkbenchTemplateContext {
- public ISourceUnit getSourceUnit();
+ public @Nullable ISourceUnit getSourceUnit();
- public ISourceEditor getEditor();
+ public @Nullable ISourceEditor getEditor();
- public String evaluateInfo(Template template) throws BadLocationException, TemplateException;
+ public @Nullable String evaluateInfo(Template template)
+ throws BadLocationException, TemplateException;
}
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/NewDocTemplateGenerateWizardPage.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/NewDocTemplateGenerateWizardPage.java
index 3e7ee72..7d5cab8 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/NewDocTemplateGenerateWizardPage.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/NewDocTemplateGenerateWizardPage.java
@@ -17,14 +17,14 @@
import java.util.ArrayList;
import java.util.List;
-import org.eclipse.jface.text.templates.ContextTypeRegistry;
import org.eclipse.jface.text.templates.Template;
-import org.eclipse.jface.text.templates.persistence.TemplatePersistenceData;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
+import org.eclipse.text.templates.ContextTypeRegistry;
+import org.eclipse.text.templates.TemplatePersistenceData;
import org.eclipse.statet.ecommons.preferences.core.Preference;
import org.eclipse.statet.ecommons.preferences.core.util.PreferenceUtils;
@@ -77,7 +77,7 @@
}
protected List<Template> getAvailableTemplates() {
- final List<TemplatePersistenceData> templateDatas= this.config.getTemplates().getTemplates(this.categoryId);
+ final List<? extends TemplatePersistenceData> templateDatas= this.config.getTemplates().getTemplates(this.categoryId);
final List<Template> templates= new ArrayList<>(templateDatas.size());
for (final TemplatePersistenceData templateData : templateDatas) {
final Template template= templateData.getTemplate();
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/SourceEditorContextType.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/SourceEditorContextType.java
index ca9c080..c241da5 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/SourceEditorContextType.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/SourceEditorContextType.java
@@ -14,10 +14,11 @@
package org.eclipse.statet.ltk.ui.templates;
+import static org.eclipse.statet.jcommons.lang.ObjectUtils.nonNullAssert;
+
import java.util.ArrayList;
import java.util.List;
-import org.eclipse.core.runtime.Assert;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.Document;
import org.eclipse.jface.text.IDocument;
@@ -35,6 +36,9 @@
import org.eclipse.text.edits.ReplaceEdit;
import org.eclipse.text.edits.TextEdit;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
import org.eclipse.statet.internal.ltk.ui.TemplatesMessages;
import org.eclipse.statet.ltk.core.IElementName;
import org.eclipse.statet.ltk.core.util.UserInfo;
@@ -42,6 +46,7 @@
import org.eclipse.statet.ltk.model.core.elements.IWorkspaceSourceUnit;
+@NonNullByDefault
public class SourceEditorContextType extends TemplateContextType {
@@ -52,7 +57,7 @@
}
@Override
- protected String resolve(TemplateContext context) {
+ protected String resolve(final TemplateContext context) {
return UserInfo.getAuthorInfo().getName();
}
}
@@ -64,7 +69,7 @@
}
@Override
- protected String resolve(TemplateContext context) {
+ protected String resolve(final TemplateContext context) {
return UserInfo.getAuthorInfo().getEmail();
}
}
@@ -80,7 +85,7 @@
}
@Override
- protected String resolve(final TemplateContext context) {
+ protected @Nullable String resolve(final TemplateContext context) {
return context.getVariable(getType());
}
@@ -89,7 +94,7 @@
protected static class InitialSelectionStart extends TemplateVariableResolver {
public InitialSelectionStart() {
- super(SELECT_START_VARIABLE, TemplatesMessages.Templates_Variable_SelectionBegin_description);
+ super(SELECT_START_VAR_NAME, TemplatesMessages.Templates_Variable_SelectionBegin_description);
}
@Override
@@ -102,7 +107,7 @@
protected static class InitialSelectionEnd extends TemplateVariableResolver {
public InitialSelectionEnd() {
- super(SELECT_END_VARIABLE, TemplatesMessages.Templates_Variable_SelectionEnd_description);
+ super(SELECT_END_VAR_NAME, TemplatesMessages.Templates_Variable_SelectionEnd_description);
}
@Override
@@ -120,7 +125,7 @@
protected static class File extends SimpleTemplateVariableResolver {
public File() {
- super("file_name", TemplatesMessages.Templates_Variable_File_description); //$NON-NLS-1$
+ super(FILE_NAME_VAR_NAME, TemplatesMessages.Templates_Variable_File_description);
}
@Override
@@ -144,7 +149,7 @@
protected static class Project extends SimpleTemplateVariableResolver {
public Project() {
- super("enclosing_project", TemplatesMessages.Templates_Variable_EnclosingProject_description); //$NON-NLS-1$
+ super("enclosing_project", TemplatesMessages.Templates_Variable_EnclosingProject_description); //$NON-NLS-1$
}
@Override
@@ -179,7 +184,7 @@
return "TODO"; //$NON-NLS-1$
}
- protected String getTag(final ISourceUnit su) {
+ protected @Nullable String getTag(final @Nullable ISourceUnit su) {
return null;
}
@@ -203,9 +208,9 @@
}
- public static final String FILENAME_VARIABLE= "file_name"; //$NON-NLS-1$
- public static final String SELECT_START_VARIABLE= "selection_begin"; //$NON-NLS-1$
- public static final String SELECT_END_VARIABLE= "selection_end"; ////$NON-NLS-1$
+ public static final String FILE_NAME_VAR_NAME= "file_name"; //$NON-NLS-1$
+ public static final String SELECT_START_VAR_NAME= "selection_begin"; //$NON-NLS-1$
+ public static final String SELECT_END_VAR_NAME= "selection_end"; ////$NON-NLS-1$
public SourceEditorContextType(final String id, final String name) {
@@ -247,11 +252,11 @@
@Override
public void resolve(final TemplateBuffer buffer, final TemplateContext context) throws MalformedTreeException, BadLocationException {
- Assert.isNotNull(context);
+ nonNullAssert(context);
final TemplateVariable[] variables= buffer.getVariables();
final IDocument document= new Document(buffer.getString());
- final List<TextEdit> positions= TemplatesUtil.variablesToPositions(variables);
+ final List<TextEdit> positions= TemplateUtils.variablesToPositions(variables);
final List<TextEdit> edits= new ArrayList<>(5);
@@ -286,7 +291,7 @@
for (int k= 0; k != oldOffsets.length; k++) {
String thisValue= value;
if (multiLine) {
- final String indent= TemplatesUtil.searchIndentation(document, oldOffsets[k]);
+ final String indent= TemplateUtils.searchIndentation(document, oldOffsets[k]);
if (indent.length() > 0) {
final StringBuilder temp= new StringBuilder(thisValue);
int offset= 0;
@@ -295,7 +300,7 @@
if (search[0] == -1) {
break;
}
- offset= search[0]+ln[search[1]].length();
+ offset= search[0] + ln[search[1]].length();
temp.insert(offset, indent);
offset+= indent.length();
}
@@ -312,7 +317,7 @@
edit.addChildren(edits.toArray(new TextEdit[edits.size()]));
edit.apply(document, TextEdit.UPDATE_REGIONS);
- TemplatesUtil.positionsToVariables(positions, variables);
+ TemplateUtils.positionsToVariables(positions, variables);
buffer.setContent(document.get(), variables);
}
@@ -324,12 +329,15 @@
}
@Override
- public boolean equals(final Object obj) {
- if (!(obj instanceof SourceEditorContextType)) {
- return false;
+ public boolean equals(final @Nullable Object obj) {
+ if (this == obj) {
+ return true;
}
- final SourceEditorContextType other= (SourceEditorContextType) obj;
- return getId().equals(other.getId());
+ if (obj instanceof SourceEditorContextType) {
+ final SourceEditorContextType other= (SourceEditorContextType) obj;
+ return getId().equals(other.getId());
+ }
+ return false;
}
}
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/SourceEditorTemplateContext.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/SourceEditorTemplateContext.java
index 6f18ea4..ab52a73 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/SourceEditorTemplateContext.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/SourceEditorTemplateContext.java
@@ -33,15 +33,23 @@
import org.eclipse.text.edits.MultiTextEdit;
import org.eclipse.text.edits.TextEdit;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
import org.eclipse.statet.ecommons.text.TextUtil;
import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
import org.eclipse.statet.ltk.ui.sourceediting.ISourceEditor;
+@NonNullByDefault
public class SourceEditorTemplateContext extends DocumentTemplateContext implements IWorkbenchTemplateContext {
+ protected static final String SELECTION_VAR_NAME= "selection"; //$NON-NLS-1$
+ protected static final String INDENTATION_VAR_NAME= "indentation"; //$NON-NLS-1$
+
+
private final ISourceEditor editor;
@@ -58,12 +66,13 @@
}
@Override
- public ISourceUnit getSourceUnit() {
+ public @Nullable ISourceUnit getSourceUnit() {
return this.editor.getSourceUnit();
}
+
@Override
- public String evaluateInfo(final Template template) throws BadLocationException, TemplateException {
+ public @Nullable String evaluateInfo(final Template template) throws BadLocationException, TemplateException {
final TemplateBuffer buffer= super.evaluate(template);
if (buffer != null) {
return buffer.getString();
@@ -72,7 +81,7 @@
}
@Override
- public TemplateBuffer evaluate(final Template template) throws BadLocationException, TemplateException {
+ public @Nullable TemplateBuffer evaluate(final Template template) throws BadLocationException, TemplateException {
if (!canEvaluate(template)) {
return null;
}
@@ -101,7 +110,7 @@
private void indent(final TemplateBuffer buffer) throws BadLocationException {
final TemplateVariable[] variables= buffer.getVariables();
- final List<TextEdit> positions= TemplatesUtil.variablesToPositions(variables);
+ final List<TextEdit> positions= TemplateUtils.variablesToPositions(variables);
final IDocument baseDoc= getDocument();
final IDocument templateDoc= new Document(buffer.getString());
@@ -119,7 +128,7 @@
root.removeChild(edit);
}
else {
- indentation= TemplatesUtil.searchIndentation(baseDoc, getStart());
+ indentation= TemplateUtils.searchIndentation(baseDoc, getStart());
}
// following lines
@@ -133,7 +142,7 @@
root.removeChild(edit);
}
- TemplatesUtil.positionsToVariables(positions, variables);
+ TemplateUtils.positionsToVariables(positions, variables);
buffer.setContent(templateDoc.get(), variables);
}
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/TemplatePreview.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/TemplatePreview.java
index 3b6a596..3b598e6 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/TemplatePreview.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/TemplatePreview.java
@@ -21,11 +21,11 @@
import org.eclipse.jface.text.Document;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.source.SourceViewer;
-import org.eclipse.jface.text.templates.ContextTypeRegistry;
import org.eclipse.jface.text.templates.Template;
import org.eclipse.jface.text.templates.TemplateContextType;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
+import org.eclipse.text.templates.ContextTypeRegistry;
import org.eclipse.ui.editors.text.EditorsUI;
import org.eclipse.statet.ecommons.preferences.ui.SettingsUpdater;
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/TemplateSelectionComposite.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/TemplateSelectionComposite.java
index b4ef7e9..f19ba33 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/TemplateSelectionComposite.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/TemplateSelectionComposite.java
@@ -18,7 +18,6 @@
import org.eclipse.jface.layout.PixelConverter;
import org.eclipse.jface.text.source.SourceViewer;
-import org.eclipse.jface.text.templates.ContextTypeRegistry;
import org.eclipse.jface.text.templates.Template;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ColumnWeightData;
@@ -33,6 +32,7 @@
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
+import org.eclipse.text.templates.ContextTypeRegistry;
import org.eclipse.statet.jcommons.collections.ImCollections;
import org.eclipse.statet.jcommons.collections.ImList;
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/TemplatesUtil.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/TemplateUtils.java
similarity index 91%
rename from ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/TemplatesUtil.java
rename to ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/TemplateUtils.java
index 90ad28f..ac3544d 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/TemplatesUtil.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/TemplateUtils.java
@@ -30,25 +30,29 @@
import org.eclipse.text.edits.RangeMarker;
import org.eclipse.text.edits.TextEdit;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
-public class TemplatesUtil {
+
+@NonNullByDefault
+public class TemplateUtils {
public static class EvaluatedTemplate {
private String content;
- private IRegion select;
+ private @Nullable IRegion select;
private final String lineDelimiter;
- private AbstractDocument postEditDocument;
- private Position postEditSelectPosition;
+ private @Nullable AbstractDocument postEditDocument;
+ private @Nullable Position postEditSelectPosition;
public EvaluatedTemplate(final TemplateBuffer buffer, final String lineDelimiter) {
setContent(buffer.getString());
- final TemplateVariable selectStartVariable= findVariable(buffer, SourceEditorContextType.SELECT_START_VARIABLE);
- final TemplateVariable selectEndVariable= findVariable(buffer, SourceEditorContextType.SELECT_END_VARIABLE);
+ final TemplateVariable selectStartVariable= findVariable(buffer, SourceEditorContextType.SELECT_START_VAR_NAME);
+ final TemplateVariable selectEndVariable= findVariable(buffer, SourceEditorContextType.SELECT_END_VAR_NAME);
if (selectStartVariable != null && selectStartVariable.getOffsets().length == 1) {
this.select= new Region(selectStartVariable.getOffsets()[0],
(selectEndVariable != null && selectEndVariable.getOffsets().length == 1) ?
@@ -78,7 +82,7 @@
/**
* Returns the region to select, if specified
*/
- public IRegion getRegionToSelect() {
+ public @Nullable IRegion getRegionToSelect() {
return this.select;
}
@@ -174,7 +178,7 @@
return positions;
}
- public static TemplateVariable findVariable(final TemplateBuffer buffer, final String variableType) {
+ public static @Nullable TemplateVariable findVariable(final TemplateBuffer buffer, final String variableType) {
final TemplateVariable[] variables= buffer.getVariables();
for (final TemplateVariable cand : variables) {
if (variableType.equals(cand.getType())) {
@@ -196,7 +200,7 @@
* @param lineIndent string to use as line indentation
* @throws BadLocationException
*/
- public static void indentTemplateDocument(final AbstractDocument doc, final String lineIndent)
+ public static void indentTemplateDocument(final AbstractDocument doc, final String lineIndent)
throws BadLocationException {
final int lastLine= doc.getNumberOfLines()-1;
for (int templateLine= 0; templateLine < lastLine; templateLine++) {
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/config/AbstractTemplatesPreferencePage.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/config/AbstractTemplatesPreferencePage.java
index 6841c00..ce0c930 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/config/AbstractTemplatesPreferencePage.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/config/AbstractTemplatesPreferencePage.java
@@ -21,11 +21,11 @@
import org.eclipse.jface.text.source.SourceViewer;
import org.eclipse.jface.text.templates.Template;
import org.eclipse.jface.text.templates.TemplateContextType;
-import org.eclipse.jface.text.templates.persistence.TemplatePersistenceData;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
+import org.eclipse.text.templates.TemplatePersistenceData;
import org.eclipse.ui.texteditor.templates.TemplatePreferencePage;
import org.eclipse.statet.ecommons.preferences.ui.SettingsUpdater;
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/config/CodeTemplateConfigurationBlock.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/config/CodeTemplateConfigurationBlock.java
index dace699..0ed806a 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/config/CodeTemplateConfigurationBlock.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/config/CodeTemplateConfigurationBlock.java
@@ -39,10 +39,7 @@
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.resource.LocalResourceManager;
import org.eclipse.jface.text.source.SourceViewer;
-import org.eclipse.jface.text.templates.ContextTypeRegistry;
import org.eclipse.jface.text.templates.Template;
-import org.eclipse.jface.text.templates.persistence.TemplatePersistenceData;
-import org.eclipse.jface.text.templates.persistence.TemplateReaderWriter;
import org.eclipse.jface.viewers.DecorationOverlayIcon;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITreeContentProvider;
@@ -63,10 +60,16 @@
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
+import org.eclipse.text.templates.ContextTypeRegistry;
+import org.eclipse.text.templates.TemplatePersistenceData;
+import org.eclipse.text.templates.TemplateReaderWriter;
import org.eclipse.ui.statushandlers.StatusManager;
import org.eclipse.statet.jcommons.collections.ImCollections;
import org.eclipse.statet.jcommons.collections.ImList;
+import org.eclipse.statet.jcommons.lang.NonNull;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
import org.eclipse.statet.ecommons.preferences.core.Preference;
import org.eclipse.statet.ecommons.preferences.ui.ManagedConfigurationBlock;
@@ -100,6 +103,7 @@
public static final int DEFAULT_BY_CATEGORY= 0b0_00000010_00000000;
+ @NonNullByDefault
protected static class TemplateItem {
private final TemplateCategory category;
@@ -132,13 +136,17 @@
}
@Override
- public boolean equals(final Object obj) {
- if (!(obj instanceof TemplateItem)) {
- return false;
+ public boolean equals(final @Nullable Object obj) {
+ if (this == obj) {
+ return true;
}
- final TemplateItem other= (TemplateItem) obj;
- return (this.contrib == other.contrib && this.category.equals(other.category)
- && this.data.equals(other.data) );
+ if (obj instanceof TemplateItem) {
+ final TemplateItem other= (TemplateItem) obj;
+ return (this.contrib == other.contrib
+ && this.category.equals(other.category)
+ && this.data.equals(other.data) );
+ }
+ return false;
}
}
@@ -171,7 +179,7 @@
}
@Override
- public Object getParent(final Object element) {
+ public @Nullable Object getParent(final Object element) {
if (element instanceof TemplateItem) {
return ((TemplateItem) element).category;
}
@@ -199,14 +207,14 @@
else {
doGetChildren(category, items);
}
- return items.toArray(new TemplateItem[items.size()]);
+ return items.toArray(new @NonNull TemplateItem[items.size()]);
}
return new Object[0];
}
protected void doGetChildren(final TemplateCategory category, final List<TemplateItem> items) {
final ITemplateContribution contrib= category.getTemplateContrib(true);
- final List<TemplatePersistenceData> templates= contrib.getTemplates(category.getId());
+ final List<? extends TemplatePersistenceData> templates= contrib.getTemplates(category.getId());
if (templates != null) {
for (final TemplatePersistenceData templateData : templates) {
final Template contribTemplate= templateData.getTemplate();
@@ -220,7 +228,7 @@
public TemplateItem findItemByName(final TemplateCategory category, final String name) {
final ITemplateContribution contrib= category.getTemplateContrib(true);
- final List<TemplatePersistenceData> templates= contrib.getTemplates(category.getId());
+ final List<? extends TemplatePersistenceData> templates= contrib.getTemplates(category.getId());
if (templates != null) {
for (final TemplatePersistenceData templateData : templates) {
final Template contribTemplate= templateData.getTemplate();
@@ -239,7 +247,7 @@
public boolean containsItemContent(final TemplateCategory category, final Template template) {
final ITemplateContribution contrib= category.getTemplateContrib(true);
- final List<TemplatePersistenceData> templates= contrib.getTemplates(category.getId());
+ final List<? extends TemplatePersistenceData> templates= contrib.getTemplates(category.getId());
if (templates != null) {
for (final TemplatePersistenceData templateData : templates) {
final Template contribTemplate= templateData.getTemplate();
@@ -257,8 +265,8 @@
private class TemplateDataAdapter extends DataAdapter.TreeAdapter<TemplateItem> {
- private final Map<String, IObservableValue<String>> defaultValues;
- private final Map<Preference<?>, String> prefs;
+ private final @Nullable Map<String, IObservableValue<String>> defaultValues;
+ private final @Nullable Map<Preference<?>, String> prefs;
public TemplateDataAdapter(final ITreeContentProvider treeProvider,
@@ -281,7 +289,7 @@
}
@Override
- protected ITemplateContribution getContainerFor(final Object element) {
+ protected @Nullable ITemplateContribution getContainerFor(final Object element) {
if (element instanceof TemplateItem) {
return ((TemplateItem) element).contrib;
}
@@ -654,7 +662,7 @@
protected EditTemplateDialog createEditDialog(final Template template, final int command,
final SourceEditorViewerConfigurator configurator,
- final TemplateVariableProcessor processor, final ContextTypeRegistry registry) {
+ final TemplateVariableProcessor processor, final ContextTypeRegistry registry) {
return new EditTemplateDialog(
getShell(), template, ((command & ButtonGroup.ADD_ANY) != 0),
EditTemplateDialog.CUSTOM_TEMPLATE, configurator, processor, registry,
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/config/EditTemplateDialog.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/config/EditTemplateDialog.java
index ec4320c..ed75123 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/config/EditTemplateDialog.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/config/EditTemplateDialog.java
@@ -27,7 +27,6 @@
import org.eclipse.jface.text.TextEvent;
import org.eclipse.jface.text.source.ISourceViewer;
import org.eclipse.jface.text.source.SourceViewer;
-import org.eclipse.jface.text.templates.ContextTypeRegistry;
import org.eclipse.jface.text.templates.Template;
import org.eclipse.jface.text.templates.TemplateContextType;
import org.eclipse.jface.text.templates.TemplateException;
@@ -51,6 +50,7 @@
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
+import org.eclipse.text.templates.ContextTypeRegistry;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.texteditor.ITextEditorActionDefinitionIds;
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/config/ITemplateCategoryConfiguration.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/config/ITemplateCategoryConfiguration.java
index 7051da5..141dfd0 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/config/ITemplateCategoryConfiguration.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/config/ITemplateCategoryConfiguration.java
@@ -15,8 +15,8 @@
package org.eclipse.statet.ltk.ui.templates.config;
import org.eclipse.core.resources.IProject;
-import org.eclipse.jface.text.templates.ContextTypeRegistry;
-import org.eclipse.jface.text.templates.persistence.TemplatePersistenceData;
+import org.eclipse.text.templates.ContextTypeRegistry;
+import org.eclipse.text.templates.TemplatePersistenceData;
import org.eclipse.statet.ecommons.preferences.core.Preference;
import org.eclipse.statet.ecommons.templates.TemplateVariableProcessor;
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/config/ITemplateContribution.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/config/ITemplateContribution.java
index 8a334eb..9652928 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/config/ITemplateContribution.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/config/ITemplateContribution.java
@@ -18,15 +18,19 @@
import java.util.List;
import org.eclipse.jface.text.templates.Template;
-import org.eclipse.jface.text.templates.persistence.TemplatePersistenceData;
+import org.eclipse.text.templates.TemplatePersistenceData;
+
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+@NonNullByDefault
public interface ITemplateContribution {
- List<TemplatePersistenceData> getTemplates(String categoryId);
+ List<? extends TemplatePersistenceData> getTemplates(String categoryId);
- Template findTemplate(String contextTypeId, String name);
+ @Nullable Template findTemplate(String contextTypeId, String name);
void add(String categoryId, TemplatePersistenceData data);
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/config/TemplateCategory.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/config/TemplateCategory.java
index 2fdca43..2a8c81d 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/config/TemplateCategory.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/config/TemplateCategory.java
@@ -18,7 +18,9 @@
import java.util.Set;
import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jface.text.templates.ContextTypeRegistry;
+import org.eclipse.text.templates.ContextTypeRegistry;
+
+import org.eclipse.statet.jcommons.lang.Nullable;
import org.eclipse.statet.ecommons.preferences.core.Preference;
@@ -38,7 +40,7 @@
private ContextTypeRegistry contextTypeRegistry;
private boolean defaultPrefCheck;
- private Set<String> templateNames;
+ private @Nullable Set<String> templateNames;
public TemplateCategory(final String id,
@@ -79,11 +81,11 @@
return this.label;
}
- public ImageDescriptor getImage() {
+ public @Nullable ImageDescriptor getImage() {
return this.image;
}
- public ImageDescriptor getItemImage() {
+ public @Nullable ImageDescriptor getItemImage() {
return this.itemImage;
}
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/config/TemplateStoreContribution.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/config/TemplateStoreContribution.java
index 7a39a79..a6d8818 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/config/TemplateStoreContribution.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/config/TemplateStoreContribution.java
@@ -18,12 +18,15 @@
import java.util.List;
import org.eclipse.jface.text.templates.Template;
-import org.eclipse.jface.text.templates.persistence.TemplatePersistenceData;
import org.eclipse.jface.text.templates.persistence.TemplateStore;
+import org.eclipse.text.templates.TemplatePersistenceData;
import org.eclipse.statet.jcommons.collections.ImCollections;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+@NonNullByDefault
public class TemplateStoreContribution implements ITemplateContribution {
@@ -41,7 +44,7 @@
}
@Override
- public Template findTemplate(final String contextTypeId, final String name) {
+ public @Nullable Template findTemplate(final String contextTypeId, final String name) {
return this.templateStore.findTemplate(name, contextTypeId);
}
@@ -87,15 +90,15 @@
}
@Override
- public boolean equals(final Object obj) {
+ public boolean equals(final @Nullable Object obj) {
if (this == obj) {
return true;
}
- if (obj == null || getClass() != obj.getClass()) {
- return false;
+ if (obj != null && getClass() == obj.getClass()) {
+ final TemplateStoreContribution other= (TemplateStoreContribution) obj;
+ return (this.templateStore == other.templateStore);
}
- final TemplateStoreContribution other= (TemplateStoreContribution) obj;
- return (this.templateStore == other.templateStore);
+ return false;
}
}