/** * Add a Java Nature to a project when creating * * @param project * @throws CoreException */ private static void addJavaNature(final IProject project) throws CoreException { if (!project.hasNature(JavaCore.NATURE_ID)) { final IProjectDescription description = project.getDescription(); final String[] prevNatures = description.getNatureIds(); final String[] newNatures = new String[prevNatures.length + 1]; System.arraycopy(prevNatures, 0, newNatures, 0, prevNatures.length); newNatures[prevNatures.length] = JavaCore.NATURE_ID; description.setNatureIds(newNatures); project.setDescription(description, null); IFolder sourceFolder = project.getFolder("/src"); sourceFolder.create(true, true, null); IJavaProject javaProject = JavaCore.create(project); javaProject.setRawClasspath( new IClasspathEntry[] { JavaCore.newSourceEntry(sourceFolder.getFullPath()), JavaCore.newContainerEntry(new Path("org.eclipse.jdt.launching.JRE_CONTAINER")) }, null); @SuppressWarnings("unchecked") Hashtable<String, String> javaOptions = JavaCore.getOptions(); javaOptions.put(JavaCore.COMPILER_COMPLIANCE, JavaCore.VERSION_1_5); javaOptions.put(JavaCore.COMPILER_CODEGEN_TARGET_PLATFORM, JavaCore.VERSION_1_5); javaOptions.put(JavaCore.COMPILER_SOURCE, JavaCore.VERSION_1_5); javaProject.setOptions(javaOptions); } }
/** Test custom encoding - using getOptions() */ public void test05() throws CoreException { try { IJavaProject projectA = this.createJavaProject( "A", new String[] {}, // source folders new String[] {}, // lib folders new String[] {}, // projects ""); IJavaProject projectB = this.createJavaProject( "B", new String[] {}, // source folders new String[] {}, // lib folders new String[] {}, // projects ""); String globalEncoding = JavaCore.getOption(JavaCore.CORE_ENCODING); Hashtable options = new Hashtable(); options.put(JavaCore.CORE_ENCODING, "custom"); projectA.setOptions(options); // check project A custom options assertEquals( "projA:unexpected custom encoding", "custom", projectA.getOptions(true).get(JavaCore.CORE_ENCODING)); // check project B custom options (should be none, indicating it sees global ones only) assertEquals( "projB:unexpected custom encoding", globalEncoding, projectB.getOptions(true).get(JavaCore.CORE_ENCODING)); // flush custom options - project A should revert to global ones projectA.setOptions(null); assertEquals( "projA:unexpected reverted encoding", globalEncoding, projectA.getOptions(true).get(JavaCore.CORE_ENCODING)); } finally { this.deleteProject("A"); this.deleteProject("B"); } }
public static IPackageFragmentRoot addRTJar13(IJavaProject jproject) throws CoreException { IPath[] rtJarPath = findRtJar(RT_STUBS_13); Map options = jproject.getOptions(false); JavaProjectHelper.set13CompilerOptions(options); jproject.setOptions(options); return addLibrary(jproject, rtJarPath[0], rtJarPath[1], rtJarPath[2]); }
/** * Sets the java version for which all source is to be compatable with. * * @param project The java project. * @param version The java version. */ @SuppressWarnings("unchecked") public static void setCompilerSourceCompliance(IJavaProject project, String version) throws Exception { // using project.setOption(String,String) doesn't save the setting. Map<String, String> options = project.getOptions(false); options.put(JavaCore.COMPILER_SOURCE, version); options.put(JavaCore.COMPILER_COMPLIANCE, version); options.put(JavaCore.COMPILER_CODEGEN_TARGET_PLATFORM, version); project.setOptions(options); }
public static void makeJava5Compliant(IJavaProject javaProject) { @SuppressWarnings("unchecked") Map<String, String> options = javaProject.getOptions(false); options.put(JavaCore.COMPILER_COMPLIANCE, JavaCore.VERSION_1_5); options.put(JavaCore.COMPILER_SOURCE, JavaCore.VERSION_1_5); options.put(JavaCore.COMPILER_CODEGEN_TARGET_PLATFORM, JavaCore.VERSION_1_5); options.put(JavaCore.COMPILER_PB_ASSERT_IDENTIFIER, JavaCore.ERROR); options.put(JavaCore.COMPILER_PB_ENUM_IDENTIFIER, JavaCore.ERROR); options.put(JavaCore.COMPILER_CODEGEN_INLINE_JSR_BYTECODE, JavaCore.ENABLED); options.put(JavaCore.COMPILER_LOCAL_VARIABLE_ATTR, JavaCore.GENERATE); options.put(JavaCore.COMPILER_LINE_NUMBER_ATTR, JavaCore.GENERATE); options.put(JavaCore.COMPILER_SOURCE_FILE_ATTR, JavaCore.GENERATE); options.put(JavaCore.COMPILER_CODEGEN_UNUSED_LOCAL, JavaCore.PRESERVE); javaProject.setOptions(options); }
/** * Sets the compiler options to 1.4 for the given project. * * @param project the java project */ public static void set14CompilerOptions(IJavaProject project) { Map options = project.getOptions(false); JavaProjectHelper.set14CompilerOptions(options); project.setOptions(options); }
public void testASTRewriteExample() throws Exception { // create a new project IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject("Test"); project.create(null); project.open(null); try { // set the Java nature and Java build path IProjectDescription description = project.getDescription(); description.setNatureIds(new String[] {JavaCore.NATURE_ID}); project.setDescription(description, null); IJavaProject javaProject = JavaCore.create(project); // build path is: project as source folder and JRE container IClasspathEntry[] cpentry = new IClasspathEntry[] { JavaCore.newSourceEntry(javaProject.getPath()), JavaRuntime.getDefaultJREContainerEntry() }; javaProject.setRawClasspath(cpentry, javaProject.getPath(), null); Map<String, String> options = new HashMap<>(); options.put(DefaultCodeFormatterConstants.FORMATTER_TAB_CHAR, JavaCore.SPACE); options.put(DefaultCodeFormatterConstants.FORMATTER_TAB_SIZE, "4"); javaProject.setOptions(options); // create a test file IPackageFragmentRoot root = javaProject.getPackageFragmentRoot(project); IPackageFragment pack1 = root.createPackageFragment("test1", false, null); StringBuffer buf = new StringBuffer(); buf.append("package test1;\n"); buf.append("public class E {\n"); buf.append(" public void foo(int i) {\n"); buf.append(" while (--i > 0) {\n"); buf.append(" System.beep();\n"); buf.append(" }\n"); buf.append(" }\n"); buf.append("}\n"); ICompilationUnit cu = pack1.createCompilationUnit("E.java", buf.toString(), false, null); // create an AST ASTParser parser = ASTParser.newParser(IASTSharedValues.SHARED_AST_LEVEL); parser.setSource(cu); parser.setResolveBindings(false); CompilationUnit astRoot = (CompilationUnit) parser.createAST(null); AST ast = astRoot.getAST(); // create the descriptive ast rewriter ASTRewrite rewrite = ASTRewrite.create(ast); // get the block node that contains the statements in the method body TypeDeclaration typeDecl = (TypeDeclaration) astRoot.types().get(0); MethodDeclaration methodDecl = typeDecl.getMethods()[0]; Block block = methodDecl.getBody(); // create new statements to insert MethodInvocation newInv1 = ast.newMethodInvocation(); newInv1.setName(ast.newSimpleName("bar1")); Statement newStatement1 = ast.newExpressionStatement(newInv1); MethodInvocation newInv2 = ast.newMethodInvocation(); newInv2.setName(ast.newSimpleName("bar2")); Statement newStatement2 = ast.newExpressionStatement(newInv2); // describe that the first node is inserted as first statement in block, the other one as last // statement // note: AST is not modified by this ListRewrite listRewrite = rewrite.getListRewrite(block, Block.STATEMENTS_PROPERTY); listRewrite.insertFirst(newStatement1, null); listRewrite.insertLast(newStatement2, null); // evaluate the text edits corresponding to the described changes. AST and CU still // unmodified. TextEdit res = rewrite.rewriteAST(); // apply the text edits to the compilation unit Document document = new Document(cu.getSource()); res.apply(document); cu.getBuffer().setContents(document.get()); // test result String preview = cu.getSource(); buf = new StringBuffer(); buf.append("package test1;\n"); buf.append("public class E {\n"); buf.append(" public void foo(int i) {\n"); buf.append(" bar1();\n"); buf.append(" while (--i > 0) {\n"); buf.append(" System.beep();\n"); buf.append(" }\n"); buf.append(" bar2();\n"); buf.append(" }\n"); buf.append("}\n"); assertEquals(preview, buf.toString()); } finally { project.delete(true, null); } }
/** Test persistence of project custom options */ public void test01() throws CoreException { try { IJavaProject projectA = this.createJavaProject( "A", new String[] {}, // source folders new String[] {}, // lib folders new String[] {}, // projects ""); IJavaProject projectB = this.createJavaProject( "B", new String[] {}, // source folders new String[] {}, // lib folders new String[] {}, // projects ""); Hashtable options = new Hashtable(); options.put(JavaCore.COMPILER_PB_DEPRECATION_IN_DEPRECATED_CODE, JavaCore.DISABLED); options.put(JavaCore.COMPILER_COMPLIANCE, "8.0"); options.put(JavaCore.COMPILER_PB_HIDDEN_CATCH_BLOCK, JavaCore.ERROR); JavaCore.setOptions(options); options.clear(); options.put(JavaCore.COMPILER_PB_DEPRECATION_IN_DEPRECATED_CODE, JavaCore.ENABLED); options.put(JavaCore.COMPILER_COMPLIANCE, "10.0"); projectA.setOptions(options); // check project A custom options assertEquals( "projA:unexpected custom value for deprecation option", JavaCore.ENABLED, projectA.getOption(JavaCore.COMPILER_PB_DEPRECATION_IN_DEPRECATED_CODE, true)); assertEquals( "projA:unexpected custom value for compliance option", "10.0", projectA.getOption(JavaCore.COMPILER_COMPLIANCE, true)); assertEquals( "projA:unexpected inherited value1 for hidden-catch option", JavaCore.ERROR, projectA.getOption(JavaCore.COMPILER_PB_HIDDEN_CATCH_BLOCK, true)); // check project B custom options (should be none, indicating it sees global ones only) assertEquals( "projB:unexpected custom value for deprecation option", JavaCore.DISABLED, projectB.getOption(JavaCore.COMPILER_PB_DEPRECATION_IN_DEPRECATED_CODE, true)); assertEquals( "projB:unexpected custom value for compliance option", "8.0", projectB.getOption(JavaCore.COMPILER_COMPLIANCE, true)); assertEquals( "projB:unexpected inherited value for hidden-catch option", JavaCore.ERROR, projectB.getOption(JavaCore.COMPILER_PB_HIDDEN_CATCH_BLOCK, true)); // flush custom options - project A should revert to global ones projectA.setOptions(null); assertEquals( "projA:unexpected reverted value for deprecation option", JavaCore.DISABLED, projectA.getOption(JavaCore.COMPILER_PB_DEPRECATION_IN_DEPRECATED_CODE, true)); assertEquals( "projA:unexpected reverted value for compliance option", "8.0", projectA.getOption(JavaCore.COMPILER_COMPLIANCE, true)); assertEquals( "projA:unexpected inherited value2 for hidden-catch option", JavaCore.ERROR, projectA.getOption(JavaCore.COMPILER_PB_HIDDEN_CATCH_BLOCK, true)); } finally { this.deleteProject("A"); this.deleteProject("B"); } }
/** Empty custom option must not be ignored http://bugs.eclipse.org/bugs/show_bug.cgi?id=26251 */ public void test08() throws CoreException { try { IJavaProject projectA = this.createJavaProject( "A", new String[] {}, // source folders new String[] {}, // lib folders new String[] {}, // projects ""); Hashtable options = new Hashtable(); options.put(JavaCore.COMPILER_TASK_TAGS, "TODO:"); JavaCore.setOptions(options); // check project A custom options assertEquals( "1#projA:unexpected custom value for task tags option", null, projectA.getOption(JavaCore.COMPILER_TASK_TAGS, false)); assertEquals( "1#projA:unexpected custom value for inherited task tags option", "TODO:", projectA.getOption(JavaCore.COMPILER_TASK_TAGS, true)); assertEquals( "1#workspace:unexpected custom value for task tags option", "TODO:", JavaCore.getOption(JavaCore.COMPILER_TASK_TAGS)); // change custom options to have one less options.clear(); options.put(JavaCore.COMPILER_TASK_TAGS, ""); projectA.setOptions(options); assertEquals( "2#projA:unexpected custom value for task tags option", "", projectA.getOption(JavaCore.COMPILER_TASK_TAGS, false)); assertEquals( "2#projA:unexpected custom value for inherited task tags option", "", projectA.getOption(JavaCore.COMPILER_TASK_TAGS, true)); assertEquals( "2#workspace:unexpected custom value for task tags option", "TODO:", JavaCore.getOption(JavaCore.COMPILER_TASK_TAGS)); // change custom options to have one less options.clear(); options.put(JavaCore.COMPILER_TASK_TAGS, "@TODO"); JavaCore.setOptions(options); assertEquals( "3#projA:unexpected custom value for task tags option", "", projectA.getOption(JavaCore.COMPILER_TASK_TAGS, false)); assertEquals( "3#projA:unexpected custom value for inherited task tags option", "", projectA.getOption(JavaCore.COMPILER_TASK_TAGS, true)); assertEquals( "3#workspace:unexpected custom value for task tags option", "@TODO", JavaCore.getOption(JavaCore.COMPILER_TASK_TAGS)); } finally { this.deleteProject("A"); } }