diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/LanguageMappingStore.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/LanguageMappingStore.java
index 09a00f89f14..29f72e6ab35 100644
--- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/LanguageMappingStore.java
+++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/LanguageMappingStore.java
@@ -34,6 +34,7 @@ import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.CCorePreferenceConstants;
import org.eclipse.cdt.core.language.ProjectLanguageConfiguration;
import org.eclipse.cdt.core.language.WorkspaceLanguageConfiguration;
+import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
import org.eclipse.cdt.core.settings.model.ICProjectDescription;
import org.eclipse.cdt.core.settings.model.ICStorageElement;
import org.eclipse.cdt.internal.core.Util;
@@ -71,6 +72,13 @@ public class LanguageMappingStore {
ICProjectDescription descriptor = getProjectDescription(project, false);
if (descriptor != null) {
ICStorageElement rootElement = descriptor.getStorage(LANGUAGE_MAPPING_ID, false);
+ if (rootElement == null) {
+ // bug 367061 - backwards compatibility: fallback to default configuration settings
+ ICConfigurationDescription cfgDesc = descriptor.getDefaultSettingConfiguration();
+ if (cfgDesc != null) {
+ rootElement = cfgDesc.getStorage(LANGUAGE_MAPPING_ID, false);
+ }
+ }
if (rootElement != null) {
ICStorageElement[] mappingElements = rootElement.getChildrenByName(PROJECT_MAPPINGS);
if (mappingElements.length > 0) {
@@ -143,6 +151,11 @@ public class LanguageMappingStore {
public void storeMappings(IProject project, ProjectLanguageConfiguration config) throws CoreException {
ICProjectDescription descriptor = getProjectDescription(project, true);
+ ICConfigurationDescription cfgDesc = descriptor.getDefaultSettingConfiguration();
+ // remove old storage location if any
+ if (cfgDesc != null && cfgDesc.getStorage(LANGUAGE_MAPPING_ID, false) != null) {
+ cfgDesc.removeStorage(LANGUAGE_MAPPING_ID);
+ }
ICStorageElement rootElement = descriptor.getStorage(LANGUAGE_MAPPING_ID, true);
// clear all children and settings
rootElement.clear();
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTArrayDeclarator.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTArrayDeclarator.java
index 8ac4dce295b..a9624416912 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTArrayDeclarator.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTArrayDeclarator.java
@@ -6,7 +6,7 @@
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
- * Doug Schaefer (IBM) - Initial API and implementation
+ * Doug Schaefer (IBM) - Initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.core.dom.ast;
@@ -17,7 +17,6 @@ package org.eclipse.cdt.core.dom.ast;
* @noimplement This interface is not intended to be implemented by clients.
*/
public interface IASTArrayDeclarator extends IASTDeclarator {
-
/**
* Node property that describes the relationship between an
* IASTArrayDeclarator
and an IASTArrayModifier
.
@@ -43,11 +42,13 @@ public interface IASTArrayDeclarator extends IASTDeclarator {
/**
* @since 5.1
*/
+ @Override
public IASTArrayDeclarator copy();
/**
* @since 5.3
*/
+ @Override
public IASTArrayDeclarator copy(CopyStyle style);
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTArrayModifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTArrayModifier.java
index 2ac8cc82e6a..48c9f45fda9 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTArrayModifier.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTArrayModifier.java
@@ -6,7 +6,7 @@
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
- * John Camelon (IBM Rational Software) - Initial API and implementation
+ * John Camelon (IBM Rational Software) - Initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.core.dom.ast;
@@ -18,7 +18,6 @@ package org.eclipse.cdt.core.dom.ast;
* @noimplement This interface is not intended to be implemented by clients.
*/
public interface IASTArrayModifier extends IASTNode {
-
/**
* Node property that describes the relationship between an
* IASTArrayModifier
and an IASTExpression
.
@@ -49,10 +48,12 @@ public interface IASTArrayModifier extends IASTNode {
/**
* @since 5.1
*/
+ @Override
public IASTArrayModifier copy();
/**
* @since 5.3
*/
+ @Override
public IASTArrayModifier copy(CopyStyle style);
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTArraySubscriptExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTArraySubscriptExpression.java
index 8a9043ed081..c97df6dd1dd 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTArraySubscriptExpression.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTArraySubscriptExpression.java
@@ -6,34 +6,23 @@
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
- * John Camelon (IBM Rational Software) - Initial API and implementation
+ * John Camelon (IBM Rational Software) - Initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.core.dom.ast;
/**
- * This interface represents a postfix array subscript expression. x[ 10 ]
- * y.z()[ t * t ]
+ * This interface represents a postfix array subscript expression. x[10]
+ * y.z()[t * t]
*
* @noextend This interface is not intended to be extended by clients.
* @noimplement This interface is not intended to be implemented by clients.
*/
public interface IASTArraySubscriptExpression extends IASTExpression {
-
public static final ASTNodeProperty ARRAY = new ASTNodeProperty(
"IASTArraySubscriptExpression.ARRAY [IASTExpression]"); //$NON-NLS-1$
public static final ASTNodeProperty SUBSCRIPT = new ASTNodeProperty(
"IASTArraySubscriptExpression.SUBSCRIPT - [IASTFunctionArgument]"); //$NON-NLS-1$
- /**
- * @since 5.1
- */
- IASTArraySubscriptExpression copy();
-
- /**
- * @since 5.3
- */
- IASTArraySubscriptExpression copy(CopyStyle style);
-
/**
* Get the expression that represents the array
*
@@ -74,4 +63,16 @@ public interface IASTArraySubscriptExpression extends IASTExpression {
*/
@Deprecated
public void setSubscriptExpression(IASTExpression expression);
+
+ /**
+ * @since 5.1
+ */
+ @Override
+ IASTArraySubscriptExpression copy();
+
+ /**
+ * @since 5.3
+ */
+ @Override
+ IASTArraySubscriptExpression copy(CopyStyle style);
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTPointer.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTPointer.java
index 2d702ea676c..b269da47da4 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTPointer.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTPointer.java
@@ -6,7 +6,7 @@
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
- * Doug Schaefer (IBM) - Initial API and implementation
+ * Doug Schaefer (IBM) - Initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.core.dom.ast;
@@ -17,7 +17,6 @@ package org.eclipse.cdt.core.dom.ast;
* @noimplement This interface is not intended to be implemented by clients.
*/
public interface IASTPointer extends IASTPointerOperator {
-
/**
* Returns whether the pointer is const qualified.
*/
@@ -53,10 +52,12 @@ public interface IASTPointer extends IASTPointerOperator {
/**
* @since 5.1
*/
+ @Override
public IASTPointer copy();
/**
* @since 5.3
*/
+ @Override
public IASTPointer copy(CopyStyle style);
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTArrayDeclarator.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTArrayDeclarator.java
index 3efa82c283c..6c64668ab1e 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTArrayDeclarator.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTArrayDeclarator.java
@@ -6,8 +6,8 @@
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
- * IBM Rational Software - Initial API and implementation
- * Markus Schorn (Wind River Systems)
+ * IBM Rational Software - Initial API and implementation
+ * Markus Schorn (Wind River Systems)
*******************************************************************************/
package org.eclipse.cdt.internal.core.dom.parser.c;
@@ -22,9 +22,8 @@ import org.eclipse.cdt.core.parser.util.ArrayUtil;
* @author jcamelon
*/
public class CASTArrayDeclarator extends CASTDeclarator implements IASTArrayDeclarator {
-
- private IASTArrayModifier [] arrayMods = null;
- private int arrayModsPos=-1;
+ private IASTArrayModifier[] arrayMods = null;
+ private int arrayModsPos = -1;
public CASTArrayDeclarator() {
}
@@ -46,7 +45,7 @@ public class CASTArrayDeclarator extends CASTDeclarator implements IASTArrayDecl
public CASTArrayDeclarator copy(CopyStyle style) {
CASTArrayDeclarator copy = new CASTArrayDeclarator();
copyBaseDeclarator(copy, style);
- for(IASTArrayModifier modifier : getArrayModifiers())
+ for (IASTArrayModifier modifier : getArrayModifiers())
copy.addArrayModifier(modifier == null ? null : modifier.copy());
if (style == CopyStyle.withLocations) {
copy.setCopyLocation(this);
@@ -54,19 +53,24 @@ public class CASTArrayDeclarator extends CASTDeclarator implements IASTArrayDecl
return copy;
}
+ @Override
public IASTArrayModifier[] getArrayModifiers() {
- if( arrayMods == null ) return IASTArrayModifier.EMPTY_ARRAY;
- arrayMods = (IASTArrayModifier[]) ArrayUtil.removeNullsAfter( IASTArrayModifier.class, arrayMods, arrayModsPos );
+ if (arrayMods == null)
+ return IASTArrayModifier.EMPTY_ARRAY;
+ arrayMods = (IASTArrayModifier[]) ArrayUtil.removeNullsAfter(IASTArrayModifier.class,
+ arrayMods, arrayModsPos);
return arrayMods;
}
- public void addArrayModifier(IASTArrayModifier arrayModifier) {
+ @Override
+ public void addArrayModifier(IASTArrayModifier arrayModifier) {
assertNotFrozen();
if (arrayModifier != null) {
arrayModifier.setParent(this);
arrayModifier.setPropertyInParent(ARRAY_MODIFIER);
- arrayMods = (IASTArrayModifier[]) ArrayUtil.append( IASTArrayModifier.class, arrayMods, ++arrayModsPos, arrayModifier );
+ arrayMods = (IASTArrayModifier[]) ArrayUtil.append(IASTArrayModifier.class, arrayMods,
+ ++arrayModsPos, arrayModifier);
}
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTArrayDeclarator.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTArrayDeclarator.java
index 3406fc1f42e..f695773d03e 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTArrayDeclarator.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTArrayDeclarator.java
@@ -6,8 +6,8 @@
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
- * John Camelon (IBM) - Initial API and implementation
- * Markus Schorn (Wind River Systems)
+ * John Camelon (IBM) - Initial API and implementation
+ * Markus Schorn (Wind River Systems)
*******************************************************************************/
package org.eclipse.cdt.internal.core.dom.parser.cpp;
@@ -22,11 +22,9 @@ import org.eclipse.cdt.core.parser.util.ArrayUtil;
* Array declarator for c++.
*/
public class CPPASTArrayDeclarator extends CPPASTDeclarator implements ICPPASTArrayDeclarator {
-
- private IASTArrayModifier [] arrayMods = null;
- private int arrayModsPos=-1;
+ private IASTArrayModifier[] arrayMods = null;
+ private int arrayModsPos = -1;
-
public CPPASTArrayDeclarator(IASTName name, IASTInitializer initializer) {
super(name, initializer);
}
@@ -34,8 +32,7 @@ public class CPPASTArrayDeclarator extends CPPASTDeclarator implements ICPPASTAr
public CPPASTArrayDeclarator(IASTName name) {
super(name);
}
-
-
+
public CPPASTArrayDeclarator() {
}
@@ -43,7 +40,6 @@ public class CPPASTArrayDeclarator extends CPPASTDeclarator implements ICPPASTAr
public CPPASTArrayDeclarator copy() {
return copy(CopyStyle.withoutLocations);
}
-
@Override
public CPPASTArrayDeclarator copy(CopyStyle style) {
@@ -57,22 +53,27 @@ public class CPPASTArrayDeclarator extends CPPASTDeclarator implements ICPPASTAr
}
return copy;
}
-
+
+ @Override
public IASTArrayModifier[] getArrayModifiers() {
- if( arrayMods == null ) return IASTArrayModifier.EMPTY_ARRAY;
- arrayMods = (IASTArrayModifier[]) ArrayUtil.removeNullsAfter( IASTArrayModifier.class, arrayMods, arrayModsPos );
+ if (arrayMods == null)
+ return IASTArrayModifier.EMPTY_ARRAY;
+ arrayMods = (IASTArrayModifier[]) ArrayUtil.removeNullsAfter(IASTArrayModifier.class,
+ arrayMods, arrayModsPos);
return arrayMods;
}
- public void addArrayModifier(IASTArrayModifier arrayModifier) {
+ @Override
+ public void addArrayModifier(IASTArrayModifier arrayModifier) {
assertNotFrozen();
if (arrayModifier != null) {
- arrayMods = (IASTArrayModifier[]) ArrayUtil.append( IASTArrayModifier.class, arrayMods, ++arrayModsPos, arrayModifier );
+ arrayMods = (IASTArrayModifier[]) ArrayUtil.append(IASTArrayModifier.class, arrayMods,
+ ++arrayModsPos, arrayModifier);
arrayModifier.setParent(this);
arrayModifier.setPropertyInParent(ARRAY_MODIFIER);
}
}
-
+
@Override
protected boolean postAccept(ASTVisitor action) {
IASTArrayModifier[] mods = getArrayModifiers();
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTArrayModifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTArrayModifier.java
index 2daa77ea6f6..93ad3de48fd 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTArrayModifier.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTArrayModifier.java
@@ -6,8 +6,8 @@
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
- * IBM - Initial API and implementation
- * Markus Schorn (Wind River Systems)
+ * IBM - Initial API and implementation
+ * Markus Schorn (Wind River Systems)
*******************************************************************************/
package org.eclipse.cdt.internal.core.dom.parser.cpp;
@@ -22,7 +22,6 @@ import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguityParent;
* @author jcamelon
*/
public class CPPASTArrayModifier extends ASTNode implements IASTArrayModifier, IASTAmbiguityParent {
-
private IASTExpression exp;
public CPPASTArrayModifier() {
@@ -32,14 +31,17 @@ public class CPPASTArrayModifier extends ASTNode implements IASTArrayModifier, I
setConstantExpression(exp);
}
+ @Override
public IASTExpression getConstantExpression() {
return exp;
}
+ @Override
public CPPASTArrayModifier copy() {
return copy(CopyStyle.withoutLocations);
}
+ @Override
public CPPASTArrayModifier copy(CopyStyle style) {
CPPASTArrayModifier copy = new CPPASTArrayModifier(exp == null ? null : exp.copy(style));
copy.setOffsetAndLength(this);
@@ -49,7 +51,8 @@ public class CPPASTArrayModifier extends ASTNode implements IASTArrayModifier, I
return copy;
}
- public void setConstantExpression(IASTExpression expression) {
+ @Override
+ public void setConstantExpression(IASTExpression expression) {
assertNotFrozen();
exp = expression;
if (expression != null) {
@@ -62,9 +65,9 @@ public class CPPASTArrayModifier extends ASTNode implements IASTArrayModifier, I
public boolean accept(ASTVisitor action) {
if (action.shouldVisitArrayModifiers) {
switch (action.visit(this)) {
- case ASTVisitor.PROCESS_ABORT : return false;
- case ASTVisitor.PROCESS_SKIP : return true;
- default : break;
+ case ASTVisitor.PROCESS_ABORT: return false;
+ case ASTVisitor.PROCESS_SKIP: return true;
+ default: break;
}
}
if (exp != null && !exp.accept(action))
@@ -76,7 +79,8 @@ public class CPPASTArrayModifier extends ASTNode implements IASTArrayModifier, I
return true;
}
- public void replace(IASTNode child, IASTNode other) {
+ @Override
+ public void replace(IASTNode child, IASTNode other) {
if (child == exp) {
other.setPropertyInParent(child.getPropertyInParent());
other.setParent(child.getParent());
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTArraySubscriptExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTArraySubscriptExpression.java
index de4787694e8..5af070c5710 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTArraySubscriptExpression.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTArraySubscriptExpression.java
@@ -37,13 +37,13 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.Conversions;
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.ExpressionTypes;
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.SemanticUtil;
-public class CPPASTArraySubscriptExpression extends ASTNode implements ICPPASTArraySubscriptExpression, IASTAmbiguityParent {
-
+public class CPPASTArraySubscriptExpression extends ASTNode
+ implements ICPPASTArraySubscriptExpression, IASTAmbiguityParent {
private IASTExpression arrayExpression;
private IASTInitializerClause subscriptExp;
private ICPPFunction overload= UNINITIALIZED_FUNCTION;
- private IASTImplicitName[] implicitNames = null;
+ private IASTImplicitName[] implicitNames;
public CPPASTArraySubscriptExpression() {
}
@@ -53,10 +53,12 @@ public class CPPASTArraySubscriptExpression extends ASTNode implements ICPPASTAr
setArgument(operand);
}
+ @Override
public CPPASTArraySubscriptExpression copy() {
return copy(CopyStyle.withoutLocations);
}
+ @Override
public CPPASTArraySubscriptExpression copy(CopyStyle style) {
CPPASTArraySubscriptExpression copy = new CPPASTArraySubscriptExpression();
copy.setArrayExpression(arrayExpression == null ? null : arrayExpression.copy(style));
@@ -68,11 +70,13 @@ public class CPPASTArraySubscriptExpression extends ASTNode implements ICPPASTAr
return copy;
}
+ @Override
public IASTExpression getArrayExpression() {
return arrayExpression;
}
- public void setArrayExpression(IASTExpression expression) {
+ @Override
+ public void setArrayExpression(IASTExpression expression) {
assertNotFrozen();
arrayExpression = expression;
if (expression != null) {
@@ -81,11 +85,13 @@ public class CPPASTArraySubscriptExpression extends ASTNode implements ICPPASTAr
}
}
- public IASTInitializerClause getArgument() {
+ @Override
+ public IASTInitializerClause getArgument() {
return subscriptExp;
}
- public void setArgument(IASTInitializerClause arg) {
+ @Override
+ public void setArgument(IASTInitializerClause arg) {
assertNotFrozen();
subscriptExp = arg;
if (arg != null) {
@@ -94,19 +100,22 @@ public class CPPASTArraySubscriptExpression extends ASTNode implements ICPPASTAr
}
}
- @Deprecated
+ @Override
+ @Deprecated
public IASTExpression getSubscriptExpression() {
if (subscriptExp instanceof IASTExpression)
return (IASTExpression) subscriptExp;
return null;
}
- @Deprecated
+ @Override
+ @Deprecated
public void setSubscriptExpression(IASTExpression expression) {
setArgument(expression);
}
- public IASTImplicitName[] getImplicitNames() {
+ @Override
+ public IASTImplicitName[] getImplicitNames() {
if (implicitNames == null) {
ICPPFunction overload = getOverload();
if (overload == null || overload instanceof CPPImplicitFunction)
@@ -127,8 +136,7 @@ public class CPPASTArraySubscriptExpression extends ASTNode implements ICPPASTAr
return implicitNames;
}
-
-
+
public ICPPFunction getOverload() {
if (overload == UNINITIALIZED_FUNCTION) {
overload= null;
@@ -174,7 +182,8 @@ public class CPPASTArraySubscriptExpression extends ASTNode implements ICPPASTAr
return true;
}
- public void replace(IASTNode child, IASTNode other) {
+ @Override
+ public void replace(IASTNode child, IASTNode other) {
if (child == subscriptExp) {
other.setPropertyInParent(child.getPropertyInParent());
other.setParent(child.getParent());
@@ -187,7 +196,8 @@ public class CPPASTArraySubscriptExpression extends ASTNode implements ICPPASTAr
}
}
- public IType getExpressionType() {
+ @Override
+ public IType getExpressionType() {
ICPPFunction op = getOverload();
if (op != null) {
return ExpressionTypes.typeFromFunctionCall(op);
@@ -216,10 +226,12 @@ public class CPPASTArraySubscriptExpression extends ASTNode implements ICPPASTAr
return new ProblemType(ISemanticProblem.TYPE_UNKNOWN_FOR_EXPRESSION);
}
+ @Override
public boolean isLValue() {
return getValueCategory() == LVALUE;
}
+ @Override
public ValueCategory getValueCategory() {
ICPPFunction op = getOverload();
if (op != null) {
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTPointer.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTPointer.java
index ffd5f7d806e..8d207e82e41 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTPointer.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTPointer.java
@@ -6,8 +6,8 @@
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
- * John Camelon (IBM) - Initial API and implementation
- * Markus Schorn (Wind River Systems)
+ * John Camelon (IBM) - Initial API and implementation
+ * Markus Schorn (Wind River Systems)
*******************************************************************************/
package org.eclipse.cdt.internal.core.dom.parser.cpp;
@@ -19,7 +19,6 @@ import org.eclipse.cdt.internal.core.dom.parser.ASTNode;
* A pointer operator of a declarator
*/
public class CPPASTPointer extends ASTNode implements IASTPointer {
-
private boolean isConst;
private boolean isVolatile;
private boolean isRestrict;
@@ -27,10 +26,12 @@ public class CPPASTPointer extends ASTNode implements IASTPointer {
public CPPASTPointer() {
}
- public CPPASTPointer copy() {
+ @Override
+ public CPPASTPointer copy() {
return copy(CopyStyle.withoutLocations);
}
+ @Override
public CPPASTPointer copy(CopyStyle style) {
CPPASTPointer copy = new CPPASTPointer();
copy.isConst = isConst;
@@ -43,29 +44,35 @@ public class CPPASTPointer extends ASTNode implements IASTPointer {
return copy;
}
- public boolean isConst() {
+ @Override
+ public boolean isConst() {
return isConst;
}
- public boolean isVolatile() {
+ @Override
+ public boolean isVolatile() {
return isVolatile;
}
- public boolean isRestrict() {
+ @Override
+ public boolean isRestrict() {
return isRestrict;
}
- public void setConst(boolean value) {
+ @Override
+ public void setConst(boolean value) {
assertNotFrozen();
isConst = value;
}
- public void setVolatile(boolean value) {
+ @Override
+ public void setVolatile(boolean value) {
assertNotFrozen();
isVolatile = value;
}
- public void setRestrict(boolean value) {
+ @Override
+ public void setRestrict(boolean value) {
assertNotFrozen();
isRestrict = value;
}
@@ -74,8 +81,8 @@ public class CPPASTPointer extends ASTNode implements IASTPointer {
public boolean accept(ASTVisitor action) {
if (action.shouldVisitPointerOperators) {
switch (action.visit(this)) {
- case ASTVisitor.PROCESS_ABORT : return false;
- case ASTVisitor.PROCESS_SKIP : return true;
+ case ASTVisitor.PROCESS_ABORT: return false;
+ case ASTVisitor.PROCESS_SKIP: return true;
}
if (action.leave(this) == ASTVisitor.PROCESS_ABORT)
return false;
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/changegenerator/ChangeGenerator.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/changegenerator/ChangeGenerator.java
index cb9ced1447a..2f98b27c77d 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/changegenerator/ChangeGenerator.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/changegenerator/ChangeGenerator.java
@@ -460,7 +460,7 @@ public class ChangeGenerator extends ASTVisitor {
IFile file = FileHelper.getFileFromNode(anchorNode);
MultiTextEdit parentEdit = getEdit(anchorNode, file);
parentEdit.addChild(edit);
- sourceOffsets.put(file.getName(), Integer.valueOf(edit.getOffset()));
+ sourceOffsets.put(file.getName(), edit.getOffset());
}
private void handleReplace(IASTNode node) {
@@ -469,10 +469,13 @@ public class ChangeGenerator extends ASTVisitor {
TextEdit edit;
ChangeGeneratorWriterVisitor writer =
new ChangeGeneratorWriterVisitor(modificationStore, commentMap);
+ IASTFileLocation fileLocation = node.getFileLocation();
+ Integer val = sourceOffsets.get(fileLocation.getFileName());
+ int processedOffset = val != null ? val.intValue() : 0;
if (modifications.size() == 1 && modifications.get(0).getNewNode() == null) {
int offset = getOffsetIncludingComments(node);
int endOffset = getEndOffsetIncludingComments(node);
- offset = skipPrecedingBlankLines(source, offset);
+ offset = Math.max(skipPrecedingBlankLines(source, offset), processedOffset);
endOffset = skipTrailingBlankLines(source, endOffset);
IASTNode[] siblingsList = getContainingNodeList(node);
if (siblingsList != null) {
@@ -500,9 +503,8 @@ public class ChangeGenerator extends ASTVisitor {
} else {
node.accept(writer);
String code = writer.toString();
- IASTFileLocation location = node.getFileLocation();
- int offset = location.getNodeOffset();
- int endOffset = offset + location.getNodeLength();
+ int offset = fileLocation.getNodeOffset();
+ int endOffset = offset + fileLocation.getNodeLength();
if (node instanceof IASTStatement || node instanceof IASTDeclaration) {
// Include trailing comments in the area to be replaced.
endOffset = Math.max(endOffset, getEndOffsetIncludingTrailingComments(node));
@@ -517,9 +519,7 @@ public class ChangeGenerator extends ASTVisitor {
MultiTextEdit parentEdit = getEdit(node, file);
parentEdit.addChild(edit);
- IASTFileLocation fileLocation = node.getFileLocation();
- int newOffset = fileLocation.getNodeOffset() + fileLocation.getNodeLength();
- sourceOffsets.put(fileLocation.getFileName(), Integer.valueOf(newOffset));
+ sourceOffsets.put(fileLocation.getFileName(), edit.getExclusiveEnd());
}
private void handleAppends(IASTNode node) {
@@ -553,8 +553,7 @@ public class ChangeGenerator extends ASTVisitor {
code + anchor.getText());
parentEdit.addChild(edit);
IASTFileLocation fileLocation = node.getFileLocation();
- int newOffset = fileLocation.getNodeOffset() + fileLocation.getNodeLength();
- sourceOffsets.put(fileLocation.getFileName(), Integer.valueOf(newOffset));
+ sourceOffsets.put(fileLocation.getFileName(), endOffset(fileLocation));
}
private void handleAppends(IASTTranslationUnit tu) {
diff --git a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ExtractMethod.rts b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ExtractMethod.rts
index 06ad3de23a0..513d9d6d58d 100644
--- a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ExtractMethod.rts
+++ b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ExtractMethod.rts
@@ -2512,24 +2512,60 @@ visibility=public
//#org.eclipse.cdt.ui.tests.refactoring.extractfunction.ExtractFunctionRefactoringTest
//@main.c
int main() {
- int a,b;
- /*$*/a = b*2;/*$$*/
+ int a, b;
+ /*$*/a = b * 2;/*$$*/
return a;
}
-
//=
void test(int* a, int b) {
a = b * 2;
}
int main() {
- int a,b;
+ int a, b;
test(a, b);
return a;
}
-
//@.config
filename=main.c
methodname=test
replaceduplicates=false
returnvalue=false
+
+//!Handling of blank lines
+//#org.eclipse.cdt.ui.tests.refactoring.extractfunction.ExtractFunctionRefactoringTest
+//@main.c
+int main() {
+ int f;
+ /*$*/int a = 0;
+ int b = 1;
+
+ for (int i = 0; i < 10; ++i) {
+ int c = a + b;
+ a = b;
+ b = c;
+ }/*$$*/
+
+ f = b;
+}
+//=
+int fib() {
+ int a = 0;
+ int b = 1;
+ for (int i = 0; i < 10; ++i) {
+ int c = a + b;
+ a = b;
+ b = c;
+ }
+ return b;
+}
+
+int main() {
+ int f;
+ int b = fib();
+ f = b;
+}
+//@.config
+filename=main.c
+methodname=fib
+replaceduplicates=false
diff --git a/core/org.eclipse.cdt.ui.tests/resources/refactoring/GenerateGettersAndSetters.rts b/core/org.eclipse.cdt.ui.tests/resources/refactoring/GenerateGettersAndSetters.rts
index 683aa03e439..bac0e169ad0 100644
--- a/core/org.eclipse.cdt.ui.tests/resources/refactoring/GenerateGettersAndSetters.rts
+++ b/core/org.eclipse.cdt.ui.tests/resources/refactoring/GenerateGettersAndSetters.rts
@@ -1451,3 +1451,31 @@ public:
int test;
};
#endif /* A_H_ */
+//!Bug ??? - Getter for an array field
+//#org.eclipse.cdt.ui.tests.refactoring.gettersandsetters.GenerateGettersAndSettersTest
+//@.config
+filename=A.h
+getters=a
+//@A.h
+#ifndef A_H_
+#define A_H_
+
+class A {
+private:
+ int /*$*/a[2]/*$$*/;
+};
+#endif /* A_H_ */
+//=
+#ifndef A_H_
+#define A_H_
+
+class A {
+private:
+ int a[2];
+
+public:
+ const int* getA() const {
+ return a;
+ }
+};
+#endif /* A_H_ */
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/gettersandsetters/GenerateGettersAndSettersInputPage.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/gettersandsetters/GenerateGettersAndSettersInputPage.java
index 7e951188fd7..4c00941a4e2 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/gettersandsetters/GenerateGettersAndSettersInputPage.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/gettersandsetters/GenerateGettersAndSettersInputPage.java
@@ -171,7 +171,7 @@ public class GenerateGettersAndSettersInputPage extends UserInputWizardPage impl
for (Object funct : funtions) {
if (funct instanceof GetterSetterInsertEditProvider) {
GetterSetterInsertEditProvider getSet = (GetterSetterInsertEditProvider) funct;
- if(getSet.getType() == type) {
+ if (getSet.getType() == type) {
checked.add(getSet);
variableSelectionView.setChecked(getSet, true);
}
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/gettersandsetters/GenerateGettersAndSettersRefactoring.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/gettersandsetters/GenerateGettersAndSettersRefactoring.java
index b47facba584..a613276f522 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/gettersandsetters/GenerateGettersAndSettersRefactoring.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/gettersandsetters/GenerateGettersAndSettersRefactoring.java
@@ -173,7 +173,7 @@ public class GenerateGettersAndSettersRefactoring extends CRefactoring2 {
private IASTCompositeTypeSpecifier getCompositeTypeSpecifier(IASTName selectedName) {
IASTNode node = selectedName;
- while(node != null && !(node instanceof IASTCompositeTypeSpecifier)) {
+ while (node != null && !(node instanceof IASTCompositeTypeSpecifier)) {
node = node.getParent();
}
return (IASTCompositeTypeSpecifier) node;
@@ -181,7 +181,7 @@ public class GenerateGettersAndSettersRefactoring extends CRefactoring2 {
private IASTName getSelectedName(IASTTranslationUnit ast) {
List names = findAllMarkedNames(ast);
- if (names.size() < 1) {
+ if (names.isEmpty()) {
return null;
}
return names.get(names.size() - 1);
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/gettersandsetters/GetterSetterContext.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/gettersandsetters/GetterSetterContext.java
index 6cd78af1bd2..09697a87b08 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/gettersandsetters/GetterSetterContext.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/gettersandsetters/GetterSetterContext.java
@@ -23,6 +23,15 @@ import org.eclipse.cdt.core.dom.ast.IASTDeclarator;
import org.eclipse.cdt.core.dom.ast.IASTFunctionDefinition;
import org.eclipse.cdt.core.dom.ast.IASTName;
import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration;
+import org.eclipse.cdt.core.dom.ast.IArrayType;
+import org.eclipse.cdt.core.dom.ast.IBinding;
+import org.eclipse.cdt.core.dom.ast.IPointerType;
+import org.eclipse.cdt.core.dom.ast.IQualifierType;
+import org.eclipse.cdt.core.dom.ast.IType;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPField;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPReferenceType;
+
+import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.SemanticUtil;
import org.eclipse.cdt.internal.ui.refactoring.gettersandsetters.GetterSetterInsertEditProvider.AccessorKind;
@@ -45,7 +54,7 @@ public class GetterSetterContext implements ITreeContentProvider {
if (!wrapper.getter.exists()) {
wrapper.childNodes.add(createGetterInserter(wrapper.field));
}
- if (!wrapper.setter.exists() && !wrapper.field.getDeclSpecifier().isConst()) {
+ if (!wrapper.setter.exists() && isAssignable(wrapper.field)) {
wrapper.childNodes.add(createSetterInserter(wrapper.field));
}
}
@@ -55,12 +64,12 @@ public class GetterSetterContext implements ITreeContentProvider {
}
public GetterSetterInsertEditProvider createGetterInserter(IASTSimpleDeclaration simpleDeclaration) {
- IASTName fieldName = getFieldDeclarationName(simpleDeclaration);
+ IASTName fieldName = getDeclarationName(simpleDeclaration);
return new GetterSetterInsertEditProvider(fieldName, simpleDeclaration, AccessorKind.GETTER);
}
public GetterSetterInsertEditProvider createSetterInserter(IASTSimpleDeclaration simpleDeclaration) {
- IASTName fieldName = getFieldDeclarationName(simpleDeclaration);
+ IASTName fieldName = getDeclarationName(simpleDeclaration);
return new GetterSetterInsertEditProvider(fieldName, simpleDeclaration, AccessorKind.SETTER);
}
@@ -115,11 +124,11 @@ public class GetterSetterContext implements ITreeContentProvider {
private ArrayList getWrappedFields() {
if (wrappedFields == null) {
wrappedFields = new ArrayList();
- for (IASTSimpleDeclaration currentField : existingFields) {
+ for (IASTSimpleDeclaration field : existingFields) {
FieldWrapper wrapper = new FieldWrapper();
- wrapper.field = currentField;
- wrapper.getter = getGetterForField(currentField);
- wrapper.setter = getSetterForField(currentField);
+ wrapper.field = field;
+ wrapper.getter = getGetterForField(field);
+ wrapper.setter = getSetterForField(field);
if (wrapper.missingGetterOrSetter()) {
wrappedFields.add(wrapper);
}
@@ -130,35 +139,52 @@ public class GetterSetterContext implements ITreeContentProvider {
private FunctionWrapper getGetterForField(IASTSimpleDeclaration currentField) {
FunctionWrapper wrapper = new FunctionWrapper();
- String name = GetterSetterNameGenerator.generateGetterName(getFieldDeclarationName(currentField));
+ String name = GetterSetterNameGenerator.generateGetterName(getDeclarationName(currentField));
setFunctionToWrapper(wrapper, name);
return wrapper;
}
- private IASTName getFieldDeclarationName(IASTSimpleDeclaration fieldDeclaration) {
- IASTDeclarator declarator = fieldDeclaration.getDeclarators()[0];
+ private FunctionWrapper getSetterForField(IASTSimpleDeclaration field) {
+ FunctionWrapper wrapper = new FunctionWrapper();
+ String name = GetterSetterNameGenerator.generateSetterName(getDeclarationName(field));
+ setFunctionToWrapper(wrapper, name);
+ return wrapper;
+ }
+
+ private static IASTName getDeclarationName(IASTSimpleDeclaration declaration) {
+ IASTDeclarator declarator = declaration.getDeclarators()[0];
while (declarator.getNestedDeclarator() != null) {
declarator = declarator.getNestedDeclarator();
}
return declarator.getName();
}
-
- private FunctionWrapper getSetterForField(IASTSimpleDeclaration currentField) {
- FunctionWrapper wrapper = new FunctionWrapper();
- String name = GetterSetterNameGenerator.generateSetterName(getFieldDeclarationName(currentField));
- setFunctionToWrapper(wrapper, name);
- return wrapper;
+
+ private static boolean isAssignable(IASTSimpleDeclaration declaration) {
+ IASTName name = getDeclarationName(declaration);
+ IBinding binding = name.resolveBinding();
+ if (!(binding instanceof ICPPField))
+ return false;
+ ICPPField field = (ICPPField) binding;
+ IType type = field.getType();
+ type = SemanticUtil.getNestedType(type, SemanticUtil.TDEF);
+ if (type instanceof IArrayType || type instanceof ICPPReferenceType)
+ return false;
+ if (type instanceof IPointerType && ((IPointerType) type).isConst())
+ return false;
+ if (type instanceof IQualifierType && ((IQualifierType) type).isConst())
+ return false;
+ return true;
}
- private void setFunctionToWrapper(FunctionWrapper wrapper, String getterName) {
+ private void setFunctionToWrapper(FunctionWrapper wrapper, String accessorName) {
for (IASTFunctionDefinition currentDefinition : existingFunctionDefinitions) {
- if (currentDefinition.getDeclarator().getName().toString().endsWith(getterName)) {
+ if (currentDefinition.getDeclarator().getName().toString().equals(accessorName)) {
wrapper.functionDefinition = currentDefinition;
}
}
for (IASTSimpleDeclaration currentDeclaration : existingFunctionDeclarations) {
- if (getFieldDeclarationName(currentDeclaration).toString().endsWith(getterName)) {
+ if (getDeclarationName(currentDeclaration).toString().equals(accessorName)) {
wrapper.functionDeclaration = currentDeclaration;
}
}
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/gettersandsetters/GetterSetterFactory.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/gettersandsetters/GetterSetterFactory.java
index a428917cd12..070d7c2d1f9 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/gettersandsetters/GetterSetterFactory.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/gettersandsetters/GetterSetterFactory.java
@@ -14,6 +14,7 @@ package org.eclipse.cdt.internal.ui.refactoring.gettersandsetters;
import java.util.Arrays;
+import org.eclipse.cdt.core.dom.ast.IASTArrayDeclarator;
import org.eclipse.cdt.core.dom.ast.IASTBinaryExpression;
import org.eclipse.cdt.core.dom.ast.IASTDeclSpecifier;
import org.eclipse.cdt.core.dom.ast.IASTDeclarator;
@@ -25,12 +26,16 @@ import org.eclipse.cdt.core.dom.ast.IASTPointerOperator;
import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclSpecifier;
import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration;
import org.eclipse.cdt.core.dom.ast.IType;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTArrayDeclarator;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName;
import org.eclipse.cdt.core.dom.rewrite.TypeHelper;
import org.eclipse.cdt.core.parser.Keywords;
+import org.eclipse.cdt.internal.core.dom.parser.c.CASTDeclarator;
+import org.eclipse.cdt.internal.core.dom.parser.c.CASTPointer;
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTBinaryExpression;
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTCompoundStatement;
+import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTDeclarator;
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTExpressionStatement;
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTFieldReference;
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTFunctionDeclarator;
@@ -39,6 +44,7 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTIdExpression;
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTLiteralExpression;
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTName;
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTParameterDeclaration;
+import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTPointer;
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTReferenceOperator;
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTReturnStatement;
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTSimpleDeclSpecifier;
@@ -90,12 +96,23 @@ public class GetterSetterFactory {
// Copy declarator hierarchy
IASTDeclarator topDeclarator = fieldDeclaration.getDeclarators()[0].copy(CopyStyle.withLocations);
+ if (topDeclarator instanceof IASTArrayDeclarator) {
+ boolean isCpp = topDeclarator instanceof ICPPASTArrayDeclarator;
+ IASTDeclarator decl = isCpp ? new CPPASTDeclarator() : new CASTDeclarator();
+ decl.setName(topDeclarator.getName());
+ decl.setNestedDeclarator(topDeclarator.getNestedDeclarator());
+ decl.addPointerOperator(isCpp ? new CPPASTPointer() : new CASTPointer());
+ for (IASTPointerOperator pointer : topDeclarator.getPointerOperators()) {
+ decl.addPointerOperator(pointer);
+ }
+ topDeclarator = decl;
+ }
// Find the innermost declarator in hierarchy
IASTDeclarator innermost = topDeclarator;
while (innermost.getNestedDeclarator() != null) {
innermost = innermost.getNestedDeclarator();
}
-
+
// Create a new innermost function declarator based on the field declarator
CPPASTFunctionDeclarator functionDeclarator = new CPPASTFunctionDeclarator();
functionDeclarator.setConst(true);
@@ -203,7 +220,7 @@ public class GetterSetterFactory {
private IASTDeclSpecifier getParamOrReturnDeclSpecifier() {
IASTDeclSpecifier declSpec = fieldDeclaration.getDeclSpecifier().copy(CopyStyle.withLocations);
- if (passByReference) {
+ if (passByReference || fieldDeclaration.getDeclarators()[0] instanceof IASTArrayDeclarator) {
declSpec.setConst(true);
}
return declSpec;