1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-25 18:05:33 +02:00

Bug 399014 - "Enclosing namespace does not exist" error is too harsh

This commit is contained in:
Sergey Prigogin 2013-01-24 12:27:02 -08:00
parent f1ca02367b
commit a861f63691
3 changed files with 20 additions and 21 deletions

View file

@ -1,5 +1,5 @@
/******************************************************************************* /*******************************************************************************
* Copyright (c) 2004, 2011 QNX Software Systems and others. * Copyright (c) 2004, 2013 QNX Software Systems and others.
* All rights reserved. This program and the accompanying materials * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0 * are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
@ -29,7 +29,6 @@ public final class NewClassWizardMessages extends NLS {
public static String NewClassCreationWizardPage_namespace_label; public static String NewClassCreationWizardPage_namespace_label;
public static String NewClassCreationWizardPage_namespace_button; public static String NewClassCreationWizardPage_namespace_button;
public static String NewClassCreationWizardPage_error_EnterNamespace; public static String NewClassCreationWizardPage_error_EnterNamespace;
public static String NewClassCreationWizardPage_error_EnclosingNamespaceNotExists;
public static String NewClassCreationWizardPage_error_NamespaceExistsDifferentCase; public static String NewClassCreationWizardPage_error_NamespaceExistsDifferentCase;
public static String NewClassCreationWizardPage_error_TypeMatchingNamespaceExists; public static String NewClassCreationWizardPage_error_TypeMatchingNamespaceExists;
public static String NewClassCreationWizardPage_error_TypeMatchingNamespaceExistsDifferentCase; public static String NewClassCreationWizardPage_error_TypeMatchingNamespaceExistsDifferentCase;

View file

@ -1,5 +1,5 @@
############################################################################### ###############################################################################
# Copyright (c) 2004, 2011 QNX Software Systems and others. # Copyright (c) 2004, 2013 QNX Software Systems and others.
# All rights reserved. This program and the accompanying materials # All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v1.0 # are made available under the terms of the Eclipse Public License v1.0
# which accompanies this distribution, and is available at # which accompanies this distribution, and is available at
@ -34,11 +34,10 @@ NewClassCreationWizardPage_namespace_label=&Namespace:
NewClassCreationWizardPage_namespace_button=Bro&wse... NewClassCreationWizardPage_namespace_button=Bro&wse...
NewClassCreationWizardPage_error_EnterNamespace=Namespace is empty. NewClassCreationWizardPage_error_EnterNamespace=Namespace is empty.
NewClassCreationWizardPage_error_EnclosingNamespaceNotExists=Enclosing namespace does not exist.
NewClassCreationWizardPage_error_NamespaceExistsDifferentCase=Namespace with the same name exists in a different scope. NewClassCreationWizardPage_error_NamespaceExistsDifferentCase=Namespace with the same name exists in a different scope.
NewClassCreationWizardPage_error_TypeMatchingNamespaceExists=Another type with the same name as specified namespace exists. NewClassCreationWizardPage_error_TypeMatchingNamespaceExists=Another type with the same name as specified namespace exists.
NewClassCreationWizardPage_error_TypeMatchingNamespaceExistsDifferentCase=Another type with the same name as specified namespace exists in a different scope. NewClassCreationWizardPage_error_TypeMatchingNamespaceExistsDifferentCase=Another type with the same name as specified namespace exists in a different scope.
NewClassCreationWizardPage_warning_NamespaceNotExists=Namespace does not exist. A new namespace will be created. NewClassCreationWizardPage_warning_NamespaceNotExists=Namespace ''{0}'' does not exist. A new namespace will be created.
NewClassCreationWizardPage_error_InvalidNamespace=Namespace is not valid. {0}. NewClassCreationWizardPage_error_InvalidNamespace=Namespace is not valid. {0}.
NewClassCreationWizardPage_warning_NamespaceDiscouraged=Namespace is discouraged. {0}. NewClassCreationWizardPage_warning_NamespaceDiscouraged=Namespace is discouraged. {0}.

View file

@ -1,5 +1,5 @@
/******************************************************************************* /*******************************************************************************
* Copyright (c) 2004, 2011 QNX Software Systems and others. * Copyright (c) 2004, 2013 QNX Software Systems and others.
* All rights reserved. This program and the accompanying materials * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0 * are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
@ -1591,17 +1591,8 @@ public class NewClassCreationWizardPage extends NewElementWizardPage {
ICProject project = getCurrentProject(); ICProject project = getCurrentProject();
if (project != null) { if (project != null) {
/* search for parent name space first */ int searchResult = NewClassWizardUtil.searchForCppType(typeName, project, ICPPNamespace.class);
int searchResult; switch (searchResult) {
if (typeName.isQualified()) {
searchResult = NewClassWizardUtil.searchForCppType(typeName.getEnclosingTypeName(),project, ICPPNamespace.class);
if (searchResult != NewClassWizardUtil.SEARCH_MATCH_FOUND_EXACT) {
status.setError(NewClassWizardMessages.NewClassCreationWizardPage_error_EnclosingNamespaceNotExists);
return status;
}
}
searchResult = NewClassWizardUtil.searchForCppType(typeName, project, ICPPNamespace.class);
switch(searchResult) {
case NewClassWizardUtil.SEARCH_MATCH_FOUND_EXACT: case NewClassWizardUtil.SEARCH_MATCH_FOUND_EXACT:
status.setOK(); status.setOK();
return status; return status;
@ -1615,7 +1606,17 @@ public class NewClassCreationWizardPage extends NewElementWizardPage {
status.setWarning(NewClassWizardMessages.NewClassCreationWizardPage_error_TypeMatchingNamespaceExistsDifferentCase); status.setWarning(NewClassWizardMessages.NewClassCreationWizardPage_error_TypeMatchingNamespaceExistsDifferentCase);
return status; return status;
case NewClassWizardUtil.SEARCH_MATCH_NOTFOUND: case NewClassWizardUtil.SEARCH_MATCH_NOTFOUND:
status.setWarning(NewClassWizardMessages.NewClassCreationWizardPage_warning_NamespaceNotExists); // Find the highest ancestor namespace that does not exist.
IQualifiedTypeName ns = typeName;
while (ns.isQualified()) {
IQualifiedTypeName ns1 = ns.getEnclosingTypeName();
if (NewClassWizardUtil.searchForCppType(ns1, project, ICPPNamespace.class) == NewClassWizardUtil.SEARCH_MATCH_FOUND_EXACT) {
break;
}
ns = ns1;
}
status.setWarning(NLS.bind(NewClassWizardMessages.NewClassCreationWizardPage_warning_NamespaceNotExists,
ns.getFullyQualifiedName()));
break; break;
} }
} }
@ -1638,7 +1639,7 @@ public class NewClassCreationWizardPage extends NewElementWizardPage {
StatusInfo status = new StatusInfo(); StatusInfo status = new StatusInfo();
String className = getClassName(); String className = getClassName();
// must not be empty // Must not be empty.
if (className == null || className.length() == 0) { if (className == null || className.length() == 0) {
status.setError(NewClassWizardMessages.NewClassCreationWizardPage_error_EnterClassName); status.setError(NewClassWizardMessages.NewClassCreationWizardPage_error_EnterClassName);
return status; return status;
@ -1669,7 +1670,7 @@ public class NewClassCreationWizardPage extends NewElementWizardPage {
} }
} }
int searchResult = NewClassWizardUtil.searchForCppType(fullyQualifiedName, project, ICPPClassType.class); int searchResult = NewClassWizardUtil.searchForCppType(fullyQualifiedName, project, ICPPClassType.class);
switch(searchResult) { switch (searchResult) {
case NewClassWizardUtil.SEARCH_MATCH_FOUND_EXACT: case NewClassWizardUtil.SEARCH_MATCH_FOUND_EXACT:
status.setError(NewClassWizardMessages.NewClassCreationWizardPage_error_ClassNameExists); status.setError(NewClassWizardMessages.NewClassCreationWizardPage_error_ClassNameExists);
return status; return status;
@ -1729,7 +1730,7 @@ public class NewClassCreationWizardPage extends NewElementWizardPage {
MultiStatus status = new MultiStatus(CUIPlugin.getPluginId(), IStatus.OK, "", null); //$NON-NLS-1$ MultiStatus status = new MultiStatus(CUIPlugin.getPluginId(), IStatus.OK, "", null); //$NON-NLS-1$
IScannerInfoProvider provider = CCorePlugin.getDefault().getScannerInfoProvider(project.getProject()); IScannerInfoProvider provider = CCorePlugin.getDefault().getScannerInfoProvider(project.getProject());
if (provider != null) { if (provider != null) {
//TODO get the scanner info for the actual source folder // TODO Get the scanner info for the actual source folder.
IScannerInfo info = provider.getScannerInformation(project.getProject()); IScannerInfo info = provider.getScannerInformation(project.getProject());
if (info != null) { if (info != null) {
String[] includePaths = info.getIncludePaths(); String[] includePaths = info.getIncludePaths();