Skip to content

Commit fccc068

Browse files
authored
Add a basic logger interface (#138)
* Add a basic logger interface * More tweaks * Add log level cli arg * Fix build
1 parent b19f62e commit fccc068

18 files changed

+217
-151
lines changed

src/main/java/net/fabricmc/tinyremapper/AsmClassRemapper.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -280,15 +280,14 @@ public void visitInvokeDynamicInsn(String name, String descriptor, Handle bootst
280280
bootstrapMethodArguments);
281281
}
282282

283-
private static Handle getLambdaImplementedMethod(String name, String desc, Handle bsm, Set<String> knownIndyBsm, Object... bsmArgs) {
283+
private Handle getLambdaImplementedMethod(String name, String desc, Handle bsm, Set<String> knownIndyBsm, Object... bsmArgs) {
284284
if (isJavaLambdaMetafactory(bsm)) {
285285
assert desc.endsWith(";");
286286
return new Handle(Opcodes.H_INVOKEINTERFACE, desc.substring(desc.lastIndexOf(')') + 2, desc.length() - 1), name, ((Type) bsmArgs[0]).getDescriptor(), true);
287287
} else if (knownIndyBsm.contains(bsm.getOwner())) {
288288
return null;
289289
} else {
290-
System.out.printf("unknown invokedynamic bsm: %s/%s%s (tag=%d iif=%b)%n", bsm.getOwner(), bsm.getName(), bsm.getDesc(), bsm.getTag(), bsm.isInterface());
291-
290+
tr.getLogger().warn("unknown invokedynamic bsm: %s/%s%s (tag=%d iif=%b)", bsm.getOwner(), bsm.getName(), bsm.getDesc(), bsm.getTag(), bsm.isInterface());
292291
return null;
293292
}
294293
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/*
2+
* Copyright (c) 2016, 2018, Player, asie
3+
* Copyright (c) 2019, 2022, FabricMC
4+
*
5+
* This program is free software: you can redistribute it and/or modify
6+
* it under the terms of the GNU Lesser General Public License as published by
7+
* the Free Software Foundation, either version 3 of the License, or
8+
* (at your option) any later version.
9+
*
10+
* This program is distributed in the hope that it will be useful,
11+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13+
* GNU Lesser General Public License for more details.
14+
*
15+
* You should have received a copy of the GNU Lesser General Public License
16+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
17+
*/
18+
19+
package net.fabricmc.tinyremapper;
20+
21+
import net.fabricmc.tinyremapper.api.TrLogger;
22+
23+
public final class ConsoleLogger implements TrLogger {
24+
private TrLogger.Level level;
25+
26+
public ConsoleLogger(TrLogger.Level level) {
27+
this.level = level;
28+
}
29+
30+
public ConsoleLogger() {
31+
this(TrLogger.Level.INFO);
32+
}
33+
34+
public void setLevel(TrLogger.Level level) {
35+
this.level = level;
36+
}
37+
38+
@Override
39+
public void log(Level level, String message) {
40+
if (this.level.compareTo(level) <= 0) {
41+
System.out.println("[" + level + "] " + message);
42+
}
43+
}
44+
}

src/main/java/net/fabricmc/tinyremapper/Main.java

+18-12
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import java.util.regex.Pattern;
4040

4141
import net.fabricmc.tinyremapper.TinyRemapper.LinkedMethodPropagation;
42+
import net.fabricmc.tinyremapper.api.TrLogger;
4243

4344
public class Main {
4445
public static void main(String[] rawArgs) {
@@ -69,6 +70,8 @@ public static void main(String[] rawArgs) {
6970
ServiceLoader.load(TinyRemapper.CLIExtensionProvider.class);
7071
cliProviderLoader.iterator().forEachRemaining(provider -> providerMap.put(provider.name(), provider));
7172

73+
final ConsoleLogger logger = new ConsoleLogger();
74+
7275
for (String arg : rawArgs) {
7376
if (arg.startsWith("--")) {
7477
int valueSepPos = arg.indexOf('=');
@@ -94,7 +97,7 @@ public static void main(String[] rawArgs) {
9497
case "enabled": propagateBridges = LinkedMethodPropagation.ENABLED; break;
9598
case "compatible": propagateBridges = LinkedMethodPropagation.COMPATIBLE; break;
9699
default:
97-
System.out.println("invalid propagateBridges: "+arg.substring(valueSepPos + 1));
100+
logger.error("invalid propagateBridges: "+arg.substring(valueSepPos + 1));
98101
System.exit(1);
99102
}
100103

@@ -135,7 +138,7 @@ public static void main(String[] rawArgs) {
135138
case "fixmeta": ncCopyMode = NonClassCopyMode.FIX_META_INF; break;
136139
case "skipmeta": ncCopyMode = NonClassCopyMode.SKIP_META_INF; break;
137140
default:
138-
System.out.println("invalid nonClassCopyMode: "+arg.substring(valueSepPos + 1));
141+
logger.error("invalid nonClassCopyMode: "+arg.substring(valueSepPos + 1));
139142
System.exit(1);
140143
}
141144

@@ -144,7 +147,7 @@ public static void main(String[] rawArgs) {
144147
threads = Integer.parseInt(arg.substring(valueSepPos + 1));
145148

146149
if (threads <= 0) {
147-
System.out.println("Thread count must be > 0");
150+
logger.error("Thread count must be > 0");
148151
System.exit(1);
149152
}
150153

@@ -156,8 +159,11 @@ public static void main(String[] rawArgs) {
156159
case "extension":
157160
handleExtension(providerMap, arg.substring(valueSepPos + 1), providedExtensions);
158161
break;
162+
case "loglevel":
163+
logger.setLevel(TrLogger.Level.valueOf(arg.substring(valueSepPos + 1).toUpperCase(Locale.ENGLISH)));
164+
break;
159165
default:
160-
System.out.println("invalid argument: "+arg+".");
166+
logger.error("invalid argument: "+arg+".");
161167
System.exit(1);
162168
}
163169
} else {
@@ -166,22 +172,22 @@ public static void main(String[] rawArgs) {
166172
}
167173

168174
if (args.size() < 5) {
169-
System.out.println("usage: <input> <output> <mappings> <from> <to> [<classpath>]... [--reverse] [--forcePropagation=<file>] [--propagatePrivate] [--ignoreConflicts]");
175+
logger.error("usage: <input> <output> <mappings> <from> <to> [<classpath>]... [--reverse] [--forcePropagation=<file>] [--propagatePrivate] [--ignoreConflicts]");
170176
System.exit(1);
171177
}
172178

173179
Path input = Paths.get(args.get(0));
174180

175181
if (!Files.isReadable(input)) {
176-
System.out.println("Can't read input file "+input+".");
182+
logger.error("Can't read input file "+input+".");
177183
System.exit(1);
178184
}
179185

180186
Path output = Paths.get(args.get(1));
181187
Path mappings = Paths.get(args.get(2));
182188

183189
if (!Files.isReadable(mappings) || Files.isDirectory(mappings)) {
184-
System.out.println("Can't read mappings file "+mappings+".");
190+
logger.error("Can't read mappings file "+mappings+".");
185191
System.exit(1);
186192
}
187193

@@ -194,7 +200,7 @@ public static void main(String[] rawArgs) {
194200
classpath[i] = Paths.get(args.get(i + 5));
195201

196202
if (!Files.isReadable(classpath[i])) {
197-
System.out.println("Can't read classpath file "+i+": "+classpath[i]+".");
203+
logger.error("Can't read classpath file "+i+": "+classpath[i]+".");
198204
System.exit(1);
199205
}
200206
}
@@ -203,7 +209,7 @@ public static void main(String[] rawArgs) {
203209
forcePropagation = new HashSet<>();
204210

205211
if (!forcePropagationFile.canRead()) {
206-
System.out.println("Can't read forcePropagation file "+forcePropagationFile+".");
212+
logger.error("Can't read forcePropagation file "+forcePropagationFile+".");
207213
System.exit(1);
208214
}
209215

@@ -225,7 +231,7 @@ public static void main(String[] rawArgs) {
225231

226232
if (knownIndyBsmFile != null) {
227233
if (!knownIndyBsmFile.canRead()) {
228-
System.out.println("Can't read knownIndyBsm file "+knownIndyBsmFile+".");
234+
logger.error("Can't read knownIndyBsm file "+knownIndyBsmFile+".");
229235
System.exit(1);
230236
}
231237

@@ -247,7 +253,7 @@ public static void main(String[] rawArgs) {
247253

248254
long startTime = System.nanoTime();
249255

250-
TinyRemapper.Builder builder = TinyRemapper.newRemapper()
256+
TinyRemapper.Builder builder = TinyRemapper.newRemapper(logger)
251257
.withMappings(TinyUtils.createTinyMappingProvider(mappings, fromM, toM))
252258
.ignoreFieldDesc(ignoreFieldDesc)
253259
.withForcedPropagation(forcePropagation)
@@ -285,7 +291,7 @@ public static void main(String[] rawArgs) {
285291
remapper.finish();
286292
}
287293

288-
System.out.printf("Finished after %.2f ms.\n", (System.nanoTime() - startTime) / 1e6);
294+
logger.info("Finished after %.2f ms.", (System.nanoTime() - startTime) / 1e6);
289295
}
290296

291297
private static void handleExtension(Map<String, TinyRemapper.CLIExtensionProvider> providerMap, String extName, List<TinyRemapper.Extension> providedExtensions) {

src/main/java/net/fabricmc/tinyremapper/PackageAccessChecker.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ public static void checkClass(String accessingClass, String targetClass, String
6161
// target class is not public and in a different package
6262
// -> invalid access detected, needs to be public
6363

64-
System.out.printf("Invalid access from %s in %s to package-private class %s after remapping.%n",
64+
remapper.tr.getLogger().warn("Invalid access from %s in %s to package-private class %s after remapping.%n",
6565
source,
6666
mappedAccessor,
6767
mappedTarget);
@@ -211,7 +211,7 @@ public static void checkMember(String accessingOwner, String owner, String name,
211211
}
212212
}
213213

214-
System.out.printf("Invalid access from %s in %s to %s after remapping.%n",
214+
remapper.tr.getLogger().warn("Invalid access from %s in %s to %s after remapping.%n",
215215
source,
216216
mappedAccessor,
217217
inaccessible);

0 commit comments

Comments
 (0)