From 6f00ced6258ff933b95d241a0d1a49bd81e417bf Mon Sep 17 00:00:00 2001 From: Emanuel Graf Date: Tue, 18 Aug 2009 08:43:42 +0000 Subject: [PATCH] FIXED - bug 284973: "Internal Error" while using "Source -> Generate getters/setters" https://bugs.eclipse.org/bugs/show_bug.cgi?id=284973 --- .../internal/ui/refactoring/CRefactoring.java | 10 ++++++++++ .../cdt/internal/ui/refactoring/Messages.java | 3 ++- .../GenerateGettersAndSettersRefactoring.java | 14 ++++++++------ .../ImplementMethodRefactoring.java | 18 ++++++++++-------- .../ui/refactoring/messages.properties | 1 + 5 files changed, 31 insertions(+), 15 deletions(-) diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/CRefactoring.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/CRefactoring.java index 5bf5a364ecf..cf3a30b0d3c 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/CRefactoring.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/CRefactoring.java @@ -26,6 +26,7 @@ import org.eclipse.ltk.core.refactoring.Refactoring; import org.eclipse.ltk.core.refactoring.RefactoringChangeDescriptor; import org.eclipse.ltk.core.refactoring.RefactoringDescriptor; import org.eclipse.ltk.core.refactoring.RefactoringStatus; +import org.eclipse.osgi.util.NLS; import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.dom.ast.ASTVisitor; @@ -184,6 +185,7 @@ public abstract class CRefactoring extends Refactoring { } if(!loadTranslationUnit(initStatus, sm.newChild(8))){ initStatus.addError(Messages.Refactoring_CantLoadTU); + return initStatus; } if(isProgressMonitorCanceld(sm, initStatus)) { return initStatus; @@ -234,6 +236,10 @@ public abstract class CRefactoring extends Refactoring { try { subMonitor.subTask(Messages.Refactoring_PM_ParseTU); unit = loadTranslationUnit(file); + if(unit == null) { + subMonitor.done(); + return false; + } subMonitor.worked(2); if(isProgressMonitorCanceld(subMonitor, initStatus)) { return true; @@ -258,6 +264,10 @@ public abstract class CRefactoring extends Refactoring { protected IASTTranslationUnit loadTranslationUnit(IFile file) throws CoreException { ITranslationUnit tu = (ITranslationUnit) CCorePlugin.getDefault().getCoreModel().create(file); + if(tu == null){ + initStatus.addFatalError(NLS.bind(Messages.CRefactoring_FileNotFound, file.getName())); + return null; + } return tu.getAST(fIndex, AST_STYLE); } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/Messages.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/Messages.java index c589442222f..8871a8be835 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/Messages.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/Messages.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2008 Institute for Software, HSR Hochschule fuer Technik + * Copyright (c) 2008, 2009 Institute for Software, HSR Hochschule fuer Technik * Rapperswil, University of applied sciences and others * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 @@ -35,6 +35,7 @@ public final class Messages extends NLS { public static String CreateFileChange_CreateFile; public static String CreateFileChange_UnknownLoc; public static String CreateFileChange_FileExists; + public static String CRefactoring_FileNotFound; public static String Refactoring_SelectionNotValid; public static String Refactoring_CantLoadTU; public static String Refactoring_Ambiguity; 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 87da5257acd..44ec2477c6a 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 @@ -93,12 +93,14 @@ public class GenerateGettersAndSettersRefactoring extends CRefactoring { super.checkInitialConditions(sm.newChild(6)); - initRefactoring(pm); - - if(context.existingFields.size() == 0) { - initStatus.addFatalError(Messages.GenerateGettersAndSettersRefactoring_NoFields); - } - + if(!initStatus.hasFatalError()) { + + initRefactoring(pm); + + if(context.existingFields.size() == 0) { + initStatus.addFatalError(Messages.GenerateGettersAndSettersRefactoring_NoFields); + } + } return initStatus; } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/implementmethod/ImplementMethodRefactoring.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/implementmethod/ImplementMethodRefactoring.java index 499524bbfcf..6045d1ee80a 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/implementmethod/ImplementMethodRefactoring.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/implementmethod/ImplementMethodRefactoring.java @@ -78,19 +78,21 @@ public class ImplementMethodRefactoring extends CRefactoring { SubMonitor sm = SubMonitor.convert(pm, 10); super.checkInitialConditions(sm.newChild(6)); - data.setMethodDeclarations(findUnimplementedMethodDeclarations(unit)); + if(!initStatus.hasFatalError()) { - if(region.getLength()>0) { - IASTSimpleDeclaration methodDeclaration = SelectionHelper.findFirstSelectedDeclaration(region, unit); - if (NodeHelper.isMethodDeclaration(methodDeclaration)) { - for (MethodToImplementConfig config : data.getMethodDeclarations()) { - if(config.getDeclaration() == methodDeclaration) { - config.setChecked(true); + data.setMethodDeclarations(findUnimplementedMethodDeclarations(unit)); + + if(region.getLength()>0) { + IASTSimpleDeclaration methodDeclaration = SelectionHelper.findFirstSelectedDeclaration(region, unit); + if (NodeHelper.isMethodDeclaration(methodDeclaration)) { + for (MethodToImplementConfig config : data.getMethodDeclarations()) { + if(config.getDeclaration() == methodDeclaration) { + config.setChecked(true); + } } } } } - sm.done(); return initStatus; } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/messages.properties b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/messages.properties index 5a1bb230afd..a9c8e839f0a 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/messages.properties +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/messages.properties @@ -23,6 +23,7 @@ AddDeclarationNodeToClassChange_AddDeclaration=Add Declaration to Class {0}. CreateFileChange_CreateFile=Create file: {0} CreateFileChange_UnknownLoc=Unknown Location: {0} CreateFileChange_FileExists=File already exists: {0} +CRefactoring_FileNotFound=File {0} not found in the Project Source Path. Refactoring_SelectionNotValid=Selection is not valid. Refactoring_CantLoadTU=Can not load translation unit. Refactoring_Ambiguity=Translation unit is ambiguous.