diff options
7 files changed, 56 insertions, 10 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/templates/Parameter.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/templates/Parameter.java index a9a3f33..3139451 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/templates/Parameter.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/templates/Parameter.java @@ -15,6 +15,7 @@ */ package com.android.ide.eclipse.adt.internal.wizards.templates; +import static com.android.ide.eclipse.adt.internal.wizards.templates.NewProjectWizard.ATTR_PACKAGE_NAME; import static com.android.ide.eclipse.adt.internal.wizards.templates.TemplateHandler.ATTR_CONSTRAINTS; import static com.android.ide.eclipse.adt.internal.wizards.templates.TemplateHandler.ATTR_DEFAULT; import static com.android.ide.eclipse.adt.internal.wizards.templates.TemplateHandler.ATTR_HELP; @@ -26,6 +27,8 @@ import com.android.annotations.NonNull; import com.android.annotations.Nullable; import com.android.ide.eclipse.adt.AdtPlugin; import com.android.ide.eclipse.adt.internal.editors.layout.gle2.DomUtilities; +import com.android.ide.eclipse.adt.internal.editors.manifest.ManifestInfo; +import com.android.ide.eclipse.adt.internal.project.BaseProjectHelper; import com.android.ide.eclipse.adt.internal.resources.ResourceNameValidator; import com.android.ide.eclipse.adt.internal.wizards.newproject.ApplicationInfoPage; import com.android.resources.ResourceFolderType; @@ -33,7 +36,10 @@ import com.android.resources.ResourceType; import com.google.common.base.Splitter; import org.eclipse.core.resources.IProject; +import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IStatus; +import org.eclipse.jdt.core.IJavaProject; +import org.eclipse.jdt.core.IType; import org.eclipse.jface.dialogs.IInputValidator; import org.eclipse.jface.fieldassist.ControlDecoration; import org.eclipse.swt.widgets.Control; @@ -146,6 +152,9 @@ class Parameter { } } + /** The template defining the parameter */ + public final TemplateMetadata template; + /** The type of parameter */ @NonNull public final Type type; @@ -208,7 +217,8 @@ class Parameter { /** Project associated with this validator */ private IProject mValidatorProject; - Parameter(@NonNull Element parameter) { + Parameter(@NonNull TemplateMetadata template, @NonNull Element parameter) { + this.template = template; element = parameter; String typeName = parameter.getAttribute(TemplateHandler.ATTR_TYPE); @@ -244,7 +254,12 @@ class Parameter { } } - Parameter(@NonNull Type type, @NonNull String id, @NonNull String initialValue) { + Parameter( + @NonNull TemplateMetadata template, + @NonNull Type type, + @NonNull String id, + @NonNull String initialValue) { + this.template = template; this.type = type; this.id = id; this.value = initialValue; @@ -265,7 +280,7 @@ class Parameter { } @Nullable - public IInputValidator getValidator(@Nullable IProject project) { + public IInputValidator getValidator(@Nullable final IProject project) { if (mNoValidator) { return null; } @@ -341,6 +356,37 @@ class Parameter { return status.getMessage(); } + // Uniqueness + if (project != null && constraints.contains(Constraint.UNIQUE)) { + try { + // Determine the package. + // If there is a package info + + IJavaProject p = BaseProjectHelper.getJavaProject(project); + if (p != null) { + String fqcn = newText; + if (fqcn.indexOf('.') == -1) { + String pkg = null; + Parameter parameter = template.getParameter( + ATTR_PACKAGE_NAME); + if (parameter != null && parameter.value != null) { + pkg = parameter.value.toString(); + } else { + pkg = ManifestInfo.get(project).getPackage(); + } + fqcn = pkg.isEmpty() ? newText : pkg + '.' + newText; + } + + IType t = p.findType(fqcn); + if (t != null && t.exists()) { + return String.format("%1$s already exists", newText); + } + } + } catch (CoreException e) { + AdtPlugin.log(e, null); + } + } + return null; } }; diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/templates/TemplateMetadata.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/templates/TemplateMetadata.java index 13c3f00..cb184b8 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/templates/TemplateMetadata.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/templates/TemplateMetadata.java @@ -86,7 +86,7 @@ class TemplateMetadata { mParameterMap = new HashMap<String, Parameter>(parameters.getLength()); for (int index = 0, max = parameters.getLength(); index < max; index++) { Element element = (Element) parameters.item(index); - Parameter parameter = new Parameter(element); + Parameter parameter = new Parameter(this, element); mParameters.add(parameter); if (parameter.id != null) { mParameterMap.put(parameter.id, parameter); @@ -221,7 +221,7 @@ class TemplateMetadata { if (mIconState.outputName != null) { // Register parameter such that if it is referencing other values, it gets // updated when other values are edited - Parameter outputParameter = new Parameter( + Parameter outputParameter = new Parameter(this, Parameter.Type.STRING, "_iconname", mIconState.outputName); //$NON-NLS-1$ getParameters().add(outputParameter); } diff --git a/templates/activities/BlankActivity/template.xml b/templates/activities/BlankActivity/template.xml index 0368c1a..6afe523 100644 --- a/templates/activities/BlankActivity/template.xml +++ b/templates/activities/BlankActivity/template.xml @@ -12,7 +12,7 @@ id="activityClass" name="Activity Name" type="string" - constraints="class|nonempty" + constraints="class|unique|nonempty" suggest="${layoutToActivity(layoutName)}" default="MainActivity" help="The name of the activity class to create" /> diff --git a/templates/activities/FullscreenActivity/template.xml b/templates/activities/FullscreenActivity/template.xml index 8ebbb03..165854c 100644 --- a/templates/activities/FullscreenActivity/template.xml +++ b/templates/activities/FullscreenActivity/template.xml @@ -14,7 +14,7 @@ id="activityClass" name="Activity Name" type="string" - constraints="class|nonempty" + constraints="class|unique|nonempty" default="FullscreenActivity" help="The name of the activity class to create" /> diff --git a/templates/activities/LoginActivity/template.xml b/templates/activities/LoginActivity/template.xml index bca6efb..40a413a 100644 --- a/templates/activities/LoginActivity/template.xml +++ b/templates/activities/LoginActivity/template.xml @@ -14,7 +14,7 @@ id="activityClass" name="Activity Name" type="string" - constraints="class|nonempty" + constraints="class|unique|nonempty" default="LoginActivity" help="The name of the activity class to create" /> diff --git a/templates/activities/SettingsActivity/template.xml b/templates/activities/SettingsActivity/template.xml index cc990858..e024aff 100644 --- a/templates/activities/SettingsActivity/template.xml +++ b/templates/activities/SettingsActivity/template.xml @@ -14,7 +14,7 @@ id="activityClass" name="Activity Name" type="string" - constraints="class|nonempty" + constraints="class|unique|nonempty" default="SettingsActivity" help="The name of the activity class to create" /> diff --git a/templates/docs/index.html b/templates/docs/index.html index f8e89eb..77623fb 100644 --- a/templates/docs/index.html +++ b/templates/docs/index.html @@ -166,7 +166,7 @@ id="activityName" name="Activity Name" type="string" - constraints="class|nonempty" + constraints="class|unique|nonempty" suggest="${layoutToActivity(layoutName)}" default="MainActivity" help="The name of the activity class to create." /> |