Skip to content

Commit 922df18

Browse files
committed
optimize source location
Signed-off-by: Shi Chen <[email protected]>
1 parent f09aef3 commit 922df18

2 files changed

Lines changed: 8 additions & 2 deletions

File tree

org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/HashCodeEqualsHandler.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,19 @@
2222
import org.eclipse.jdt.core.IJavaElement;
2323
import org.eclipse.jdt.core.IType;
2424
import org.eclipse.jdt.core.JavaModelException;
25+
import org.eclipse.jdt.core.dom.ASTNode;
2526
import org.eclipse.jdt.core.dom.CompilationUnit;
2627
import org.eclipse.jdt.core.dom.IMethodBinding;
2728
import org.eclipse.jdt.core.dom.ITypeBinding;
2829
import org.eclipse.jdt.core.dom.IVariableBinding;
30+
import org.eclipse.jdt.core.dom.NodeFinder;
31+
import org.eclipse.jdt.core.dom.TypeDeclaration;
2932
import org.eclipse.jdt.core.manipulation.CoreASTProvider;
3033
import org.eclipse.jdt.internal.corext.codemanipulation.CodeGenerationSettings;
3134
import org.eclipse.jdt.internal.corext.codemanipulation.GenerateHashCodeEqualsOperation;
3235
import org.eclipse.jdt.internal.corext.dom.ASTNodes;
3336
import org.eclipse.jdt.ls.core.internal.JavaLanguageServerPlugin;
37+
import org.eclipse.jdt.ls.core.internal.corrections.DiagnosticsHelper;
3438
import org.eclipse.jdt.ls.core.internal.handlers.JdtDomModels.LspVariableBinding;
3539
import org.eclipse.jdt.ls.core.internal.preferences.Preferences;
3640
import org.eclipse.jdt.ls.core.internal.text.correction.SourceAssistProcessor;
@@ -113,8 +117,10 @@ public static TextEdit generateHashCodeEqualsTextEdit(IType type, LspVariableBin
113117
CodeGenerationSettings codeGenSettings = new CodeGenerationSettings();
114118
codeGenSettings.createComments = generateComments;
115119
codeGenSettings.overrideAnnotation = true;
120+
ASTNode node = NodeFinder.perform(astRoot, DiagnosticsHelper.getStartOffset(type.getCompilationUnit(), cursor), DiagnosticsHelper.getLength(type.getCompilationUnit(), cursor));
121+
ASTNode declarationNode = SourceAssistProcessor.getDeclarationNode(node);
116122
// If cursor position is not specified, then insert to the last by default.
117-
IJavaElement insertPosition = CodeGenerationUtils.findInsertElement(type, cursor);
123+
IJavaElement insertPosition = (declarationNode instanceof TypeDeclaration) ? CodeGenerationUtils.findInsertElement(type, null) : CodeGenerationUtils.findInsertElement(type, cursor);
118124
GenerateHashCodeEqualsOperation operation = new GenerateHashCodeEqualsOperation(typeBinding, variableBindings, astRoot, insertPosition, codeGenSettings, useInstanceof, useJava7Objects, regenerate, false, false);
119125
operation.setUseBlocksForThen(useBlocks);
120126
operation.run(null);

org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/text/correction/SourceAssistProcessor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -573,7 +573,7 @@ public static ICompilationUnit getCompilationUnit(CodeActionParams params) {
573573
return JDTUtils.resolveCompilationUnit(params.getTextDocument().getUri());
574574
}
575575

576-
private static ASTNode getDeclarationNode(ASTNode node) {
576+
public static ASTNode getDeclarationNode(ASTNode node) {
577577
if (node == null) {
578578
return null;
579579
}

0 commit comments

Comments
 (0)