Skip to content

Commit

Permalink
Fix #557 - Do not use LegacySupport in BuildPropertiesParser
Browse files Browse the repository at this point in the history
  • Loading branch information
laeubi committed Jan 24, 2022
1 parent f047478 commit f220185
Show file tree
Hide file tree
Showing 39 changed files with 159 additions and 149 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@
import java.util.function.Predicate;
import java.util.stream.Collectors;

import org.eclipse.tycho.BuildProperties;

public class BuildPropertiesImpl implements BuildProperties {

private String javacSource;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
* Christoph Läubrich - Bug 572481 - Tycho does not understand "additional.bundles" directive in build.properties
*******************************************************************************/

package org.eclipse.tycho.core.shared;
package org.eclipse.tycho;

import java.util.Collection;
import java.util.List;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,21 @@
* SAP AG - initial API and implementation
*******************************************************************************/

package org.eclipse.tycho.core.shared;
package org.eclipse.tycho;

import java.io.File;

public interface BuildPropertiesParser {

public static final String BUILD_PROPERTIES = "build.properties";

default BuildProperties parse(ReactorProject project) {
return parse(project.getBasedir(), project.getInterpolator());
}

/**
* Parse the file "build.properties" in baseDir. If the file does not exist or cannot be read,
* an "empty" {@link BuildProperties} will be returned.
*/
public BuildProperties parse(File baseDir);
BuildProperties parse(File baseDir, Interpolator interpolator);
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
* Contributors:
* SAP SE - initial API and implementation
*******************************************************************************/
package org.eclipse.tycho.core.shared;
package org.eclipse.tycho;

public interface Interpolator {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2008, 2020 Sonatype Inc. and others.
* Copyright (c) 2008, 2022 Sonatype Inc. 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
Expand All @@ -9,17 +9,21 @@
*
* Contributors:
* Sonatype Inc. - initial API and implementation
* Christoph Läubrich - add getName() / combine directories
* Christoph Läubrich - add getName() / combine directories / getter for Interpolator
*******************************************************************************/
package org.eclipse.tycho;

import java.io.File;
import java.util.Objects;

/**
* A Tycho project in the reactor.
*/
public interface ReactorProject extends IDependencyMetadata {

static final String CTX_INTERPOLATOR = "tycho.project.interpolator";
static final String CTX_BUILDPROPERTIESPARSER = "tycho.project.buildpropertiesparser";

/**
* Conventional sources jar Maven artifact classifier.
*/
Expand Down Expand Up @@ -66,6 +70,23 @@ public interface ReactorProject extends IDependencyMetadata {
public String getExpandedVersion();

// misc
/**
*
* @return the Interpolator for this project that could be used to resolve maven variable
* references
*/
default Interpolator getInterpolator() {
return Objects.requireNonNull((Interpolator) getContextValue(CTX_INTERPOLATOR),
"No Interpolator found, has the TychoMavenLifecycleParticipant not run?");
}

default BuildProperties getBuildProperties() {
BuildPropertiesParser parser = Objects.requireNonNull(
(BuildPropertiesParser) getContextValue(CTX_BUILDPROPERTIESPARSER),
"No BuildPropertiesParser found, has the TychoMavenLifecycleParticipant not run?");
//we must always ask the parser here, it is expected that the parser caches the properties if the have not changed in the meanwhile
return parser.parse(this);
}

/**
* human-readable id used in error messages
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
import org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor;
import org.eclipse.equinox.p2.repository.artifact.spi.ArtifactDescriptor;
import org.eclipse.equinox.spi.p2.publisher.PublisherHelper;
import org.eclipse.tycho.core.shared.BuildProperties;
import org.eclipse.tycho.BuildProperties;
import org.eclipse.tycho.core.shared.BuildPropertiesImpl;
import org.eclipse.tycho.p2.impl.publisher.MavenPropertiesAdvice;
import org.eclipse.tycho.p2.impl.publisher.rootfiles.FeatureRootAdvice;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,22 +5,22 @@
<service>
<provide interface="org.eclipse.tycho.p2.metadata.P2Generator"/>
</service>
<reference bind="setBuildPropertiesParser" cardinality="1..1" interface="org.eclipse.tycho.core.shared.BuildPropertiesParser" name="BuildPropertiesParser" policy="static"/>
<reference bind="setBuildPropertiesParser" cardinality="1..1" interface="org.eclipse.tycho.BuildPropertiesParser" name="BuildPropertiesParser" policy="static"/>
</scr:component>
<scr:component name="org.eclipse.tycho.p2.impl.publisher.DefaultDependencyMetadataGenerator">
<implementation class="org.eclipse.tycho.p2.impl.publisher.DefaultDependencyMetadataGenerator"/>
<property name='role-hint'>dependency-only</property>
<service>
<provide interface="org.eclipse.tycho.p2.metadata.DependencyMetadataGenerator"/>
</service>
<reference bind="setBuildPropertiesParser" cardinality="1..1" interface="org.eclipse.tycho.core.shared.BuildPropertiesParser" name="BuildPropertiesParser" policy="static"/>
<reference bind="setBuildPropertiesParser" cardinality="1..1" interface="org.eclipse.tycho.BuildPropertiesParser" name="BuildPropertiesParser" policy="static"/>
</scr:component>
<scr:component name="org.eclipse.tycho.p2.impl.publisher.SourcesBundleDependencyMetadataGenerator">
<implementation class="org.eclipse.tycho.p2.impl.publisher.SourcesBundleDependencyMetadataGenerator"/>
<property name='role-hint'>source-bundle</property>
<service>
<provide interface="org.eclipse.tycho.p2.metadata.DependencyMetadataGenerator"/>
</service>
<reference bind="setBuildPropertiesParser" cardinality="1..1" interface="org.eclipse.tycho.core.shared.BuildPropertiesParser" name="BuildPropertiesParser" policy="static"/>
<reference bind="setBuildPropertiesParser" cardinality="1..1" interface="org.eclipse.tycho.BuildPropertiesParser" name="BuildPropertiesParser" policy="static"/>
</scr:component>
</components>
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,11 @@
import org.eclipse.equinox.p2.publisher.PublisherResult;
import org.eclipse.equinox.p2.publisher.actions.ICapabilityAdvice;
import org.eclipse.equinox.p2.repository.artifact.IArtifactRepository;
import org.eclipse.tycho.BuildProperties;
import org.eclipse.tycho.BuildPropertiesParser;
import org.eclipse.tycho.IDependencyMetadata.DependencyMetadataType;
import org.eclipse.tycho.Interpolator;
import org.eclipse.tycho.core.resolver.shared.OptionalResolutionAction;
import org.eclipse.tycho.core.shared.BuildProperties;
import org.eclipse.tycho.core.shared.BuildPropertiesParser;
import org.eclipse.tycho.core.shared.TargetEnvironment;
import org.eclipse.tycho.p2.impl.publisher.repo.TransientArtifactRepository;
import org.eclipse.tycho.p2.metadata.IArtifactFacade;
Expand Down Expand Up @@ -67,8 +68,9 @@ protected abstract List<IPublisherAction> getPublisherActions(IArtifactFacade ar

protected abstract List<IPublisherAdvice> getPublisherAdvice(IArtifactFacade artifact, PublisherOptions options);

protected ICapabilityAdvice getExtraEntriesAdvice(IArtifactFacade artifact) {
final IRequirement[] extraRequirements = extractExtraEntriesAsIURequirement(artifact.getLocation());
protected ICapabilityAdvice getExtraEntriesAdvice(IArtifactFacade artifact, Interpolator interpolator) {
final IRequirement[] extraRequirements = extractExtraEntriesAsIURequirement(artifact.getLocation(),
interpolator);
return new ICapabilityAdvice() {
@Override
public boolean isApplicable(String configSpec, boolean includeDefault, String id, Version version) {
Expand All @@ -92,8 +94,8 @@ public IRequirement[] getMetaRequiredCapabilities(InstallableUnitDescription iu)
};
}

private IRequirement[] extractExtraEntriesAsIURequirement(File location) {
BuildProperties buildProps = buildPropertiesParser.parse(location);
private IRequirement[] extractExtraEntriesAsIURequirement(File location, Interpolator interpolator) {
BuildProperties buildProps = buildPropertiesParser.parse(location, interpolator);
ArrayList<IRequirement> result = new ArrayList<>();
for (Entry<String, List<String>> entry : buildProps.getJarToExtraClasspathMap().entrySet()) {
createRequirementFromExtraClasspathProperty(result, entry.getValue());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
import org.eclipse.equinox.p2.publisher.eclipse.ProductAction;
import org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor;
import org.eclipse.equinox.p2.repository.artifact.spi.ArtifactDescriptor;
import org.eclipse.tycho.Interpolator;
import org.eclipse.tycho.PackagingType;
import org.eclipse.tycho.core.resolver.shared.OptionalResolutionAction;
import org.eclipse.tycho.core.shared.TargetEnvironment;
Expand All @@ -56,6 +57,7 @@
import org.eclipse.tycho.p2.metadata.IP2Artifact;
import org.eclipse.tycho.p2.metadata.P2Generator;
import org.eclipse.tycho.p2.metadata.PublisherOptions;
import org.eclipse.tycho.p2.metadata.ReactorProjectFacade;
import org.eclipse.tycho.p2.repository.RepositoryLayoutHelper;

@SuppressWarnings("restriction")
Expand Down Expand Up @@ -85,6 +87,7 @@ public Map<String, IP2Artifact> generateMetadata(List<IArtifactFacade> artifacts
Map<String, IP2Artifact> result = new LinkedHashMap<>();

for (IArtifactFacade artifact : artifacts) {

PublisherInfo publisherInfo = new PublisherInfo();

DependencyMetadata metadata;
Expand Down Expand Up @@ -355,10 +358,16 @@ private List<File> getCategoryFiles(File projectLocation) {

@Override
protected List<IPublisherAdvice> getPublisherAdvice(IArtifactFacade artifact, PublisherOptions options) {
Interpolator interpolator;
if (artifact instanceof ReactorProjectFacade) {
interpolator = ((ReactorProjectFacade) artifact).getReactorProject().getInterpolator();
} else {
interpolator = null;
}
ArrayList<IPublisherAdvice> advice = new ArrayList<>();
advice.add(new MavenPropertiesAdvice(artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion(),
artifact.getClassifier()));
advice.add(getExtraEntriesAdvice(artifact));
advice.add(getExtraEntriesAdvice(artifact, interpolator));

if (options.generateDownloadStatsProperty) {
advice.add(new DownloadStatsAdvice());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,12 @@
import org.eclipse.equinox.internal.p2.publisher.FileSetDescriptor;
import org.eclipse.equinox.p2.metadata.Version;
import org.eclipse.equinox.p2.publisher.actions.IFeatureRootAdvice;
import org.eclipse.tycho.BuildProperties;
import org.eclipse.tycho.BuildPropertiesParser;
import org.eclipse.tycho.Interpolator;
import org.eclipse.tycho.PackagingType;
import org.eclipse.tycho.core.shared.BuildProperties;
import org.eclipse.tycho.core.shared.BuildPropertiesParser;
import org.eclipse.tycho.p2.metadata.IArtifactFacade;
import org.eclipse.tycho.p2.metadata.ReactorProjectFacade;

/**
* This class handles definitions of root files in build.properties according to
Expand Down Expand Up @@ -55,11 +57,17 @@ public FeatureRootAdvice(BuildProperties buildProperties, File baseDir, String a
*/
public static IFeatureRootAdvice createRootFileAdvice(IArtifactFacade featureArtifact,
BuildPropertiesParser buildPropertiesParser) {
Interpolator interpolator;
if (featureArtifact instanceof ReactorProjectFacade) {
interpolator = ((ReactorProjectFacade) featureArtifact).getReactorProject().getInterpolator();
} else {
interpolator = null;
}
File projectDir = getProjectBaseDir(featureArtifact);

if (projectDir != null) {
FeatureRootAdvice result = new FeatureRootAdvice(buildPropertiesParser.parse(projectDir), projectDir,
featureArtifact.getArtifactId());
FeatureRootAdvice result = new FeatureRootAdvice(buildPropertiesParser.parse(projectDir, interpolator),
projectDir, featureArtifact.getArtifactId());
if (result.hasRootFiles()) {
return result;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
import java.util.Map;
import java.util.Map.Entry;

import org.eclipse.tycho.core.shared.BuildProperties;
import org.eclipse.tycho.BuildProperties;

public class RootPropertiesParser {
static class ParsingResult {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
import org.eclipse.equinox.p2.metadata.IVersionedId;
import org.eclipse.equinox.p2.repository.IRepositoryReference;
import org.eclipse.tycho.ArtifactType;
import org.eclipse.tycho.core.shared.Interpolator;
import org.eclipse.tycho.Interpolator;
import org.eclipse.tycho.core.shared.MavenLogger;
import org.eclipse.tycho.core.shared.MultiLineLogger;
import org.eclipse.tycho.core.shared.VersioningHelper;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,9 @@
import org.eclipse.equinox.p2.repository.metadata.IMetadataRepository;
import org.eclipse.tycho.ArtifactKey;
import org.eclipse.tycho.ArtifactType;
import org.eclipse.tycho.Interpolator;
import org.eclipse.tycho.core.resolver.shared.DependencySeed;
import org.eclipse.tycho.core.shared.BuildFailureException;
import org.eclipse.tycho.core.shared.Interpolator;
import org.eclipse.tycho.core.shared.MavenLogger;
import org.eclipse.tycho.p2.target.ArtifactTypeHelper;
import org.eclipse.tycho.p2.target.P2TargetPlatform;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@

import java.util.List;

import org.eclipse.tycho.Interpolator;
import org.eclipse.tycho.ReactorProject;
import org.eclipse.tycho.core.shared.Interpolator;
import org.eclipse.tycho.core.shared.MavenContext;
import org.eclipse.tycho.core.shared.TargetEnvironment;
import org.eclipse.tycho.p2.target.P2TargetPlatform;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@

import java.util.List;

import org.eclipse.tycho.Interpolator;
import org.eclipse.tycho.ReactorProject;
import org.eclipse.tycho.core.shared.Interpolator;
import org.eclipse.tycho.core.shared.TargetEnvironment;

public interface PublisherServiceFactory {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,10 +48,10 @@

import org.eclipse.equinox.p2.metadata.IInstallableUnit;
import org.eclipse.equinox.p2.query.QueryUtil;
import org.eclipse.tycho.Interpolator;
import org.eclipse.tycho.artifacts.DependencyResolutionException;
import org.eclipse.tycho.core.resolver.shared.DependencySeed;
import org.eclipse.tycho.core.shared.BuildFailureException;
import org.eclipse.tycho.core.shared.Interpolator;
import org.eclipse.tycho.core.shared.TargetEnvironment;
import org.eclipse.tycho.p2.target.FinalTargetPlatformImpl;
import org.eclipse.tycho.p2.target.P2TargetPlatform;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,15 @@
import java.io.InputStream;
import java.util.Properties;

import org.eclipse.tycho.core.shared.BuildProperties;
import org.eclipse.tycho.BuildProperties;
import org.eclipse.tycho.BuildPropertiesParser;
import org.eclipse.tycho.Interpolator;
import org.eclipse.tycho.core.shared.BuildPropertiesImpl;
import org.eclipse.tycho.core.shared.BuildPropertiesParser;

public class BuildPropertiesParserForTesting implements BuildPropertiesParser {

@Override
public BuildProperties parse(File baseDir) {
public BuildProperties parse(File baseDir, Interpolator interpolator) {
Properties props = new Properties();
readBuildProperties(baseDir, props);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
import org.codehaus.plexus.interpolation.SingleResponseValueSource;
import org.codehaus.plexus.interpolation.StringSearchInterpolator;
import org.codehaus.plexus.interpolation.ValueSource;
import org.eclipse.tycho.core.shared.Interpolator;
import org.eclipse.tycho.Interpolator;

/**
* Class thats interpolates string values like ${project.artifactId}. It is using the
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2008, 2020 Sonatype Inc. and others.
* Copyright (c) 2008, 2022 Sonatype Inc. 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
Expand All @@ -8,7 +8,8 @@
* Contributors:
* Sonatype Inc. - initial API and implementation
* Bachmann electronic GmbH - Bug 457314 - handle null as tycho version
* Christoph Läubrich - Bug 569829 - TychoMavenLifecycleParticipant should respect fail-at-end flag / error output is missing
* Christoph Läubrich - Bug 569829 - TychoMavenLifecycleParticipant should respect fail-at-end flag / error output is missing
* - Issue 557 - BuildPropertiesParser should use reactor project instead of basedir
*******************************************************************************/
package org.eclipse.tycho.core.maven;

Expand Down Expand Up @@ -42,6 +43,7 @@
import org.codehaus.plexus.logging.Logger;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.Disposable;
import org.eclipse.sisu.equinox.EquinoxServiceFactory;
import org.eclipse.tycho.BuildPropertiesParser;
import org.eclipse.tycho.ReactorProject;
import org.eclipse.tycho.artifacts.DependencyResolutionException;
import org.eclipse.tycho.core.osgitools.BundleReader;
Expand Down Expand Up @@ -74,6 +76,9 @@ public class TychoMavenLifecycleParticipant extends AbstractMavenLifecyclePartic
@Requirement
private Logger log;

@Requirement
private BuildPropertiesParser buildPropertiesParser;

public TychoMavenLifecycleParticipant() {
// needed for plexus
}
Expand All @@ -99,7 +104,11 @@ public void afterProjectsRead(MavenSession session) throws MavenExecutionExcepti
configureComponents(session);

for (MavenProject project : projects) {
resolver.setupProject(session, project, DefaultReactorProject.adapt(project));
ReactorProject reactorProject = DefaultReactorProject.adapt(project);
reactorProject.setContextValue(ReactorProject.CTX_INTERPOLATOR,
new TychoInterpolator(session, project));
reactorProject.setContextValue(ReactorProject.CTX_BUILDPROPERTIESPARSER, buildPropertiesParser);
resolver.setupProject(session, project, reactorProject);
}

resolveProjects(session, projects);
Expand Down
Loading

0 comments on commit f220185

Please sign in to comment.