diff --git a/tycho-apitools-plugin/src/main/java/org/eclipse/tycho/apitools/ApiAnalysis.java b/tycho-apitools-plugin/src/main/java/org/eclipse/tycho/apitools/ApiAnalysis.java index 9a5fb0b1da..942b500a44 100644 --- a/tycho-apitools-plugin/src/main/java/org/eclipse/tycho/apitools/ApiAnalysis.java +++ b/tycho-apitools-plugin/src/main/java/org/eclipse/tycho/apitools/ApiAnalysis.java @@ -16,12 +16,18 @@ import java.io.IOException; import java.io.InputStream; import java.io.Serializable; +import java.nio.file.FileVisitResult; import java.nio.file.Files; import java.nio.file.Path; +import java.nio.file.SimpleFileVisitor; +import java.nio.file.StandardCopyOption; +import java.nio.file.attribute.BasicFileAttributes; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.Map.Entry; import java.util.Objects; import java.util.Properties; import java.util.concurrent.Callable; @@ -63,6 +69,11 @@ import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline; import org.eclipse.pde.api.tools.internal.provisional.model.IApiComponent; import org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblem; +import org.eclipse.pde.core.build.IBuild; +import org.eclipse.pde.core.build.IBuildEntry; +import org.eclipse.pde.core.build.IBuildModel; +import org.eclipse.pde.core.plugin.IPluginModelBase; +import org.eclipse.pde.core.plugin.PluginRegistry; import org.eclipse.pde.core.target.ITargetDefinition; import org.eclipse.pde.core.target.ITargetLocation; import org.eclipse.pde.core.target.ITargetPlatformService; @@ -74,6 +85,9 @@ import org.osgi.framework.Bundle; import org.osgi.framework.FrameworkUtil; +/** + * Performs the API Analysis inside the embedded OSGi Frameworks + */ public class ApiAnalysis implements Serializable, Callable { private Collection baselineBundles; @@ -86,7 +100,7 @@ public class ApiAnalysis implements Serializable, Callable { private String binaryArtifact; private String outputDir; - public ApiAnalysis(Collection baselineBundles, Collection dependencyBundles, String baselineName, + ApiAnalysis(Collection baselineBundles, Collection dependencyBundles, String baselineName, Path apiFilterFile, Path apiPreferences, Path projectDir, boolean debug, Path binaryArtifact, Path outputDir) { this.targetBundles = dependencyBundles.stream().map(ApiAnalysis::pathAsString).toList(); @@ -222,32 +236,126 @@ private BundleComponent importProject() throws CoreException, IOException { } private void createOutputFolder(IProject project, IPath projectPath) throws IOException, CoreException { + Map outputJars = computeOutputJars(project); IJavaProject javaProject = JavaCore.create(project); if (javaProject != null) { - IPath fullPath = project.getFolder(outputDir).getFullPath(); + IFolder outputFolder = project.getFolder(outputDir); // FIXME see bug https://github.com/eclipse-pde/eclipse.pde/issues/801 // it can happen that project output location != maven compiled classes, usually // eclipse uses output = bin/ while maven uses target/classes if not // specifically configured to be even - javaProject.setOutputLocation(fullPath, null); - makeOutputFolder(javaProject.getOutputLocation(), projectPath); + IPath mainOutputLocation = javaProject.getOutputLocation(); + IPath mainRealPath = getRealPath(mainOutputLocation, outputJars, outputFolder); + makeOutputFolder(mainOutputLocation, mainRealPath); IClasspathEntry[] classpath = javaProject.getRawClasspath(); for (IClasspathEntry entry : classpath) { - // FIXME see bug https://github.com/eclipse-pde/eclipse.pde/issues/791 - makeOutputFolder(entry.getOutputLocation(), projectPath); + IPath entryOutputLocation = entry.getOutputLocation(); + if (entryOutputLocation != null) { + IPath realEntryPath = getRealPath(entryOutputLocation, outputJars, outputFolder); + makeOutputFolder(entryOutputLocation, realEntryPath); + } + } + } + } + + private Map computeOutputJars(IProject project) throws CoreException { + Map outputJars = new HashMap(); + IPluginModelBase base = PluginRegistry.findModel(project); + if (base != null) { + IBuildModel model = PluginRegistry.createBuildModel(base); + if (model != null) { + IBuild ibuild = model.getBuild(); + IBuildEntry[] entries = ibuild.getBuildEntries(); + for (IBuildEntry entry : entries) { + String name = entry.getName(); + if (name.startsWith(IBuildEntry.OUTPUT_PREFIX)) { + String key = name.substring(IBuildEntry.OUTPUT_PREFIX.length()); + for (String token : entry.getTokens()) { + outputJars.put(token, key); + } + } + } + } + } + return outputJars; + } + + private IPath getRealPath(IPath eclipseOutputLocation, Map outputJars, IFolder mavenOutputFolder) { + if (eclipseOutputLocation == null) { + return null; + } + IFolder projectFolder = getProjectFolder(eclipseOutputLocation); + for (Entry entry : outputJars.entrySet()) { + IFolder jarFolder = projectFolder.getProject().getFolder(entry.getKey()); + if (jarFolder.equals(projectFolder)) { + String jarOutputPath = entry.getValue(); + if (".".equals(jarOutputPath)) { + return mavenOutputFolder.getFullPath(); + } + return mavenOutputFolder.getParent() + .getFolder(new org.eclipse.core.runtime.Path(jarOutputPath + "-classes")).getFullPath(); } } + return eclipseOutputLocation; } - private void makeOutputFolder(IPath outputLocation, IPath projectPath) throws CoreException, IOException { - if (outputLocation != null) { + private IFolder makeOutputFolder(IPath eclipseOutputLocation, IPath mavenOutputLocation) + throws CoreException, IOException { + if (eclipseOutputLocation != null) { IWorkspace workspace = ResourcesPlugin.getWorkspace(); - IFolder folder = workspace.getRoot().getFolder(outputLocation); + IFolder folder = workspace.getRoot().getFolder(eclipseOutputLocation); if (!folder.exists()) { folder.create(true, true, new NullProgressMonitor()); } + if (mavenOutputLocation != null && !eclipseOutputLocation.equals(mavenOutputLocation)) { + copy(getFile(mavenOutputLocation), getFile(eclipseOutputLocation)); + } + folder.refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor()); + return folder; } + return null; + } + private File getFile(IPath path) { + if (path == null) { + return null; + } + IWorkspace workspace = ResourcesPlugin.getWorkspace(); + IPath location = workspace.getRoot().getFolder(path).getLocation(); + if (location == null) { + return null; + } + return location.toFile(); + } + + private void copy(File from, File to) throws IOException { + if (from == null || to == null || !from.isDirectory() || !to.isDirectory()) { + return; + } + final Path targetPath = to.toPath(); + Files.walkFileTree(from.toPath(), new SimpleFileVisitor() { + @Override + public FileVisitResult preVisitDirectory(final Path dir, final BasicFileAttributes attrs) + throws IOException { + Files.createDirectories(targetPath.resolve(from.toPath().relativize(dir))); + return FileVisitResult.CONTINUE; + } + + @Override + public FileVisitResult visitFile(final Path file, final BasicFileAttributes attrs) throws IOException { + Files.copy(file, targetPath.resolve(from.toPath().relativize(file)), + StandardCopyOption.REPLACE_EXISTING, StandardCopyOption.COPY_ATTRIBUTES); + return FileVisitResult.CONTINUE; + } + }); + } + + private IFolder getProjectFolder(IPath path) { + if (path != null) { + IWorkspace workspace = ResourcesPlugin.getWorkspace(); + return workspace.getRoot().getFolder(path); + } + return null; } private void deleteAllProjects() throws CoreException { diff --git a/tycho-its/projects/api-tools/.mvn/maven.config b/tycho-its/projects/api-tools/api-break/.mvn/maven.config similarity index 100% rename from tycho-its/projects/api-tools/.mvn/maven.config rename to tycho-its/projects/api-tools/api-break/.mvn/maven.config diff --git a/tycho-its/projects/api-tools/api-repo/category.xml b/tycho-its/projects/api-tools/api-break/api-repo/category.xml similarity index 100% rename from tycho-its/projects/api-tools/api-repo/category.xml rename to tycho-its/projects/api-tools/api-break/api-repo/category.xml diff --git a/tycho-its/projects/api-tools/api-repo/pom.xml b/tycho-its/projects/api-tools/api-break/api-repo/pom.xml similarity index 100% rename from tycho-its/projects/api-tools/api-repo/pom.xml rename to tycho-its/projects/api-tools/api-break/api-repo/pom.xml diff --git a/tycho-its/projects/api-tools/bundle1/.classpath b/tycho-its/projects/api-tools/api-break/bundle1/.classpath similarity index 100% rename from tycho-its/projects/api-tools/bundle1/.classpath rename to tycho-its/projects/api-tools/api-break/bundle1/.classpath diff --git a/tycho-its/projects/api-tools/bundle1/.project b/tycho-its/projects/api-tools/api-break/bundle1/.project similarity index 100% rename from tycho-its/projects/api-tools/bundle1/.project rename to tycho-its/projects/api-tools/api-break/bundle1/.project diff --git a/tycho-its/projects/api-tools/bundle1/META-INF/MANIFEST.MF b/tycho-its/projects/api-tools/api-break/bundle1/META-INF/MANIFEST.MF similarity index 100% rename from tycho-its/projects/api-tools/bundle1/META-INF/MANIFEST.MF rename to tycho-its/projects/api-tools/api-break/bundle1/META-INF/MANIFEST.MF diff --git a/tycho-its/projects/api-tools/bundle1/build.properties b/tycho-its/projects/api-tools/api-break/bundle1/build.properties similarity index 100% rename from tycho-its/projects/api-tools/bundle1/build.properties rename to tycho-its/projects/api-tools/api-break/bundle1/build.properties diff --git a/tycho-its/projects/api-tools/bundle1/pom.xml b/tycho-its/projects/api-tools/api-break/bundle1/pom.xml similarity index 100% rename from tycho-its/projects/api-tools/bundle1/pom.xml rename to tycho-its/projects/api-tools/api-break/bundle1/pom.xml diff --git a/tycho-its/projects/api-tools/bundle1/src/bundle/ApiInterface.java b/tycho-its/projects/api-tools/api-break/bundle1/src/bundle/ApiInterface.java similarity index 100% rename from tycho-its/projects/api-tools/bundle1/src/bundle/ApiInterface.java rename to tycho-its/projects/api-tools/api-break/bundle1/src/bundle/ApiInterface.java diff --git a/tycho-its/projects/api-tools/bundle1/src/bundle/ClassA.java b/tycho-its/projects/api-tools/api-break/bundle1/src/bundle/ClassA.java similarity index 100% rename from tycho-its/projects/api-tools/bundle1/src/bundle/ClassA.java rename to tycho-its/projects/api-tools/api-break/bundle1/src/bundle/ClassA.java diff --git a/tycho-its/projects/api-tools/bundle1/src/bundle/InterfaceB.java b/tycho-its/projects/api-tools/api-break/bundle1/src/bundle/InterfaceB.java similarity index 100% rename from tycho-its/projects/api-tools/bundle1/src/bundle/InterfaceB.java rename to tycho-its/projects/api-tools/api-break/bundle1/src/bundle/InterfaceB.java diff --git a/tycho-its/projects/api-tools/bundle2/.classpath b/tycho-its/projects/api-tools/api-break/bundle2/.classpath similarity index 100% rename from tycho-its/projects/api-tools/bundle2/.classpath rename to tycho-its/projects/api-tools/api-break/bundle2/.classpath diff --git a/tycho-its/projects/api-tools/bundle2/.project b/tycho-its/projects/api-tools/api-break/bundle2/.project similarity index 100% rename from tycho-its/projects/api-tools/bundle2/.project rename to tycho-its/projects/api-tools/api-break/bundle2/.project diff --git a/tycho-its/projects/api-tools/bundle2/META-INF/MANIFEST.MF b/tycho-its/projects/api-tools/api-break/bundle2/META-INF/MANIFEST.MF similarity index 100% rename from tycho-its/projects/api-tools/bundle2/META-INF/MANIFEST.MF rename to tycho-its/projects/api-tools/api-break/bundle2/META-INF/MANIFEST.MF diff --git a/tycho-its/projects/api-tools/bundle2/build.properties b/tycho-its/projects/api-tools/api-break/bundle2/build.properties similarity index 100% rename from tycho-its/projects/api-tools/bundle2/build.properties rename to tycho-its/projects/api-tools/api-break/bundle2/build.properties diff --git a/tycho-its/projects/api-tools/bundle2/pom.xml b/tycho-its/projects/api-tools/api-break/bundle2/pom.xml similarity index 100% rename from tycho-its/projects/api-tools/bundle2/pom.xml rename to tycho-its/projects/api-tools/api-break/bundle2/pom.xml diff --git a/tycho-its/projects/api-tools/bundle2/src/bundle/ApiInterface2.java b/tycho-its/projects/api-tools/api-break/bundle2/src/bundle/ApiInterface2.java similarity index 100% rename from tycho-its/projects/api-tools/bundle2/src/bundle/ApiInterface2.java rename to tycho-its/projects/api-tools/api-break/bundle2/src/bundle/ApiInterface2.java diff --git a/tycho-its/projects/api-tools/pom.xml b/tycho-its/projects/api-tools/api-break/pom.xml similarity index 100% rename from tycho-its/projects/api-tools/pom.xml rename to tycho-its/projects/api-tools/api-break/pom.xml diff --git a/tycho-its/projects/api-tools/embedded-jars/.mvn/extensions.xml b/tycho-its/projects/api-tools/embedded-jars/.mvn/extensions.xml new file mode 100644 index 0000000000..79a6c51e8d --- /dev/null +++ b/tycho-its/projects/api-tools/embedded-jars/.mvn/extensions.xml @@ -0,0 +1,7 @@ + + + org.eclipse.tycho + tycho-build + ${tycho-version} + + diff --git a/tycho-its/projects/api-tools/embedded-jars/.mvn/maven.config b/tycho-its/projects/api-tools/embedded-jars/.mvn/maven.config new file mode 100644 index 0000000000..babb6c469f --- /dev/null +++ b/tycho-its/projects/api-tools/embedded-jars/.mvn/maven.config @@ -0,0 +1 @@ +-Dtycho-version=5.0.0-SNAPSHOT diff --git a/tycho-its/projects/api-tools/embedded-jars/org.eclipse.pde.build/.classpath b/tycho-its/projects/api-tools/embedded-jars/org.eclipse.pde.build/.classpath new file mode 100644 index 0000000000..3bf050a3e7 --- /dev/null +++ b/tycho-its/projects/api-tools/embedded-jars/org.eclipse.pde.build/.classpath @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/tycho-its/projects/api-tools/embedded-jars/org.eclipse.pde.build/.gitignore b/tycho-its/projects/api-tools/embedded-jars/org.eclipse.pde.build/.gitignore new file mode 100644 index 0000000000..dab215db28 --- /dev/null +++ b/tycho-its/projects/api-tools/embedded-jars/org.eclipse.pde.build/.gitignore @@ -0,0 +1,12 @@ +bin +lib +bin_ant +temp* +!/templates/ +build.xml +!/scripts/build.xml +pdebuild.jar +org.eclipse.pde.build_*.zip +pdebuildsrc.zip +javaCompiler.pdebuild.jar.args +javaCompiler.lib_pdebuild-ant.jar.args diff --git a/tycho-its/projects/api-tools/embedded-jars/org.eclipse.pde.build/.project b/tycho-its/projects/api-tools/embedded-jars/org.eclipse.pde.build/.project new file mode 100644 index 0000000000..25264293c3 --- /dev/null +++ b/tycho-its/projects/api-tools/embedded-jars/org.eclipse.pde.build/.project @@ -0,0 +1,44 @@ + + + org.eclipse.pde.build + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + org.eclipse.ui.externaltools.ExternalToolBuilder + auto,full,incremental, + + + LaunchConfigHandle + <project>/.externalToolBuilders/org.eclipse.pde.build localbuild.xml [Builder].launch + + + + + org.eclipse.pde.api.tools.apiAnalysisBuilder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.pde.PluginNature + org.eclipse.pde.api.tools.apiAnalysisNature + + diff --git a/tycho-its/projects/api-tools/embedded-jars/org.eclipse.pde.build/.settings/.api_filters b/tycho-its/projects/api-tools/embedded-jars/org.eclipse.pde.build/.settings/.api_filters new file mode 100644 index 0000000000..5d02df3c89 --- /dev/null +++ b/tycho-its/projects/api-tools/embedded-jars/org.eclipse.pde.build/.settings/.api_filters @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/tycho-its/projects/api-tools/embedded-jars/org.eclipse.pde.build/.settings/org.eclipse.jdt.core.prefs b/tycho-its/projects/api-tools/embedded-jars/org.eclipse.pde.build/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000000..c97ac95ca6 --- /dev/null +++ b/tycho-its/projects/api-tools/embedded-jars/org.eclipse.pde.build/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,462 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.builder.cleanOutputFolder=clean +org.eclipse.jdt.core.builder.duplicateResourceTask=warning +org.eclipse.jdt.core.builder.invalidClasspath=abort +org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch +org.eclipse.jdt.core.circularClasspath=error +org.eclipse.jdt.core.classpath.exclusionPatterns=enabled +org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled +org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled +org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore +org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull +org.eclipse.jdt.core.compiler.annotation.nonnull.secondary= +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary= +org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable +org.eclipse.jdt.core.compiler.annotation.nullable.secondary= +org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=17 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=17 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.doc.comment.support=enabled +org.eclipse.jdt.core.compiler.maxProblemPerUnit=1000 +org.eclipse.jdt.core.compiler.problem.APILeak=warning +org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.autoboxing=ignore +org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning +org.eclipse.jdt.core.compiler.problem.deadCode=warning +org.eclipse.jdt.core.compiler.problem.deprecation=warning +org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled +org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled +org.eclipse.jdt.core.compiler.problem.discouragedReference=ignore +org.eclipse.jdt.core.compiler.problem.emptyStatement=warning +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore +org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore +org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled +org.eclipse.jdt.core.compiler.problem.fieldHiding=warning +org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore +org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning +org.eclipse.jdt.core.compiler.problem.forbiddenReference=error +org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning +org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled +org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning +org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore +org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning +org.eclipse.jdt.core.compiler.problem.invalidJavadoc=error +org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled +org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled +org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled +org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=private +org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning +org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning +org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore +org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning +org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled +org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore +org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore +org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled +org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public +org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag +org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore +org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled +org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public +org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning +org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled +org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning +org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning +org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning +org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning +org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning +org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning +org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning +org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error +org.eclipse.jdt.core.compiler.problem.nullReference=warning +org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error +org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning +org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning +org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore +org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning +org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning +org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore +org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore +org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning +org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning +org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning +org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning +org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning +org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled +org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning +org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled +org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled +org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled +org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning +org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning +org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning +org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled +org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning +org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning +org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning +org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning +org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning +org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled +org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info +org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning +org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning +org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled +org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore +org.eclipse.jdt.core.compiler.problem.unusedImport=error +org.eclipse.jdt.core.compiler.problem.unusedLabel=warning +org.eclipse.jdt.core.compiler.problem.unusedLocal=warning +org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore +org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore +org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled +org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled +org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled +org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error +org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore +org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning +org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=17 +org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647 +org.eclipse.jdt.core.formatter.align_type_members_on_columns=false +org.eclipse.jdt.core.formatter.alignment_for_additive_operator=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16 +org.eclipse.jdt.core.formatter.alignment_for_assignment=0 +org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator=16 +org.eclipse.jdt.core.formatter.alignment_for_compact_if=16 +org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80 +org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0 +org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16 +org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header=0 +org.eclipse.jdt.core.formatter.alignment_for_logical_operator=16 +org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0 +org.eclipse.jdt.core.formatter.alignment_for_module_statements=16 +org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16 +org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator=16 +org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references=0 +org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80 +org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16 +org.eclipse.jdt.core.formatter.alignment_for_string_concatenation=16 +org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_type_arguments=0 +org.eclipse.jdt.core.formatter.alignment_for_type_parameters=0 +org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16 +org.eclipse.jdt.core.formatter.blank_lines_after_imports=1 +org.eclipse.jdt.core.formatter.blank_lines_after_package=1 +org.eclipse.jdt.core.formatter.blank_lines_before_field=0 +org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0 +org.eclipse.jdt.core.formatter.blank_lines_before_imports=1 +org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1 +org.eclipse.jdt.core.formatter.blank_lines_before_method=1 +org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1 +org.eclipse.jdt.core.formatter.blank_lines_before_package=0 +org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1 +org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1 +org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false +org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false +org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position=false +org.eclipse.jdt.core.formatter.comment.format_block_comments=false +org.eclipse.jdt.core.formatter.comment.format_header=false +org.eclipse.jdt.core.formatter.comment.format_html=true +org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false +org.eclipse.jdt.core.formatter.comment.format_line_comments=false +org.eclipse.jdt.core.formatter.comment.format_source_code=true +org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false +org.eclipse.jdt.core.formatter.comment.indent_root_tags=false +org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert +org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert +org.eclipse.jdt.core.formatter.comment.line_length=80 +org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true +org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true +org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false +org.eclipse.jdt.core.formatter.compact_else_if=true +org.eclipse.jdt.core.formatter.continuation_indentation=2 +org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2 +org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off +org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on +org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false +org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true +org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true +org.eclipse.jdt.core.formatter.indent_empty_lines=false +org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true +org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true +org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true +org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true +org.eclipse.jdt.core.formatter.indentation.size=4 +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_after_additive_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert +org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert +org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert +org.eclipse.jdt.core.formatter.insert_space_after_logical_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_relational_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert +org.eclipse.jdt.core.formatter.insert_space_after_shift_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation=insert +org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_additive_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert +org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert +org.eclipse.jdt.core.formatter.insert_space_before_logical_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert +org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert +org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert +org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_relational_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_shift_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation=insert +org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.join_lines_in_comments=true +org.eclipse.jdt.core.formatter.join_wrapped_lines=true +org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false +org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false +org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false +org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false +org.eclipse.jdt.core.formatter.lineSplit=800 +org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false +org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false +org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 +org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1 +org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause=common_lines +org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=false +org.eclipse.jdt.core.formatter.tabulation.char=tab +org.eclipse.jdt.core.formatter.tabulation.size=4 +org.eclipse.jdt.core.formatter.use_on_off_tags=false +org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false +org.eclipse.jdt.core.formatter.wrap_before_additive_operator=true +org.eclipse.jdt.core.formatter.wrap_before_assignment_operator=false +org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator=true +org.eclipse.jdt.core.formatter.wrap_before_conditional_operator=true +org.eclipse.jdt.core.formatter.wrap_before_logical_operator=true +org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator=true +org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true +org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true +org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true +org.eclipse.jdt.core.incompatibleJDKLevel=ignore +org.eclipse.jdt.core.incompleteClasspath=error +org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter diff --git a/tycho-its/projects/api-tools/embedded-jars/org.eclipse.pde.build/.settings/org.eclipse.jdt.ui.prefs b/tycho-its/projects/api-tools/embedded-jars/org.eclipse.pde.build/.settings/org.eclipse.jdt.ui.prefs new file mode 100644 index 0000000000..20063627cf --- /dev/null +++ b/tycho-its/projects/api-tools/embedded-jars/org.eclipse.pde.build/.settings/org.eclipse.jdt.ui.prefs @@ -0,0 +1,55 @@ +eclipse.preferences.version=1 +editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true +formatter_profile=_core +formatter_settings_version=13 +org.eclipse.jdt.ui.text.custom_code_templates= +sp_cleanup.add_default_serial_version_id=true +sp_cleanup.add_generated_serial_version_id=false +sp_cleanup.add_missing_annotations=true +sp_cleanup.add_missing_deprecated_annotations=true +sp_cleanup.add_missing_methods=false +sp_cleanup.add_missing_nls_tags=false +sp_cleanup.add_missing_override_annotations=true +sp_cleanup.add_serial_version_id=false +sp_cleanup.always_use_blocks=true +sp_cleanup.always_use_parentheses_in_expressions=false +sp_cleanup.always_use_this_for_non_static_field_access=false +sp_cleanup.always_use_this_for_non_static_method_access=false +sp_cleanup.convert_to_enhanced_for_loop=false +sp_cleanup.correct_indentation=false +sp_cleanup.format_source_code=true +sp_cleanup.format_source_code_changes_only=false +sp_cleanup.make_local_variable_final=false +sp_cleanup.make_parameters_final=false +sp_cleanup.make_private_fields_final=true +sp_cleanup.make_variable_declarations_final=true +sp_cleanup.never_use_blocks=false +sp_cleanup.never_use_parentheses_in_expressions=true +sp_cleanup.on_save_use_additional_actions=true +sp_cleanup.organize_imports=true +sp_cleanup.qualify_static_field_accesses_with_declaring_class=false +sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true +sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true +sp_cleanup.qualify_static_member_accesses_with_declaring_class=false +sp_cleanup.qualify_static_method_accesses_with_declaring_class=false +sp_cleanup.remove_private_constructors=true +sp_cleanup.remove_trailing_whitespaces=false +sp_cleanup.remove_trailing_whitespaces_all=true +sp_cleanup.remove_trailing_whitespaces_ignore_empty=false +sp_cleanup.remove_unnecessary_casts=true +sp_cleanup.remove_unnecessary_nls_tags=false +sp_cleanup.remove_unused_imports=false +sp_cleanup.remove_unused_local_variables=false +sp_cleanup.remove_unused_private_fields=true +sp_cleanup.remove_unused_private_members=false +sp_cleanup.remove_unused_private_methods=true +sp_cleanup.remove_unused_private_types=true +sp_cleanup.sort_members=false +sp_cleanup.sort_members_all=false +sp_cleanup.use_blocks=false +sp_cleanup.use_blocks_only_for_return_and_throw=false +sp_cleanup.use_parentheses_in_expressions=false +sp_cleanup.use_this_for_non_static_field_access=false +sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true +sp_cleanup.use_this_for_non_static_method_access=false +sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true diff --git a/tycho-its/projects/api-tools/embedded-jars/org.eclipse.pde.build/META-INF/MANIFEST.MF b/tycho-its/projects/api-tools/embedded-jars/org.eclipse.pde.build/META-INF/MANIFEST.MF new file mode 100644 index 0000000000..c49a21e120 --- /dev/null +++ b/tycho-its/projects/api-tools/embedded-jars/org.eclipse.pde.build/META-INF/MANIFEST.MF @@ -0,0 +1,25 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: %pluginName +Bundle-SymbolicName: org.eclipse.pde.build;singleton:=true +Bundle-Version: 3.12.200.qualifier +Bundle-ClassPath: pdebuild.jar +Bundle-Activator: org.eclipse.pde.internal.build.BuildActivator +Bundle-Vendor: %providerName +Bundle-Localization: plugin +Export-Package: org.eclipse.pde.build, + org.eclipse.pde.internal.build;x-friends:="org.eclipse.pde.core,org.eclipse.pde.ui,org.eclipse.pde.launching", + org.eclipse.pde.internal.build.ant;x-internal:=true, + org.eclipse.pde.internal.build.builder;x-internal:=true, + org.eclipse.pde.internal.build.fetch;x-internal:=true, + org.eclipse.pde.internal.build.packager;x-friends:="org.eclipse.pde.core", + org.eclipse.pde.internal.build.properties;x-internal:=true, + org.eclipse.pde.internal.build.publisher.compatibility;x-internal:=true, + org.eclipse.pde.internal.build.site;x-friends:="org.eclipse.pde.core,org.eclipse.pde.ui", + org.eclipse.pde.internal.build.site.compatibility;x-internal:=true, + org.eclipse.pde.internal.build.tasks;x-internal:=true +Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.0.0,4.0.0)" +Bundle-ActivationPolicy: lazy +Eclipse-BundleShape: dir +Bundle-RequiredExecutionEnvironment: JavaSE-17 +Automatic-Module-Name: org.eclipse.pde.build diff --git a/tycho-its/projects/api-tools/embedded-jars/org.eclipse.pde.build/META-INF/eclipse.inf b/tycho-its/projects/api-tools/embedded-jars/org.eclipse.pde.build/META-INF/eclipse.inf new file mode 100644 index 0000000000..43380da055 --- /dev/null +++ b/tycho-its/projects/api-tools/embedded-jars/org.eclipse.pde.build/META-INF/eclipse.inf @@ -0,0 +1,2 @@ +jarprocessor.exclude.children=true +jarprocessor.exclude.pack=true diff --git a/tycho-its/projects/api-tools/embedded-jars/org.eclipse.pde.build/build.properties b/tycho-its/projects/api-tools/embedded-jars/org.eclipse.pde.build/build.properties new file mode 100644 index 0000000000..ee05f53c45 --- /dev/null +++ b/tycho-its/projects/api-tools/embedded-jars/org.eclipse.pde.build/build.properties @@ -0,0 +1,29 @@ +############################################################################### +# Copyright (c) 2003, 2009 IBM Corporation and others. +# +# This program and the accompanying materials +# are made available under the terms of the Eclipse Public License 2.0 +# which accompanies this distribution, and is available at +# https://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +# +# Contributors: +# IBM Corporation - initial API and implementation +############################################################################### +extra.lib/pdebuild-ant.jar = ../org.apache.ant/ant.jar +bin.includes = plugin.xml,\ + plugin.properties,\ + *.jar,\ + lib/*.jar,\ + META-INF/ +jars.compile.order = pdebuild.jar,\ + lib/pdebuild-ant.jar +source.pdebuild.jar = src/ +output.pdebuild.jar = bin/ +src.includes = about.html,\ + schema/ +source.lib/pdebuild-ant.jar = src_ant/ +output.lib/pdebuild-ant.jar = bin_ant/ +jars.extra.classpath = platform:/plugin/org.apache.ant/lib/ant.jar,\ + platform:/plugin/org.eclipse.equinox.p2.repository.tools/lib/repository-tools-ant.jar diff --git a/tycho-its/projects/api-tools/embedded-jars/org.eclipse.pde.build/plugin.properties b/tycho-its/projects/api-tools/embedded-jars/org.eclipse.pde.build/plugin.properties new file mode 100644 index 0000000000..9e14eae7df --- /dev/null +++ b/tycho-its/projects/api-tools/embedded-jars/org.eclipse.pde.build/plugin.properties @@ -0,0 +1,17 @@ +############################################################################### +# Copyright (c) 2003, 2006 IBM Corporation and others. +# +# This program and the accompanying materials +# are made available under the terms of the Eclipse Public License 2.0 +# which accompanies this distribution, and is available at +# https://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +# +# Contributors: +# IBM Corporation - initial API and implementation +############################################################################### +pluginName = Plug-in Development Environment Build Support +providerName = Eclipse.org + +fetchFactories.name = Fetch Script Factories diff --git a/tycho-its/projects/api-tools/embedded-jars/org.eclipse.pde.build/plugin.xml b/tycho-its/projects/api-tools/embedded-jars/org.eclipse.pde.build/plugin.xml new file mode 100644 index 0000000000..48335b34c8 --- /dev/null +++ b/tycho-its/projects/api-tools/embedded-jars/org.eclipse.pde.build/plugin.xml @@ -0,0 +1,163 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tycho-its/projects/api-tools/embedded-jars/org.eclipse.pde.build/schema/fetchFactories.exsd b/tycho-its/projects/api-tools/embedded-jars/org.eclipse.pde.build/schema/fetchFactories.exsd new file mode 100644 index 0000000000..bd5f4786f0 --- /dev/null +++ b/tycho-its/projects/api-tools/embedded-jars/org.eclipse.pde.build/schema/fetchFactories.exsd @@ -0,0 +1,137 @@ + + + + + + + + + This extension point provides factories for constructing repository specific fetch script during the PDE Build fetch process (eclipse.fetch Ant task). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Defines a fetch factory being used in the eclipse.fetch Ant task. + + + + + + + The id identifying the repository. This value is used in the map files. + + + + + + + The factory implementation. It must implement <code>org.eclipse.pde.build.IFetchFactory</code>. + + + + + + + + + + + + + + + 3.2 + + + + + + + + + <pre> +<extension point="org.eclipse.pde.build.fetchFactories"> + <factory + class="org.eclipse.pde.internal.build.fetch.CVSFetchTaskFactory" + id="CVS"/> + <factory + class="org.eclipse.pde.internal.build.fetch.COPYFetchTasksFactory" + id="COPY"/> +</extension> +</pre> + + + + + + + + + See the <code>org.eclipse.pde.build.IFetchFactory</code> interface. + + + + + + + + + The following fetch task factories are provided by PDE Build. +<ul> +<li>a CVS fetch task factory for fetching features and plug-ins from CVS repositories.</li> +<li>a COPY fetch task factory for copying features and plug-ins from arbitrary file system locations.</li> +</ul> + + + + + + + + + Copyright (c) 2004, 2006 Eclipse Foundation 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: + Gunnar Wagenknecht - Initial API and implementation + IBM Corporation - Initial API and implementation + + + + diff --git a/tycho-its/projects/api-tools/embedded-jars/org.eclipse.pde.build/src/org/eclipse/pde/build/Constants.java b/tycho-its/projects/api-tools/embedded-jars/org.eclipse.pde.build/src/org/eclipse/pde/build/Constants.java new file mode 100644 index 0000000000..a0cf62a2a5 --- /dev/null +++ b/tycho-its/projects/api-tools/embedded-jars/org.eclipse.pde.build/src/org/eclipse/pde/build/Constants.java @@ -0,0 +1,43 @@ +/********************************************************************** + * Copyright (c) 2006, 2010 Eclipse Foundation and others. + * + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Gunnar Wagenknecht - Initial API and implementation + * IBM Corporation - Initial API and implementation + **********************************************************************/ +package org.eclipse.pde.build; + +/** + * Constants for the files usually manipulated by the fetch factory. + * @since 3.2 + * @noimplement This interface is not intended to be implemented by clients. + */ +public interface Constants { + /** Constant for the string feature.xml */ + public final static String FEATURE_FILENAME_DESCRIPTOR = "feature.xml"; //$NON-NLS-1$ + + /** Constant for the string fragment.xml */ + public final static String FRAGMENT_FILENAME_DESCRIPTOR = "fragment.xml"; //$NON-NLS-1$ + + /** Constant for the string plugin.xml */ + public final static String PLUGIN_FILENAME_DESCRIPTOR = "plugin.xml"; //$NON-NLS-1$ + + /** Constant for the string META-INF/MANIFEST.MF */ + public final static String BUNDLE_FILENAME_DESCRIPTOR = "META-INF/MANIFEST.MF"; //$NON-NLS-1$ + + /** + * Key used to store the value of a project reference in the Eclipse-SourceReferences manifest header. + * + * @since 3.6 + * @see IFetchFactory + */ + public static final String KEY_SOURCE_REFERENCES = "sourceReferences"; //$NON-NLS-1$ + +} diff --git a/tycho-its/projects/api-tools/embedded-jars/org.eclipse.pde.build/src/org/eclipse/pde/build/IAntScript.java b/tycho-its/projects/api-tools/embedded-jars/org.eclipse.pde.build/src/org/eclipse/pde/build/IAntScript.java new file mode 100644 index 0000000000..9f92f5a12c --- /dev/null +++ b/tycho-its/projects/api-tools/embedded-jars/org.eclipse.pde.build/src/org/eclipse/pde/build/IAntScript.java @@ -0,0 +1,155 @@ +/******************************************************************************* + * Copyright (c) 2006, 2019 IBM Corporation and others. + * + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * IBM Corporation - Initial API and implementation + *******************************************************************************/ +package org.eclipse.pde.build; + +import java.util.List; +import java.util.Map; + +/** + * Interface providing helper methods to produce Ant scripts. + *

+ * It contains convenience methods for creating the XML elements + * required for Ant scripts. See the Ant + * website for more details on Ant scripts and the particular Ant tasks. + *

+ * @noimplement This interface is not intended to be implemented by clients. + */ +public interface IAntScript { + + /** + * Print the given string to the Ant script. + * + * @param string the string to print. + */ + public void print(String string); + + /** + * Print the given comment to the Ant script folled by a carriage-return. + * + * @param comment the comment to print. + */ + public void printComment(String comment); + + /** + * Print the given string followed by a carriage-return. + * + * @param string the string to print. + */ + public void println(String string); + + /** + * Print a empty line. + */ + public void println(); + + /** + * Print an ant call task as defined by AntCall}. + * @param target the target executed by the call. This value can not be null. + * @param inheritAll If true, pass all properties to the new Ant project. + * @param params Specifies as key / value pairs, the properties to set before running the specified target. This value can be null + */ + public void printAntCallTask(String target, boolean inheritAll, Map params); + + /** + * Print an XML attribute. name=value. + * @param name the name of the attribute to print. This value can not be null. + * @param value the name of the value to print. This value can be null. + * @param mandatory indicate whether or not the value is mandatory. + * If the value is null and the attribute is mandatory, the printed value will be "". + */ + public void printAttribute(String name, String value, boolean mandatory); + + /** + * Print tagName as an xml begin tag (<tagName>). + * @param tagName the tag to print. + */ + public void printStartTag(String tagName); + + /** + * Print tagName as an xml begin tag with attributes (<tagName [attributes...] >). + * @param tag the tag to print. + * @param attributes attributes for the tag. + * @since 3.6 + */ + public void printStartTag(String tag, Map attributes); + + /** + * Print tagName as an xml end tag (</tagName>). + * @param endTag the tag to print. + */ + public void printEndTag(String endTag); + + /** + * Print an xml element with attributes (<tagName [attributes...] />). + * @param tag the tag to print + * @param attributes the attributes for the tag + * @since 3.6 + */ + public void printElement(String tag, Map attributes); + + /** + * Print as many tabs as current nesting level requires + */ + public void printTabs(); + + /** + * Increment the nesting level + * @since 3.6 + */ + public void incrementIdent(); + + /** + * Decrement the nesting level + * @since 3.6 + */ + public void decrementIdent(); + + /** + * Print a target declaration. See Ant's targets. + * @param name the name of the target. This value can not be null. + * @param depends a comma-separated list of names of targets on which this target depends. This value can be null. + * @param ifClause the name of the property that must be set in order for this target to execute. This value can be null + * @param unlessClause the name of the property that must not be set in order for this target to execute. This value can be null + * @param description a short description of this target's function. This value can be null + */ + public void printTargetDeclaration(String name, String depends, String ifClause, String unlessClause, String description); + + /** + * Print the end tag for a target declaration. + */ + public void printTargetEnd(); + + /** + * Print an echo task + * @param file - file to write the message to (or null) + * @param message - the message to echo + * @param level - the level to report the message (ie, "error", "warning", "info"), "warning" is the default if null is passed. + * @since 3.6 + */ + public void printEchoTask(String file, String message, String level); + + /** + * Print the beginning of a macro definition. + * @param macroName the name of the macro + * @param attributes the attributes of the macro + * @since 3.6 + */ + public void printMacroDef(String macroName, List attributes); + + /** + * Print the end of the macro + * @since 3.6 + */ + public void printEndMacroDef(); +} diff --git a/tycho-its/projects/api-tools/embedded-jars/org.eclipse.pde.build/src/org/eclipse/pde/build/IFetchFactory.java b/tycho-its/projects/api-tools/embedded-jars/org.eclipse.pde.build/src/org/eclipse/pde/build/IFetchFactory.java new file mode 100644 index 0000000000..7466d5271f --- /dev/null +++ b/tycho-its/projects/api-tools/embedded-jars/org.eclipse.pde.build/src/org/eclipse/pde/build/IFetchFactory.java @@ -0,0 +1,134 @@ +/********************************************************************** + * Copyright (c) 2004, 2019 Eclipse Foundation and others. + * + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Gunnar Wagenknecht - Initial API and implementation + * IBM Corporation - Initial API and implementation + **********************************************************************/ +package org.eclipse.pde.build; + +import java.util.Map; +import java.util.Properties; + +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IPath; + +/** + * Interface to be implemented by clients of the org.eclipse.pde.build.fetchFactories extension-point. + *

+ * The factories are being used at various points in the execution of the PDE Build eclipse.fetch Ant task. + * Based on a map file entry, they are responsible for generating segments of an ant script whose execution will fetch + * plug-ins, fragments, bundles and features or individual files contained in one of those elements. + * The format of a map file entry is: + * + * <elementType>@<elementName> = <repositoryTag>, <repositoryDetails> + * + * The format of elementType and elementName is fixed. + * The factories specify the value of repositoryTag and the format of the repositoryDetails. + * repositoryTag and repositoryDetails becomes defacto APIs. + *
+ * repositoryTag should match the factory id used when declaring the factory extension. For example, for the CVS the value is "CVS". + * repositoryDetails should contains enough details to allow the factory to generate a fetch script retrieving the element. + *

+ *

+ * The fetch factories are being contributed through the org.eclipse.pde.build.fetchFactories + * extension-points. + *

+ *

+ * Fetch factories will not be re-used between different PDE Build eclipse.fetch Ant tasks. Each task will create at + * most one fetch factory instance for the duration of the task processing. This allows implementors to + * build and maintain stateful information. Such information must be released in {@link #addTargets(IAntScript)} call. + *

+ * @since 3.2 + */ +public interface IFetchFactory { + /** Key used to store the value of the element name. */ + public static final String KEY_ELEMENT_NAME = "element"; //$NON-NLS-1$ + + /** Key used to store the value of the element type */ + public static final String KEY_ELEMENT_TYPE = "type"; //$NON-NLS-1$ + + /** Key used to store the value of the tag that will be used to fetch the element. + *

+ * The grammar of the expected value is limited to: + *

+	 *  	 value::= (alpha|digit|'_'|'-')+
+	 *      digit ::= [0..9]
+	 *      alpha ::= [a..zA..Z]
+	 * 
+ * */ + public static final String KEY_ELEMENT_TAG = "tag"; //$NON-NLS-1$ + + /** One of the value for element type. See {@link #KEY_ELEMENT_TYPE}.*/ + public static final String ELEMENT_TYPE_BUNDLE = "bundle"; //$NON-NLS-1$ + + /** One of the value for element type. See {@link #KEY_ELEMENT_TYPE}.*/ + public static final String ELEMENT_TYPE_FEATURE = "feature"; //$NON-NLS-1$ + + /** One of the value for element type. See {@link #KEY_ELEMENT_TYPE}.*/ + public static final String ELEMENT_TYPE_FRAGMENT = "fragment"; //$NON-NLS-1$ + + /** One of the value for element type. See {@link #KEY_ELEMENT_TYPE}.*/ + public static final String ELEMENT_TYPE_PLUGIN = "plugin"; //$NON-NLS-1$ + + /** + * This method should parse / validate a mapfile entry and derive a corresponding + * key / value pair structure containing the relevant information. + *

+ * The arguments specified in the map file are provided. The map with entry + * infos should be filled with provider specific information that is + * required in later processing to sucessfully generate the fetch script. + *

+ *

+ * Since 3.6, factories may optionally set the {@link Constants#KEY_SOURCE_REFERENCES} property in the entry infos map to support the inclusion + * of source references in the bundle manifest using the Eclipse-SourceReferences header. + *

+ * @param rawEntry the arguments as specified in the map file (may not be null). + * @param overrideTags a key / value containing all the override tags specified for all the repository (maybe null or empty). + * The values of this map of this are read from the fetchTag property (see file scripts/templates/headless-build/build.properties). + * @param entryInfos the map to store repository specific information derived from the rawEntry.This object is being passed as arguments to + * the other methods of the factory. The factories are also expected to set {@link #KEY_ELEMENT_TAG} to indicate the tag that will be used + * to fetch the element. This value is for example used to generate the "qualifier" value of a version number. + * Note that {@link #KEY_ELEMENT_NAME} and {@link #KEY_ELEMENT_TYPE} are reserved entries whose values respectively + * refer to the name of the element being fetched and its type. + * @throws CoreException if the rawEntry is incorrect. + */ + public void parseMapFileEntry(String rawEntry, Properties overrideTags, Map entryInfos) throws CoreException; + + /** + * Generates a segment of ant script whose execution will fetch the element (bundle, plug-in, fragment, feature) indicated in the entryInfos arguments. + * + * @param entryInfos the map that has been built in the {@link #parseMapFileEntry(String, Properties, Map)} method. + * This map contains the name and the type of the element (resp. {@link #KEY_ELEMENT_NAME} and {@link #KEY_ELEMENT_TYPE}) to put in the destination. + * @param destination the destination where the element should be fetched to. For example, for a plug-in the plugin.xml file is expected + * to be in destination/plugin.xml. + * @param script the script in which to generate the segments of ant script. It is not authorized to generate target declaration during this call. + */ + public void generateRetrieveElementCall(Map entryInfos, IPath destination, IAntScript script); + + /** + * Generates a segment of ant script whose execution will fetch the specified file from the given element. + * + * @param entryInfos the map that has been built in the {@link #parseMapFileEntry(String, Properties, Map)} method. + * This map contains the name and the type of the element (resp. {@link #KEY_ELEMENT_NAME} and {@link #KEY_ELEMENT_TYPE}) to put in the destination. + * @param destination the destination where the element should be fetched to. For example, for a plug-in the plugin.xml file is expected + * to be in destination/plugin.xml. + * @param files the files to obtained for the specified element. + * @param script the script in which to generate the segments of ant script. It is not authorized to generate target declaration during this call. + */ + public void generateRetrieveFilesCall(Map entryInfos, IPath destination, String[] files, IAntScript script); + + /** + * This methods give opportunities to the factory to generate target declaration or other Ant top level constructs in the script. + * The generated elements can be invoked from the ant scripts segments created in {@link #generateRetrieveElementCall(Map, IPath, IAntScript)} + * and {@link #generateRetrieveFilesCall(Map, IPath, String[], IAntScript)}. + */ + public void addTargets(IAntScript script); +} diff --git a/tycho-its/projects/api-tools/embedded-jars/org.eclipse.pde.build/src/org/eclipse/pde/build/package.html b/tycho-its/projects/api-tools/embedded-jars/org.eclipse.pde.build/src/org/eclipse/pde/build/package.html new file mode 100644 index 0000000000..75ff0158ba --- /dev/null +++ b/tycho-its/projects/api-tools/embedded-jars/org.eclipse.pde.build/src/org/eclipse/pde/build/package.html @@ -0,0 +1,14 @@ + + + + + Package-level Javadoc + + +Pluggable repository support for eclipse.fetch. +

+Package Specification

+

This package contains the interfaces necessary to contribute a new repository support to the eclipse.fetch task of PDE Build. +

+ + diff --git a/tycho-its/projects/api-tools/embedded-jars/org.eclipse.pde.build/src_ant/META-INF/eclipse.inf b/tycho-its/projects/api-tools/embedded-jars/org.eclipse.pde.build/src_ant/META-INF/eclipse.inf new file mode 100644 index 0000000000..b4df3ab631 --- /dev/null +++ b/tycho-its/projects/api-tools/embedded-jars/org.eclipse.pde.build/src_ant/META-INF/eclipse.inf @@ -0,0 +1 @@ +jarprocessor.exclude.sign=true \ No newline at end of file diff --git a/tycho-its/projects/api-tools/embedded-jars/pom.xml b/tycho-its/projects/api-tools/embedded-jars/pom.xml new file mode 100644 index 0000000000..4ee027e572 --- /dev/null +++ b/tycho-its/projects/api-tools/embedded-jars/pom.xml @@ -0,0 +1,59 @@ + + + 4.0.0 + org.eclipse.tycho.tycho-its + apitools-parent + 0.0.1-SNAPSHOT + pom + + org.eclipse.pde.build + + + https://download.eclipse.org/releases/2023-09/ + https://download.eclipse.org/eclipse/updates/4.29/R-4.29-202309031000/ + + + + platform + ${target-platform} + p2 + + + + + + org.eclipse.tycho + tycho-maven-plugin + ${tycho-version} + true + + + org.eclipse.tycho + tycho-apitools-plugin + ${tycho-version} + + + + baseline + ${baselineRepo} + + + + + + generate + + generate + + + + analyse + + verify + + + + + + + \ No newline at end of file diff --git a/tycho-its/repositories/api-tools/artifacts.xml b/tycho-its/repositories/api-tools/artifacts.xml index eb6a562902..cfecdd6bf6 100644 --- a/tycho-its/repositories/api-tools/artifacts.xml +++ b/tycho-its/repositories/api-tools/artifacts.xml @@ -39,6 +39,18 @@ + + + + + + + + + + + + diff --git a/tycho-its/repositories/api-tools/content.xml b/tycho-its/repositories/api-tools/content.xml index e38f6adb63..05ef0ea318 100644 --- a/tycho-its/repositories/api-tools/content.xml +++ b/tycho-its/repositories/api-tools/content.xml @@ -5,7 +5,7 @@ - + @@ -99,6 +99,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + Bundle-SymbolicName: org.eclipse.pde.build;singleton:=true Bundle-Version: 3.12.100.v20230825-1354 + + + + diff --git a/tycho-its/repositories/api-tools/plugins/org.eclipse.pde.build_3.12.100.v20230825-1354.jar b/tycho-its/repositories/api-tools/plugins/org.eclipse.pde.build_3.12.100.v20230825-1354.jar new file mode 100644 index 0000000000..6c2b9788f1 Binary files /dev/null and b/tycho-its/repositories/api-tools/plugins/org.eclipse.pde.build_3.12.100.v20230825-1354.jar differ diff --git a/tycho-its/src/test/java/org/eclipse/tycho/test/apitools/ApiToolsTest.java b/tycho-its/src/test/java/org/eclipse/tycho/test/apitools/ApiToolsTest.java index 5f3f8f7db6..fc10af4bf7 100644 --- a/tycho-its/src/test/java/org/eclipse/tycho/test/apitools/ApiToolsTest.java +++ b/tycho-its/src/test/java/org/eclipse/tycho/test/apitools/ApiToolsTest.java @@ -33,7 +33,7 @@ public class ApiToolsTest extends AbstractTychoIntegrationTest { @Test public void testGenerate() throws Exception { - Verifier verifier = getVerifier("api-tools", true, true); + Verifier verifier = getVerifier("api-tools/api-break", true, true); verifier.executeGoals(List.of("clean", "package")); verifier.verifyErrorFreeLog(); File descriptionFile = new File(verifier.getBasedir(), "bundle1/target/.api_description"); @@ -44,8 +44,8 @@ public void testGenerate() throws Exception { } @Test - public void testVerify() throws Exception { - Verifier verifier = getVerifier("api-tools", true, true); + public void testApiBreak() throws Exception { + Verifier verifier = getVerifier("api-tools/api-break", true, true); File repo = ResourceUtil.resolveTestResource("repositories/api-tools"); verifier.addCliOption("-DbaselineRepo=" + repo.toURI()); @@ -88,4 +88,22 @@ public void testVerify() throws Exception { // TODO: check with api-filter // TODO: check with second plugin with BREE? } + + /** + * This test an api compare where there are only embedded jars but nothing in + * the output folder, the expectation is that everything works and no API errors + * are reported, in case of problems some invalid API error are reported similar + * to "The type org.eclipse.pde.build.Constants has been removed from + * org.eclipse.pde.build_3.12.200" + * + * @throws Exception + */ + @Test + public void testEmbeddedJars() throws Exception { + Verifier verifier = getVerifier("api-tools/embedded-jars", true, true); + File repo = ResourceUtil.resolveTestResource("repositories/api-tools"); + verifier.addCliOption("-DbaselineRepo=" + repo.toURI()); + verifier.executeGoals(List.of("clean", "verify")); + verifier.verifyErrorFreeLog(); + } }