diff options
author | Jeff Johnston | 2018-07-13 22:02:33 +0000 |
---|---|---|
committer | Jeff Johnston | 2018-08-07 19:09:48 +0000 |
commit | f5bc72cf819d844d33aec51b583a6ebe6a12f0fd (patch) | |
tree | 037156cfde537c1b7e2bb22a9a6e17185883ea47 | |
parent | b0fb2f091eaf1ccd2cf05a8f670e1a664633fac7 (diff) | |
download | eclipse.jdt.ui-f5bc72cf819d844d33aec51b583a6ebe6a12f0fd.tar.gz eclipse.jdt.ui-f5bc72cf819d844d33aec51b583a6ebe6a12f0fd.tar.xz eclipse.jdt.ui-f5bc72cf819d844d33aec51b583a6ebe6a12f0fd.zip |
Bug 537029 - Perform refactorings to enable jdt.ls usage
- modify PreferenceConstants to use CodeGenerationSettingsConstants
- refactor CodeGenerationSettings to jdt.manipulation
- create new CodeGenerationSettingsConstants from constants in
PreferenceConstants
- refactor ASTNodeFactory to jdt.core.manipulation
- create new StubUtility2Core class in jdt.core.manipulation
to assist ASTNodeFactory
- refactor LinkedNodeFinder to jdt.core.manipulation
- refactor JavaPreferencesSettings to jdt.core.manipulation
- refactor JavaElementUtil to jdt.core.manipulation
Change-Id: Ia9553cb9ae42ee654789c189ab4cfc1ea25b7b2d
Signed-off-by: Jeff Johnston <jjohnstn@redhat.com>
15 files changed, 218 insertions, 111 deletions
diff --git a/org.eclipse.jdt.core.manipulation/META-INF/MANIFEST.MF b/org.eclipse.jdt.core.manipulation/META-INF/MANIFEST.MF index 670ef14e11..b0546cb01d 100644 --- a/org.eclipse.jdt.core.manipulation/META-INF/MANIFEST.MF +++ b/org.eclipse.jdt.core.manipulation/META-INF/MANIFEST.MF @@ -34,6 +34,7 @@ Export-Package: org.eclipse.jdt.core.manipulation, org.eclipse.jdt.internal.corext.refactoring.util;manipulation=split;mandatory:=manipulation;x-friends:="org.eclipse.jdt.ui", org.eclipse.jdt.internal.corext.template.java;manipulation=split;mandatory:=manipulation;x-friends:="org.eclipse.jdt.ui", org.eclipse.jdt.internal.corext.util;manipulation=split;mandatory:=manipulation;x-friends:="org.eclipse.jdt.ui,org.eclipse.jdt.junit", - org.eclipse.jdt.internal.ui.text.correction;x-friends:="org.eclipse.jdt.ui" + org.eclipse.jdt.internal.ui.text.correction;x-friends:="org.eclipse.jdt.ui", + org.eclipse.jdt.internal.ui.preferences;x-friends:="org.eclipse.jdt.ui" Import-Package: com.ibm.icu.text Bundle-RequiredExecutionEnvironment: JavaSE-1.8 diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaPreferencesSettings.java b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/preferences/JavaPreferencesSettings.java index 40bf889cf2..6d33c1825c 100644 --- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaPreferencesSettings.java +++ b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/preferences/JavaPreferencesSettings.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2008 IBM Corporation and others. + * Copyright (c) 2000, 2018 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -7,24 +7,25 @@ * * Contributors: * IBM Corporation - initial API and implementation + * Red Hat Inc. - moved to jdt.core.manipulation and modified *******************************************************************************/ package org.eclipse.jdt.internal.ui.preferences; import org.eclipse.jdt.core.IJavaProject; +import org.eclipse.jdt.core.manipulation.JavaManipulation; import org.eclipse.jdt.internal.corext.codemanipulation.CodeGenerationSettings; +import org.eclipse.jdt.internal.corext.codemanipulation.CodeGenerationSettingsConstants; import org.eclipse.jdt.internal.corext.util.CodeFormatterUtil; -import org.eclipse.jdt.ui.PreferenceConstants; - public class JavaPreferencesSettings { public static CodeGenerationSettings getCodeGenerationSettings(IJavaProject project) { CodeGenerationSettings res= new CodeGenerationSettings(); - res.createComments= Boolean.valueOf(PreferenceConstants.getPreference(PreferenceConstants.CODEGEN_ADD_COMMENTS, project)).booleanValue(); - res.useKeywordThis= Boolean.valueOf(PreferenceConstants.getPreference(PreferenceConstants.CODEGEN_KEYWORD_THIS, project)).booleanValue(); - res.overrideAnnotation= Boolean.valueOf(PreferenceConstants.getPreference(PreferenceConstants.CODEGEN_USE_OVERRIDE_ANNOTATION, project)).booleanValue(); - res.importIgnoreLowercase= Boolean.valueOf(PreferenceConstants.getPreference(PreferenceConstants.ORGIMPORTS_IGNORELOWERCASE, project)).booleanValue(); + res.createComments= Boolean.valueOf(JavaManipulation.getPreference(CodeGenerationSettingsConstants.CODEGEN_ADD_COMMENTS, project)).booleanValue(); + res.useKeywordThis= Boolean.valueOf(JavaManipulation.getPreference(CodeGenerationSettingsConstants.CODEGEN_KEYWORD_THIS, project)).booleanValue(); + res.overrideAnnotation= Boolean.valueOf(JavaManipulation.getPreference(CodeGenerationSettingsConstants.CODEGEN_USE_OVERRIDE_ANNOTATION, project)).booleanValue(); + res.importIgnoreLowercase= Boolean.valueOf(JavaManipulation.getPreference(CodeGenerationSettingsConstants.ORGIMPORTS_IGNORELOWERCASE, project)).booleanValue(); res.tabWidth= CodeFormatterUtil.getTabWidth(project); res.indentWidth= CodeFormatterUtil.getIndentWidth(project); return res; diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/CodeGenerationSettings.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/CodeGenerationSettings.java index be8eff0318..9e04258842 100644 --- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/CodeGenerationSettings.java +++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/CodeGenerationSettings.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2008 IBM Corporation and others. + * Copyright (c) 2018 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -7,6 +7,7 @@ * * Contributors: * IBM Corporation - initial API and implementation + * Red Hat Inc. - moved to jdt.core.manipulation *******************************************************************************/ package org.eclipse.jdt.internal.corext.codemanipulation; @@ -22,7 +23,6 @@ public class CodeGenerationSettings { public int indentWidth; - public void setSettings(CodeGenerationSettings settings) { settings.createComments= createComments; settings.useKeywordThis= useKeywordThis; @@ -32,6 +32,5 @@ public class CodeGenerationSettings { settings.indentWidth= indentWidth; } - } diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/CodeGenerationSettingsConstants.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/CodeGenerationSettingsConstants.java new file mode 100644 index 0000000000..5e3aa77544 --- /dev/null +++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/CodeGenerationSettingsConstants.java @@ -0,0 +1,52 @@ +/******************************************************************************* + * Copyright (c) 2018 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + * Red Hat Inc. - constants moved from PreferenceConstants here + *******************************************************************************/ +package org.eclipse.jdt.internal.corext.codemanipulation; + +public class CodeGenerationSettingsConstants { + + /** + * A named preference that controls if comment stubs will be added + * automatically to newly created types and methods. + * <p> + * Value is of type <code>Boolean</code>. + * </p> + */ + public static final String CODEGEN_ADD_COMMENTS= "org.eclipse.jdt.ui.javadoc"; //$NON-NLS-1$ + + /** + * A named preference that controls whether the keyword "this" will be added + * automatically to field accesses in generated methods. + * <p> + * Value is of type <code>Boolean</code>. + * </p> + */ + public static final String CODEGEN_KEYWORD_THIS= "org.eclipse.jdt.ui.keywordthis"; //$NON-NLS-1$ + + /** + * A named preference that controls whether to add a override annotation for newly created methods + * <p> + * Value is of type <code>Boolean</code>. + * </p> + */ + public static final String CODEGEN_USE_OVERRIDE_ANNOTATION= "org.eclipse.jdt.ui.overrideannotation"; //$NON-NLS-1$ + + /** + * A named preferences that controls if types that start with a lower case letters get added by the + * "Organize Import" operation. + * <p> + * Value is of type <code>Boolean</code>. + * </p> + */ + public static final String ORGIMPORTS_IGNORELOWERCASE= "org.eclipse.jdt.ui.ignorelowercasenames"; //$NON-NLS-1$ + + +} diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/StubUtility2Core.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/StubUtility2Core.java new file mode 100644 index 0000000000..06e32ad1bc --- /dev/null +++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/StubUtility2Core.java @@ -0,0 +1,124 @@ +/******************************************************************************* + * Copyright (c) 2018 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + * Red Hat Inc. - copied and pared down to methods needed by jdt.core.manipulation + *******************************************************************************/ +package org.eclipse.jdt.internal.corext.codemanipulation; + +import java.util.EnumSet; +import java.util.List; + +import org.eclipse.text.edits.TextEditGroup; + +import org.eclipse.jdt.core.IJavaProject; +import org.eclipse.jdt.core.JavaCore; +import org.eclipse.jdt.core.dom.AST; +import org.eclipse.jdt.core.dom.ASTNode; +import org.eclipse.jdt.core.dom.Annotation; +import org.eclipse.jdt.core.dom.CompilationUnit; +import org.eclipse.jdt.core.dom.IExtendedModifier; +import org.eclipse.jdt.core.dom.ITypeBinding; +import org.eclipse.jdt.core.dom.MethodDeclaration; +import org.eclipse.jdt.core.dom.rewrite.ASTRewrite; +import org.eclipse.jdt.core.dom.rewrite.ImportRewrite; +import org.eclipse.jdt.core.dom.rewrite.ImportRewrite.ImportRewriteContext; +import org.eclipse.jdt.core.dom.rewrite.ImportRewrite.TypeLocation; + +import org.eclipse.jdt.internal.corext.dom.Bindings; +import org.eclipse.jdt.internal.corext.util.JavaModelUtil; + +/** + * Utilities for code generation based on AST rewrite. + * + * @since 1.10 + */ +public final class StubUtility2Core { + + public static ITypeBinding replaceWildcardsAndCaptures(ITypeBinding type) { + while (type.isWildcardType() || type.isCapture() || (type.isArray() && type.getElementType().isCapture())) { + ITypeBinding bound= type.getBound(); + type= (bound != null) ? bound : type.getErasure(); + } + return type; + } + + + /** + * Adds <code>@Override</code> annotation to <code>methodDecl</code> if not already present and + * if requested by code style settings or compiler errors/warnings settings. + * + * @param settings the code generation style settings, may be <code>null</code> + * @param project the Java project used to access the compiler settings + * @param rewrite the ASTRewrite + * @param imports the ImportRewrite + * @param methodDecl the method declaration to add the annotation to + * @param isDeclaringTypeInterface <code>true</code> if the type declaring the method overridden + * by <code>methodDecl</code> is an interface + * @param group the text edit group, may be <code>null</code> + */ + public static void addOverrideAnnotation(CodeGenerationSettings settings, IJavaProject project, ASTRewrite rewrite, ImportRewrite imports, MethodDeclaration methodDecl, + boolean isDeclaringTypeInterface, TextEditGroup group) { + if (!JavaModelUtil.is50OrHigher(project)) { + return; + } + if (isDeclaringTypeInterface) { + String version= project.getOption(JavaCore.COMPILER_COMPLIANCE, true); + if (JavaModelUtil.isVersionLessThan(version, JavaCore.VERSION_1_6)) + return; // not allowed in 1.5 + if (JavaCore.DISABLED.equals(project.getOption(JavaCore.COMPILER_PB_MISSING_OVERRIDE_ANNOTATION_FOR_INTERFACE_METHOD_IMPLEMENTATION, true))) + return; // user doesn't want to use 1.6 style + } + if ((settings != null && settings.overrideAnnotation) || !JavaCore.IGNORE.equals(project.getOption(JavaCore.COMPILER_PB_MISSING_OVERRIDE_ANNOTATION, true))) { + createOverrideAnnotation(rewrite, imports, methodDecl, group); + } + } + + public static void createOverrideAnnotation(ASTRewrite rewrite, ImportRewrite imports, MethodDeclaration decl, TextEditGroup group) { + if (findAnnotation("java.lang.Override", decl.modifiers()) != null) { //$NON-NLS-1$ + return; // No need to add duplicate annotation + } + AST ast= rewrite.getAST(); + ASTNode root= decl.getRoot(); + ImportRewriteContext context= null; + if (root instanceof CompilationUnit) { + context= new ContextSensitiveImportRewriteContext((CompilationUnit) root, decl.getStartPosition(), imports); + } + Annotation marker= ast.newMarkerAnnotation(); + marker.setTypeName(ast.newName(imports.addImport("java.lang.Override", context))); //$NON-NLS-1$ + rewrite.getListRewrite(decl, MethodDeclaration.MODIFIERS2_PROPERTY).insertFirst(marker, group); + } + + public static boolean isCopyOnInheritAnnotation(ITypeBinding annotationType, IJavaProject project, EnumSet<TypeLocation> nullnessDefault, TypeLocation typeLocation) { + if (JavaCore.ENABLED.equals(project.getOption(JavaCore.COMPILER_INHERIT_NULL_ANNOTATIONS, true))) + return false; + if (nullnessDefault != null && Bindings.isNonNullAnnotation(annotationType, project)) { + if (!nullnessDefault.contains(typeLocation)) { + return true; + } + return false; // nonnull within the scope of @NonNullByDefault: don't copy + } + return Bindings.isAnyNullAnnotation(annotationType, project); + } + + public static Annotation findAnnotation(String qualifiedTypeName, List<IExtendedModifier> modifiers) { + for (int i= 0; i < modifiers.size(); i++) { + IExtendedModifier curr= modifiers.get(i); + if (curr instanceof Annotation) { + Annotation annot= (Annotation) curr; + ITypeBinding binding= annot.getTypeName().resolveTypeBinding(); + if (binding != null && qualifiedTypeName.equals(binding.getQualifiedName())) { + return annot; + } + } + } + return null; + } + + +} diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/ASTNodeFactory.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/ASTNodeFactory.java index 523de3be2e..d977816bf3 100644 --- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/ASTNodeFactory.java +++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/ASTNodeFactory.java @@ -7,6 +7,7 @@ * * Contributors: * IBM Corporation - initial API and implementation + * Red Hat Inc. - refactored to jdt.core.manipulation *******************************************************************************/ package org.eclipse.jdt.internal.corext.dom; @@ -46,14 +47,13 @@ import org.eclipse.jdt.core.dom.rewrite.ImportRewrite; import org.eclipse.jdt.core.dom.rewrite.ImportRewrite.ImportRewriteContext; import org.eclipse.jdt.core.dom.rewrite.ImportRewrite.TypeLocation; -import org.eclipse.jdt.internal.corext.codemanipulation.StubUtility2; -import org.eclipse.jdt.internal.corext.util.JDTUIHelperClasses; +import org.eclipse.jdt.internal.corext.codemanipulation.StubUtility2Core; /** * JDT-UI-internal helper methods to create new {@link ASTNode}s. * Complements <code>AST#new*(..)</code> and <code>ImportRewrite#add*(..)</code>. * - * @see JDTUIHelperClasses + * see JDTUIHelperClasses */ public class ASTNodeFactory { @@ -410,7 +410,7 @@ public class ASTNodeFactory { } ParameterizedType parameterizedType= ast.newParameterizedType(baseType); for (ITypeBinding typeArgument : typeBinding.getTypeArguments()) { - typeArgument= StubUtility2.replaceWildcardsAndCaptures(typeArgument); + typeArgument= StubUtility2Core.replaceWildcardsAndCaptures(typeArgument); parameterizedType.typeArguments().add(importRewrite.addImport(typeArgument, ast, importContext, TypeLocation.TYPE_ARGUMENT)); } return parameterizedType; diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/LinkedNodeFinder.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/LinkedNodeFinder.java index f0255a6af2..f0255a6af2 100644 --- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/LinkedNodeFinder.java +++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/LinkedNodeFinder.java diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/JavaElementUtil.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/util/JavaElementUtil.java index 55f5b23762..e2eb49fbc4 100644 --- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/JavaElementUtil.java +++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/util/JavaElementUtil.java @@ -7,6 +7,7 @@ * * Contributors: * IBM Corporation - initial API and implementation + * Red Hat Inc. - moved to jdt.core.manipulation *******************************************************************************/ package org.eclipse.jdt.internal.corext.refactoring.util; @@ -39,7 +40,6 @@ import org.eclipse.jdt.core.SourceRange; import org.eclipse.jdt.internal.core.manipulation.util.BasicElementLabels; import org.eclipse.jdt.internal.corext.refactoring.RefactoringCoreMessages; -import org.eclipse.jdt.internal.corext.util.JDTUIHelperClasses; import org.eclipse.jdt.internal.corext.util.JavaModelUtil; @@ -47,7 +47,7 @@ import org.eclipse.jdt.internal.corext.util.JavaModelUtil; * Utility methods for the Java Model. * * @see JavaModelUtil (a better place for new methods) - * @see JDTUIHelperClasses + * see JDTUIHelperClasses */ public class JavaElementUtil { diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/GenerateHashCodeEqualsOperation.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/GenerateHashCodeEqualsOperation.java index 7f38c94681..b95772a903 100644 --- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/GenerateHashCodeEqualsOperation.java +++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/GenerateHashCodeEqualsOperation.java @@ -1059,7 +1059,7 @@ public final class GenerateHashCodeEqualsOperation implements IWorkspaceRunnable } } IJavaProject project= fUnit.getJavaElement().getJavaProject(); - StubUtility2.addOverrideAnnotation(fSettings, project, fRewrite.getASTRewrite(), fRewrite.getImportRewrite(), newDeclaration, copyFrom.getDeclaringClass().isInterface(), null); + StubUtility2Core.addOverrideAnnotation(fSettings, project, fRewrite.getASTRewrite(), fRewrite.getImportRewrite(), newDeclaration, copyFrom.getDeclaringClass().isInterface(), null); } private boolean needsNoSuperCall(ITypeBinding typeBinding, String name, ITypeBinding[] parameters) { diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/StubUtility2.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/StubUtility2.java index 826d7ae881..8e28e37964 100644 --- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/StubUtility2.java +++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/StubUtility2.java @@ -8,6 +8,7 @@ * Contributors: * IBM Corporation - initial API and implementation * Stephan Herrmann - Contribution for Bug 463360 - [override method][null] generating method override should not create redundant null annotations + * Red Hat Inc. - removed some methods and put them in StubUtility2Core *******************************************************************************/ package org.eclipse.jdt.internal.corext.codemanipulation; @@ -22,8 +23,6 @@ import java.util.Map; import org.eclipse.core.runtime.Assert; import org.eclipse.core.runtime.CoreException; -import org.eclipse.text.edits.TextEditGroup; - import org.eclipse.jdt.core.Flags; import org.eclipse.jdt.core.ICompilationUnit; import org.eclipse.jdt.core.IJavaElement; @@ -92,51 +91,6 @@ import org.eclipse.jdt.internal.ui.preferences.formatter.FormatterProfileManager */ public final class StubUtility2 { - /** - * Adds <code>@Override</code> annotation to <code>methodDecl</code> if not already present and - * if requested by code style settings or compiler errors/warnings settings. - * - * @param settings the code generation style settings, may be <code>null</code> - * @param project the Java project used to access the compiler settings - * @param rewrite the ASTRewrite - * @param imports the ImportRewrite - * @param methodDecl the method declaration to add the annotation to - * @param isDeclaringTypeInterface <code>true</code> if the type declaring the method overridden - * by <code>methodDecl</code> is an interface - * @param group the text edit group, may be <code>null</code> - */ - public static void addOverrideAnnotation(CodeGenerationSettings settings, IJavaProject project, ASTRewrite rewrite, ImportRewrite imports, MethodDeclaration methodDecl, - boolean isDeclaringTypeInterface, TextEditGroup group) { - if (!JavaModelUtil.is50OrHigher(project)) { - return; - } - if (isDeclaringTypeInterface) { - String version= project.getOption(JavaCore.COMPILER_COMPLIANCE, true); - if (JavaModelUtil.isVersionLessThan(version, JavaCore.VERSION_1_6)) - return; // not allowed in 1.5 - if (JavaCore.DISABLED.equals(project.getOption(JavaCore.COMPILER_PB_MISSING_OVERRIDE_ANNOTATION_FOR_INTERFACE_METHOD_IMPLEMENTATION, true))) - return; // user doesn't want to use 1.6 style - } - if ((settings != null && settings.overrideAnnotation) || !JavaCore.IGNORE.equals(project.getOption(JavaCore.COMPILER_PB_MISSING_OVERRIDE_ANNOTATION, true))) { - createOverrideAnnotation(rewrite, imports, methodDecl, group); - } - } - - public static void createOverrideAnnotation(ASTRewrite rewrite, ImportRewrite imports, MethodDeclaration decl, TextEditGroup group) { - if (findAnnotation("java.lang.Override", decl.modifiers()) != null) { //$NON-NLS-1$ - return; // No need to add duplicate annotation - } - AST ast= rewrite.getAST(); - ASTNode root= decl.getRoot(); - ImportRewriteContext context= null; - if (root instanceof CompilationUnit) { - context= new ContextSensitiveImportRewriteContext((CompilationUnit) root, decl.getStartPosition(), imports); - } - Annotation marker= ast.newMarkerAnnotation(); - marker.setTypeName(ast.newName(imports.addImport("java.lang.Override", context))); //$NON-NLS-1$ - rewrite.getListRewrite(decl, MethodDeclaration.MODIFIERS2_PROPERTY).insertFirst(marker, group); - } - /* This method should work with all AST levels. */ public static MethodDeclaration createConstructorStub(ICompilationUnit unit, ASTRewrite rewrite, ImportRewrite imports, ImportRewriteContext context, IMethodBinding binding, String type, int modifiers, boolean omitSuperForDefConst, boolean todo, CodeGenerationSettings settings) throws CoreException { AST ast= rewrite.getAST(); @@ -457,7 +411,7 @@ public final class StubUtility2 { boolean skipOverride= inInterface && declaringType == typeObject && !Modifier.isPublic(modifiers); if (!skipOverride) { - addOverrideAnnotation(settings, javaProject, rewrite, imports, decl, binding.getDeclaringClass().isInterface(), null); + StubUtility2Core.addOverrideAnnotation(settings, javaProject, rewrite, imports, decl, binding.getDeclaringClass().isInterface(), null); } return decl; @@ -539,7 +493,7 @@ public final class StubUtility2 { var.setName(ast.newSimpleName(paramNames[i])); IAnnotationBinding[] annotations= binding.getParameterAnnotations(i); for (IAnnotationBinding annotation : annotations) { - if (StubUtility2.isCopyOnInheritAnnotation(annotation.getAnnotationType(), project, nullnessDefault, TypeLocation.PARAMETER)) + if (StubUtility2Core.isCopyOnInheritAnnotation(annotation.getAnnotationType(), project, nullnessDefault, TypeLocation.PARAMETER)) var.modifiers().add(imports.addAnnotation(annotation, ast, context)); } parameters.add(var); @@ -756,7 +710,7 @@ public final class StubUtility2 { ITypeBinding otherAnnotationType= annotation.getAnnotationType(); String qn= otherAnnotationType.getQualifiedName(); if (qn.endsWith(n) && (qn.length() == n.length() || qn.charAt(qn.length() - n.length() - 1) == '.')) { - if (StubUtility2.isCopyOnInheritAnnotation(otherAnnotationType, javaProject, nullnessDefault, TypeLocation.RETURN_TYPE)) + if (StubUtility2Core.isCopyOnInheritAnnotation(otherAnnotationType, javaProject, nullnessDefault, TypeLocation.RETURN_TYPE)) result.add(importRewrite.addAnnotation(annotation, ast, context)); break; } @@ -772,7 +726,7 @@ public final class StubUtility2 { ArrayList<IExtendedModifier> result= new ArrayList<>(); for (IAnnotationBinding annotation : annotations) { - if (StubUtility2.isCopyOnInheritAnnotation(annotation.getAnnotationType(), javaProject, nullnessDefault, TypeLocation.RETURN_TYPE)) + if (StubUtility2Core.isCopyOnInheritAnnotation(annotation.getAnnotationType(), javaProject, nullnessDefault, TypeLocation.RETURN_TYPE)) result.add(importRewrite.addAnnotation(annotation, ast, context)); } @@ -972,32 +926,6 @@ public final class StubUtility2 { // Not for instantiation } - public static boolean isCopyOnInheritAnnotation(ITypeBinding annotationType, IJavaProject project, EnumSet<TypeLocation> nullnessDefault, TypeLocation typeLocation) { - if (JavaCore.ENABLED.equals(project.getOption(JavaCore.COMPILER_INHERIT_NULL_ANNOTATIONS, true))) - return false; - if (nullnessDefault != null && Bindings.isNonNullAnnotation(annotationType, project)) { - if (!nullnessDefault.contains(typeLocation)) { - return true; - } - return false; // nonnull within the scope of @NonNullByDefault: don't copy - } - return Bindings.isAnyNullAnnotation(annotationType, project); - } - - public static Annotation findAnnotation(String qualifiedTypeName, List<IExtendedModifier> modifiers) { - for (int i= 0; i < modifiers.size(); i++) { - IExtendedModifier curr= modifiers.get(i); - if (curr instanceof Annotation) { - Annotation annot= (Annotation) curr; - ITypeBinding binding= annot.getTypeName().resolveTypeBinding(); - if (binding != null && qualifiedTypeName.equals(binding.getQualifiedName())) { - return annot; - } - } - } - return null; - } - public static ITypeBinding replaceWildcardsAndCaptures(ITypeBinding type) { while (type.isWildcardType() || type.isCapture() || (type.isArray() && type.getElementType().isCapture())) { ITypeBinding bound= type.getBound(); diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/AbstractToStringGenerator.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/AbstractToStringGenerator.java index 5801772b53..381d506957 100644 --- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/AbstractToStringGenerator.java +++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/AbstractToStringGenerator.java @@ -38,11 +38,13 @@ import org.eclipse.jdt.core.dom.ITypeBinding; import org.eclipse.jdt.core.dom.IVariableBinding; import org.eclipse.jdt.core.dom.IfStatement; import org.eclipse.jdt.core.dom.InfixExpression; +import org.eclipse.jdt.core.dom.InfixExpression.Operator; import org.eclipse.jdt.core.dom.InstanceofExpression; import org.eclipse.jdt.core.dom.Javadoc; import org.eclipse.jdt.core.dom.MethodDeclaration; import org.eclipse.jdt.core.dom.MethodInvocation; import org.eclipse.jdt.core.dom.Modifier; +import org.eclipse.jdt.core.dom.Modifier.ModifierKeyword; import org.eclipse.jdt.core.dom.Name; import org.eclipse.jdt.core.dom.ParameterizedType; import org.eclipse.jdt.core.dom.ParenthesizedExpression; @@ -58,11 +60,9 @@ import org.eclipse.jdt.core.dom.Type; import org.eclipse.jdt.core.dom.VariableDeclarationExpression; import org.eclipse.jdt.core.dom.VariableDeclarationFragment; import org.eclipse.jdt.core.dom.VariableDeclarationStatement; -import org.eclipse.jdt.core.dom.InfixExpression.Operator; -import org.eclipse.jdt.core.dom.Modifier.ModifierKeyword; import org.eclipse.jdt.internal.corext.codemanipulation.StubUtility; -import org.eclipse.jdt.internal.corext.codemanipulation.StubUtility2; +import org.eclipse.jdt.internal.corext.codemanipulation.StubUtility2Core; import org.eclipse.jdt.internal.corext.dom.ASTNodeFactory; import org.eclipse.jdt.ui.CodeGeneration; @@ -241,7 +241,7 @@ public abstract class AbstractToStringGenerator { toStringMethod.setJavadoc(javadoc); } } - StubUtility2.addOverrideAnnotation(fContext.getCodeGenerationSettings(), fContext.getTypeBinding().getJavaElement().getJavaProject(), fContext.getASTRewrite(), fContext.getImportRewrite(), toStringMethod, objectMethod.getDeclaringClass().isInterface(), null); + StubUtility2Core.addOverrideAnnotation(fContext.getCodeGenerationSettings(), fContext.getTypeBinding().getJavaElement().getJavaProject(), fContext.getASTRewrite(), fContext.getImportRewrite(), toStringMethod, objectMethod.getDeclaringClass().isInterface(), null); } /** diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ExtractInterfaceProcessor.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ExtractInterfaceProcessor.java index 773b1d068b..e9debdac3f 100644 --- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ExtractInterfaceProcessor.java +++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ExtractInterfaceProcessor.java @@ -96,7 +96,7 @@ import org.eclipse.jdt.internal.core.manipulation.util.Strings; import org.eclipse.jdt.internal.core.refactoring.descriptors.RefactoringSignatureDescriptorFactory; import org.eclipse.jdt.internal.corext.codemanipulation.CodeGenerationSettings; import org.eclipse.jdt.internal.corext.codemanipulation.StubUtility; -import org.eclipse.jdt.internal.corext.codemanipulation.StubUtility2; +import org.eclipse.jdt.internal.corext.codemanipulation.StubUtility2Core; import org.eclipse.jdt.internal.corext.dom.Bindings; import org.eclipse.jdt.internal.corext.dom.IASTSharedValues; import org.eclipse.jdt.internal.corext.dom.ModifierRewrite; @@ -623,7 +623,7 @@ public final class ExtractInterfaceProcessor extends SuperTypeRefactoringProcess } } if (annotations) { - StubUtility2.createOverrideAnnotation(sourceRewrite.getASTRewrite(), sourceRewrite.getImportRewrite(), declaration, null); + StubUtility2Core.createOverrideAnnotation(sourceRewrite.getASTRewrite(), sourceRewrite.getImportRewrite(), declaration, null); } if (fComments) createMethodComment(sourceRewrite, declaration, replacements, javadoc); diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/PullUpRefactoringProcessor.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/PullUpRefactoringProcessor.java index 3cbf79c10c..fb9af2a1c4 100644 --- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/PullUpRefactoringProcessor.java +++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/PullUpRefactoringProcessor.java @@ -106,7 +106,7 @@ import org.eclipse.jdt.internal.core.refactoring.descriptors.RefactoringSignatur import org.eclipse.jdt.internal.corext.codemanipulation.CodeGenerationSettings; import org.eclipse.jdt.internal.corext.codemanipulation.ContextSensitiveImportRewriteContext; import org.eclipse.jdt.internal.corext.codemanipulation.StubUtility; -import org.eclipse.jdt.internal.corext.codemanipulation.StubUtility2; +import org.eclipse.jdt.internal.corext.codemanipulation.StubUtility2Core; import org.eclipse.jdt.internal.corext.dom.ASTNodeFactory; import org.eclipse.jdt.internal.corext.dom.ASTNodes; import org.eclipse.jdt.internal.corext.dom.Bindings; @@ -537,7 +537,7 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor { ImportRewriteUtil.addImports(rewriter, context, methodToCreateStubFor, new HashMap<Name, String>(), new HashMap<Name, String>(), true); IJavaProject javaProject= newCu.getJavaProject(); CodeGenerationSettings codeGenerationSettings= JavaPreferencesSettings.getCodeGenerationSettings(javaProject); - StubUtility2.addOverrideAnnotation(codeGenerationSettings, javaProject, astRewrite, importRewrite, newMethod, getDeclaringType().isInterface(), + StubUtility2Core.addOverrideAnnotation(codeGenerationSettings, javaProject, astRewrite, importRewrite, newMethod, getDeclaringType().isInterface(), rewriter.createCategorizedGroupDescription(RefactoringCoreMessages.PullUpRefactoring_add_override_annotation, SET_PULL_UP)); astRewrite.getListRewrite(typeToCreateStubIn, typeToCreateStubIn.getBodyDeclarationsProperty()).insertAt(newMethod, BodyDeclarationRewrite.getInsertionIndex(newMethod, typeToCreateStubIn.bodyDeclarations()), rewriter.createCategorizedGroupDescription(RefactoringCoreMessages.PullUpRefactoring_add_method_stub, SET_PULL_UP)); } @@ -1036,7 +1036,7 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor { private void createAbstractMethod(final IMethod sourceMethod, final CompilationUnitRewrite sourceRewriter, final CompilationUnit declaringCuNode, final AbstractTypeDeclaration destination, final TypeVariableMaplet[] mapping, final CompilationUnitRewrite targetRewrite, final Map<IMember, IncomingMemberVisibilityAdjustment> adjustments, final IProgressMonitor monitor, final RefactoringStatus status) throws JavaModelException { final MethodDeclaration oldMethod= ASTNodeSearchUtil.getMethodDeclarationNode(sourceMethod, declaringCuNode); ITypeBinding destinationBinding= destination.resolveBinding(); - StubUtility2.addOverrideAnnotation(fSettings, sourceMethod.getJavaProject(), sourceRewriter.getASTRewrite(), sourceRewriter.getImportRewrite(), oldMethod, + StubUtility2Core.addOverrideAnnotation(fSettings, sourceMethod.getJavaProject(), sourceRewriter.getASTRewrite(), sourceRewriter.getImportRewrite(), oldMethod, destinationBinding == null ? false : destinationBinding.isInterface(), sourceRewriter.createCategorizedGroupDescription(RefactoringCoreMessages.PullUpRefactoring_add_override_annotation, SET_PULL_UP)); final MethodDeclaration newMethod= targetRewrite.getAST().newMethodDeclaration(); @@ -1334,7 +1334,7 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor { final ASTRewrite rewrite= targetRewrite.getASTRewrite(); final AST ast= rewrite.getAST(); ITypeBinding destinationBinding= ASTNodeSearchUtil.getAbstractTypeDeclarationNode(getDestinationType(), targetRewrite.getRoot()).resolveBinding(); - StubUtility2.addOverrideAnnotation(fSettings, sourceMethod.getJavaProject(), sourceRewrite.getASTRewrite(), sourceRewrite.getImportRewrite(), oldMethod, + StubUtility2Core.addOverrideAnnotation(fSettings, sourceMethod.getJavaProject(), sourceRewrite.getASTRewrite(), sourceRewrite.getImportRewrite(), oldMethod, destinationBinding == null ? false : destinationBinding.isInterface(), sourceRewrite.createCategorizedGroupDescription(RefactoringCoreMessages.PullUpRefactoring_add_override_annotation, SET_PULL_UP)); final MethodDeclaration newMethod= ast.newMethodDeclaration(); diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ModifierCorrectionSubProcessor.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ModifierCorrectionSubProcessor.java index 3cd7bbb52b..674236765b 100644 --- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ModifierCorrectionSubProcessor.java +++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ModifierCorrectionSubProcessor.java @@ -69,7 +69,7 @@ import org.eclipse.jdt.core.dom.TypeDeclaration; import org.eclipse.jdt.core.dom.rewrite.ASTRewrite; import org.eclipse.jdt.core.formatter.IndentManipulation; -import org.eclipse.jdt.internal.corext.codemanipulation.StubUtility2; +import org.eclipse.jdt.internal.corext.codemanipulation.StubUtility2Core; import org.eclipse.jdt.internal.corext.dom.ASTNodeFactory; import org.eclipse.jdt.internal.corext.dom.ASTNodes; import org.eclipse.jdt.internal.corext.dom.Bindings; @@ -866,7 +866,7 @@ public class ModifierCorrectionSubProcessor { return; } MethodDeclaration methodDecl= (MethodDeclaration) selectedNode; - Annotation annot= StubUtility2.findAnnotation("java.lang.Override", methodDecl.modifiers()); //$NON-NLS-1$ + Annotation annot= StubUtility2Core.findAnnotation("java.lang.Override", methodDecl.modifiers()); //$NON-NLS-1$ if (annot != null) { ASTRewrite rewrite= ASTRewrite.create(annot.getAST()); rewrite.remove(annot, null); diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/PreferenceConstants.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/PreferenceConstants.java index e23725f530..fbab1f5f10 100644 --- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/PreferenceConstants.java +++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/PreferenceConstants.java @@ -8,6 +8,7 @@ * Contributors: * IBM Corporation - initial API and implementation * Guven Demir <guven.internet+eclipse@gmail.com> - [package explorer] Alternative package name shortening: abbreviation - https://bugs.eclipse.org/bugs/show_bug.cgi?id=299514 + * Red Hat Inc - modify to use CodeGenerationSettingsConstants *******************************************************************************/ package org.eclipse.jdt.ui; @@ -39,6 +40,7 @@ import org.eclipse.jdt.core.manipulation.CodeStyleConfiguration; import org.eclipse.jdt.core.manipulation.JavaManipulation; import org.eclipse.jdt.internal.core.manipulation.MembersOrderPreferenceCacheCommon; +import org.eclipse.jdt.internal.corext.codemanipulation.CodeGenerationSettingsConstants; import org.eclipse.jdt.internal.corext.fix.CleanUpConstantsOptions; import org.eclipse.jdt.ui.text.IJavaColorConstants; @@ -302,7 +304,7 @@ public class PreferenceConstants { * </p> * @since 3.0 */ - public static final String CODEGEN_KEYWORD_THIS= "org.eclipse.jdt.ui.keywordthis"; //$NON-NLS-1$ + public static final String CODEGEN_KEYWORD_THIS= CodeGenerationSettingsConstants.CODEGEN_KEYWORD_THIS; /** * A named preference that controls whether automatically created getters which return a boolean @@ -338,7 +340,7 @@ public class PreferenceConstants { * </p> * @since 2.1 */ - public static final String CODEGEN_ADD_COMMENTS= "org.eclipse.jdt.ui.javadoc"; //$NON-NLS-1$ + public static final String CODEGEN_ADD_COMMENTS= CodeGenerationSettingsConstants.CODEGEN_ADD_COMMENTS; /** * A named preference that controls if a comment stubs will be added @@ -381,7 +383,7 @@ public class PreferenceConstants { * </p> * @since 3.1 */ - public static final String CODEGEN_USE_OVERRIDE_ANNOTATION= "org.eclipse.jdt.ui.overrideannotation"; //$NON-NLS-1$ + public static final String CODEGEN_USE_OVERRIDE_ANNOTATION= CodeGenerationSettingsConstants.CODEGEN_USE_OVERRIDE_ANNOTATION; /** * A named preference that holds a list of semicolon separated fully qualified type names with wild card characters. @@ -430,7 +432,7 @@ public class PreferenceConstants { * Value is of type <code>Boolean</code>. * </p> */ - public static final String ORGIMPORTS_IGNORELOWERCASE= "org.eclipse.jdt.ui.ignorelowercasenames"; //$NON-NLS-1$ + public static final String ORGIMPORTS_IGNORELOWERCASE= CodeGenerationSettingsConstants.ORGIMPORTS_IGNORELOWERCASE; /** * A named preference that specifies whether children of a compilation unit are shown in the package explorer. |