Skip to content

Commit

Permalink
Merge branch 'release/1.0.0-preview.20210926' into master/1.x
Browse files Browse the repository at this point in the history
  • Loading branch information
eiiches committed Sep 25, 2021
2 parents d373805 + 50cd9ca commit 5186c99
Show file tree
Hide file tree
Showing 103 changed files with 1,253 additions and 289 deletions.
22 changes: 22 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
version: 2
updates:
- package-ecosystem: "maven"
directory: "/"
schedule:
interval: "daily"
- package-ecosystem: "maven"
directory: "/jackson-jq/"
schedule:
interval: "daily"
- package-ecosystem: "maven"
directory: "/jackson-jq-cli/"
schedule:
interval: "daily"
- package-ecosystem: "maven"
directory: "/jackson-jq-extra/"
schedule:
interval: "daily"
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "daily"
7 changes: 4 additions & 3 deletions .github/workflows/deploy-snapshot.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,12 @@ jobs:
build:
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@v1
- uses: actions/checkout@v2.3.4
- name: Set up JDK 1.8
uses: actions/setup-java@v1
uses: actions/setup-java@v2.3.0
with:
java-version: 1.8
java-version: '8'
distribution: 'zulu'

- name: Download jq-1.5 and jq-1.6
run: |
Expand Down
25 changes: 25 additions & 0 deletions .github/workflows/test-pull-requests.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
name: 'test-pull-requests'
on:
pull_request:
branches:
- develop/1.x
jobs:
build:
runs-on: ubuntu-18.04
steps:
- uses: actions/[email protected]
- name: Set up JDK 1.8
uses: actions/[email protected]
with:
java-version: '8'
distribution: 'zulu'

- name: Download jq-1.5 and jq-1.6
run: |
mkdir -p $HOME/bin
wget -O $HOME/bin/jq-1.5 https://github.com/stedolan/jq/releases/download/jq-1.5/jq-linux64
wget -O $HOME/bin/jq-1.6 https://github.com/stedolan/jq/releases/download/jq-1.6/jq-linux64
chmod +x $HOME/bin/jq-1.5 $HOME/bin/jq-1.6
- name: Build & Deploy
run: 'PATH="$HOME/bin:$PATH" mvn clean package'
323 changes: 294 additions & 29 deletions README.md

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions jackson-jq-cli/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,14 @@
<parent>
<groupId>net.thisptr</groupId>
<artifactId>jackson-jq-parent</artifactId>
<version>1.0.0-preview.20210610</version>
<version>1.0.0-preview.20210926</version>
</parent>

<dependencies>
<dependency>
<groupId>net.thisptr</groupId>
<artifactId>jackson-jq-extra</artifactId>
<version>1.0.0-preview.20210610</version>
<version>1.0.0-preview.20210926</version>
</dependency>
<dependency>
<groupId>commons-cli</groupId>
Expand Down
4 changes: 2 additions & 2 deletions jackson-jq-extra/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,14 @@
<parent>
<groupId>net.thisptr</groupId>
<artifactId>jackson-jq-parent</artifactId>
<version>1.0.0-preview.20210610</version>
<version>1.0.0-preview.20210926</version>
</parent>

<dependencies>
<dependency>
<groupId>net.thisptr</groupId>
<artifactId>jackson-jq</artifactId>
<version>1.0.0-preview.20210610</version>
<version>1.0.0-preview.20210926</version>
</dependency>
</dependencies>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,13 @@
import com.fasterxml.jackson.databind.node.TextNode;
import com.google.auto.service.AutoService;

import net.thisptr.jackson.jq.BuiltinFunction;
import net.thisptr.jackson.jq.Expression;
import net.thisptr.jackson.jq.Function;
import net.thisptr.jackson.jq.PathOutput;
import net.thisptr.jackson.jq.Scope;
import net.thisptr.jackson.jq.Version;
import net.thisptr.jackson.jq.exception.JsonQueryException;
import net.thisptr.jackson.jq.internal.BuiltinFunction;
import net.thisptr.jackson.jq.path.Path;

@AutoService(Function.class)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,13 @@
import com.fasterxml.jackson.databind.node.DoubleNode;
import com.google.auto.service.AutoService;

import net.thisptr.jackson.jq.BuiltinFunction;
import net.thisptr.jackson.jq.Expression;
import net.thisptr.jackson.jq.Function;
import net.thisptr.jackson.jq.PathOutput;
import net.thisptr.jackson.jq.Scope;
import net.thisptr.jackson.jq.Version;
import net.thisptr.jackson.jq.exception.JsonQueryException;
import net.thisptr.jackson.jq.internal.BuiltinFunction;
import net.thisptr.jackson.jq.path.Path;

@AutoService(Function.class)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,15 @@
import com.fasterxml.jackson.databind.node.TextNode;
import com.google.auto.service.AutoService;

import net.thisptr.jackson.jq.BuiltinFunction;
import net.thisptr.jackson.jq.Expression;
import net.thisptr.jackson.jq.Function;
import net.thisptr.jackson.jq.PathOutput;
import net.thisptr.jackson.jq.Scope;
import net.thisptr.jackson.jq.Version;
import net.thisptr.jackson.jq.exception.JsonQueryException;
import net.thisptr.jackson.jq.exception.JsonQueryTypeException;
import net.thisptr.jackson.jq.internal.BuiltinFunction;
import net.thisptr.jackson.jq.internal.misc.Preconditions;
import net.thisptr.jackson.jq.extra.internal.misc.Preconditions;
import net.thisptr.jackson.jq.path.Path;

@AutoService(Function.class)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,15 @@
import com.fasterxml.jackson.databind.node.LongNode;
import com.google.auto.service.AutoService;

import net.thisptr.jackson.jq.BuiltinFunction;
import net.thisptr.jackson.jq.Expression;
import net.thisptr.jackson.jq.Function;
import net.thisptr.jackson.jq.PathOutput;
import net.thisptr.jackson.jq.Scope;
import net.thisptr.jackson.jq.Version;
import net.thisptr.jackson.jq.exception.JsonQueryException;
import net.thisptr.jackson.jq.exception.JsonQueryTypeException;
import net.thisptr.jackson.jq.internal.BuiltinFunction;
import net.thisptr.jackson.jq.internal.misc.Preconditions;
import net.thisptr.jackson.jq.extra.internal.misc.Preconditions;
import net.thisptr.jackson.jq.path.Path;

@AutoService(Function.class)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,13 @@
import com.fasterxml.jackson.databind.node.LongNode;
import com.google.auto.service.AutoService;

import net.thisptr.jackson.jq.BuiltinFunction;
import net.thisptr.jackson.jq.Expression;
import net.thisptr.jackson.jq.Function;
import net.thisptr.jackson.jq.PathOutput;
import net.thisptr.jackson.jq.Scope;
import net.thisptr.jackson.jq.Version;
import net.thisptr.jackson.jq.exception.JsonQueryException;
import net.thisptr.jackson.jq.internal.BuiltinFunction;
import net.thisptr.jackson.jq.path.Path;

@AutoService(Function.class)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,14 @@
import com.fasterxml.jackson.databind.node.TextNode;
import com.google.auto.service.AutoService;

import net.thisptr.jackson.jq.BuiltinFunction;
import net.thisptr.jackson.jq.Expression;
import net.thisptr.jackson.jq.Function;
import net.thisptr.jackson.jq.PathOutput;
import net.thisptr.jackson.jq.Scope;
import net.thisptr.jackson.jq.Version;
import net.thisptr.jackson.jq.exception.JsonQueryException;
import net.thisptr.jackson.jq.internal.BuiltinFunction;
import net.thisptr.jackson.jq.internal.misc.Preconditions;
import net.thisptr.jackson.jq.extra.internal.misc.Preconditions;
import net.thisptr.jackson.jq.path.Path;

@AutoService(Function.class)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,14 @@
import com.fasterxml.jackson.databind.node.TextNode;
import com.google.auto.service.AutoService;

import net.thisptr.jackson.jq.BuiltinFunction;
import net.thisptr.jackson.jq.Expression;
import net.thisptr.jackson.jq.Function;
import net.thisptr.jackson.jq.PathOutput;
import net.thisptr.jackson.jq.Scope;
import net.thisptr.jackson.jq.Version;
import net.thisptr.jackson.jq.exception.JsonQueryException;
import net.thisptr.jackson.jq.internal.BuiltinFunction;
import net.thisptr.jackson.jq.internal.misc.Preconditions;
import net.thisptr.jackson.jq.extra.internal.misc.Preconditions;
import net.thisptr.jackson.jq.path.Path;

@AutoService(Function.class)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,13 @@
import com.fasterxml.jackson.databind.node.TextNode;
import com.google.auto.service.AutoService;

import net.thisptr.jackson.jq.BuiltinFunction;
import net.thisptr.jackson.jq.Expression;
import net.thisptr.jackson.jq.Function;
import net.thisptr.jackson.jq.PathOutput;
import net.thisptr.jackson.jq.Scope;
import net.thisptr.jackson.jq.Version;
import net.thisptr.jackson.jq.exception.JsonQueryException;
import net.thisptr.jackson.jq.internal.BuiltinFunction;
import net.thisptr.jackson.jq.path.Path;

@AutoService(Function.class)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package net.thisptr.jackson.jq.extra.internal.misc;

import java.util.Arrays;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.JsonNodeType;

import net.thisptr.jackson.jq.exception.IllegalJsonInputException;

public class Preconditions {

public static void checkInputType(final String fname, final JsonNode in, final JsonNodeType... types) throws IllegalJsonInputException {
final JsonNodeType t = in.getNodeType();
for (final JsonNodeType type : types)
if (t == type)
return;
throw new IllegalJsonInputException(String.format("%s is not applicable to %s; expected one of %s", fname, in.getNodeType(), Arrays.toString(types)));
}
}
4 changes: 2 additions & 2 deletions jackson-jq/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,14 @@
<parent>
<groupId>net.thisptr</groupId>
<artifactId>jackson-jq-parent</artifactId>
<version>1.0.0-preview.20210610</version>
<version>1.0.0-preview.20210926</version>
</parent>

<dependencies>
<dependency>
<groupId>org.jruby.joni</groupId>
<artifactId>joni</artifactId>
<version>2.1.29</version>
<version>2.1.41</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package net.thisptr.jackson.jq;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface BuiltinFunction {
String[] value();

String version() default "";
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,6 @@
import com.fasterxml.jackson.databind.MappingIterator;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;

import net.thisptr.jackson.jq.internal.BuiltinFunction;
import net.thisptr.jackson.jq.internal.IsolatedScopeQuery;
import net.thisptr.jackson.jq.internal.JsonQueryFunction;
import net.thisptr.jackson.jq.internal.javacc.ExpressionParser;
Expand Down Expand Up @@ -78,8 +76,8 @@ private static String resolvePath(final Class<?> clazz, final String name) {
*/
public Map<String, Function> listFunctions(final ClassLoader classLoader, final Version version, final Scope closureScope) {
final Map<String, Function> functions = new HashMap<>();
loadMacros(functions, classLoader, version, closureScope);
loadBuiltinFunctions(functions, version, classLoader);
functions.putAll(loadFunctionsFromJsonJq(classLoader, version, closureScope));
functions.putAll(loadFunctionsFromServiceLoader(classLoader, version));
return functions;
}

Expand Down Expand Up @@ -119,23 +117,58 @@ private static List<JqJson> loadConfig(final ClassLoader loader, final String pa
return result;
}

private void loadBuiltinFunctions(final Map<String, Function> functions, final Version version, final ClassLoader classLoader) {
private static String[] extractFunctionNamesFromAnnotationIfVersionMatch(Function fn, final Version version) {
final net.thisptr.jackson.jq.BuiltinFunction annotation = fn.getClass().getAnnotation(net.thisptr.jackson.jq.BuiltinFunction.class);
if (annotation == null)
return null;
if (!annotation.version().isEmpty()) {
final VersionRange range = VersionRange.valueOf(annotation.version());
if (!range.contains(version))
return new String[0];
}
return annotation.value();
}

@SuppressWarnings("deprecation")
private static String[] extractFunctionNamesFromDeprecatedAnnotationIfVersionMatch(Function fn, final Version version) {
final net.thisptr.jackson.jq.internal.BuiltinFunction annotation = fn.getClass().getAnnotation(net.thisptr.jackson.jq.internal.BuiltinFunction.class);
if (annotation == null)
return null;
if (!annotation.version().isEmpty()) {
final VersionRange range = VersionRange.valueOf(annotation.version());
if (!range.contains(version))
return new String[0];
}
return annotation.value();
}

/**
* Do not use this method. This method is only for Quarkus extension.
*/
public Map<String, Function> loadFunctionsFromServiceLoader(final ClassLoader classLoader, final Version version) {
final Map<String, Function> functions = new HashMap<>();
for (final Function fn : ServiceLoader.load(Function.class, classLoader)) {
final BuiltinFunction annotation = fn.getClass().getAnnotation(BuiltinFunction.class);
if (annotation == null)
continue;
if (!annotation.version().isEmpty()) {
final VersionRange range = VersionRange.valueOf(annotation.version());
if (!range.contains(version))
continue;
String[] names = extractFunctionNamesFromAnnotationIfVersionMatch(fn, version);
if (names == null) { // i.e. if annotation is missing,
// Look for deprecated annotation as well for compatibility reasons. TODO: Delete this in 1.0.0 release.
names = extractFunctionNamesFromDeprecatedAnnotationIfVersionMatch(fn, version);
}
for (final String name : annotation.value())

if (names == null) // i.e. no annotations found
continue;

for (final String name : names)
functions.put(name, fn);
}
return functions;
}

private void loadMacros(final Map<String, Function> functions, final ClassLoader classLoader, final Version version, final Scope closureScope) {
/**
* Do not use this method. This method is only for Quarkus extension.
*/
public Map<String, Function> loadFunctionsFromJsonJq(final ClassLoader classLoader, final Version version, final Scope closureScope) {
try {
final Map<String, Function> functions = new HashMap<>();
final List<JqJson> configs = loadConfig(classLoader, CONFIG_PATH);
for (final JqJson jqJson : configs) {
for (final JqJson.JqFuncDef def : jqJson.functions) {
Expand All @@ -144,6 +177,7 @@ private void loadMacros(final Map<String, Function> functions, final ClassLoader
functions.put(def.name + "/" + def.args.size(), new JsonQueryFunction(def.name, def.args, new IsolatedScopeQuery(ExpressionParser.compile(def.body, version)), closureScope));
}
}
return functions;
} catch (final IOException e) {
throw new RuntimeException("Failed to load macros", e);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,12 @@
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
* @deprecated Use {@link net.thisptr.jackson.jq.BuiltinFunction} instead.
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Deprecated
public @interface BuiltinFunction {
String[] value();

Expand Down
Loading

0 comments on commit 5186c99

Please sign in to comment.