summaryrefslogtreecommitdiff
path: root/src/main/java/cuchaz/enigma/NoRetryMetadataSystem.java
blob: 269d31e15f7fa2c7148dd6cb6753d239ff52f987 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package cuchaz.enigma;

import com.strobel.assembler.metadata.ITypeLoader;
import com.strobel.assembler.metadata.MetadataSystem;
import com.strobel.assembler.metadata.TypeDefinition;
import com.strobel.assembler.metadata.TypeReference;

import java.util.Collections;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;

public final class NoRetryMetadataSystem extends MetadataSystem {
	private final Set<String> failedTypes = Collections.newSetFromMap(new ConcurrentHashMap<>());

	public NoRetryMetadataSystem(final ITypeLoader typeLoader) {
		super(typeLoader);
	}

	@Override
	protected synchronized TypeDefinition resolveType(final String descriptor, final boolean mightBePrimitive) {
		if (failedTypes.contains(descriptor)) {
			return null;
		}

		final TypeDefinition result = super.resolveType(descriptor, mightBePrimitive);

		if (result == null) {
			failedTypes.add(descriptor);
		}

		return result;
	}

	@Override
	public synchronized TypeDefinition resolve(final TypeReference type) {
		return super.resolve(type);
	}
}