Skip to content

Commit

Permalink
Merge pull request #26 from Omega-R/develop
Browse files Browse the repository at this point in the history
Develop
  • Loading branch information
anton-knyazev authored Dec 28, 2020
2 parents c9d1e7e + 1091c81 commit a0891eb
Show file tree
Hide file tree
Showing 16 changed files with 263 additions and 145 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import com.omegar.mvp.presenter.InjectPresenter
import example.com.moxy_androidx_sample.contract.Contract
import example.com.moxy_androidx_sample.packagee.Item

class MainActivity : BaseActivity(R.layout.activity_main), Contract.MainView, SecondInterface {
class MainActivity : BaseActivity(R.layout.activity_main), Contract.MainView<Double>, SecondInterface {
// override fun fourth(item: String?) {
// TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
// }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package example.com.moxy_androidx_sample
import android.util.Log
import example.com.moxy_androidx_sample.contract.Contract

class MainPresenter : BasePresenter<Contract.MainView>() {
class MainPresenter : BasePresenter<Contract.MainView<Double>>() {

override fun onFirstViewAttach() {
super.onFirstViewAttach()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@ import example.com.moxy_androidx_sample.BaseView

interface Contract {

interface MainView : BaseView {
interface MainView<D: Number> : BaseView {

@StateStrategyType(ADD_TO_END_SINGLE)
fun printLog(msg: Double?, log: String?)
fun printLog(msg: D?, log: String?)

}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import com.omegar.mvp.compiler.reflector.MoxyReflectorProcessor;
import com.omegar.mvp.compiler.viewstate.ElementToViewInterfaceInfoProcessor;
import com.omegar.mvp.compiler.viewstate.ViewInterfaceInfoToViewStateJavaFileProcessor;
import com.omegar.mvp.compiler.viewstate.ViewInterfaceInfoValidator;
import com.omegar.mvp.compiler.viewstateprovider.ElementToPresenterInfoProcessor;
import com.omegar.mvp.compiler.viewstateprovider.NormalPresenterValidator;
import com.omegar.mvp.compiler.viewstateprovider.PresenterInfoToViewStateProviderJavaFileProcessor;
Expand Down Expand Up @@ -53,7 +54,7 @@
*
* @author Yuri Shmakov
*/

@SuppressWarnings("NewApi")
@AutoService(Processor.class)
@IncrementalAnnotationProcessor(IncrementalAnnotationProcessorType.DYNAMIC)
public class MvpCompiler extends AbstractProcessor {
Expand Down Expand Up @@ -134,10 +135,8 @@ public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment
}

private boolean throwableProcess(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {

String currentMoxyReflectorPackage = mOptions.getOrDefault(OPTION_MOXY_REFLECTOR_PACKAGE, DEFAULT_MOXY_REFLECTOR_PACKAGE);


Publisher<TypeElement> presenterContainerElementPublisher = new Publisher<>();
Publisher<TypeElement> presenterElementPublisher = new Publisher<>();
Publisher<TypeElement> viewElementPublisher = new Publisher<>();
Expand All @@ -146,6 +145,36 @@ private boolean throwableProcess(Set<? extends TypeElement> annotations, RoundEn

JavaFileWriter fileWriter = new JavaFileWriter(processingEnv.getFiler());

// moxyReflectorPipeline
new Pipeline.Builder<>(
QuadPublisher.collectQuad(
presenterElementPublisher,
presenterContainerElementPublisher,
strategiesElementPublisher,
reflectorPackagesPublisher))
.addProcessor(new MoxyReflectorProcessor(currentMoxyReflectorPackage))
.buildPipeline(fileWriter)
.start();


// viewStatePipeline
new Pipeline.Builder<>(viewElementPublisher)
.addProcessor(new ElementToViewInterfaceInfoProcessor(mElements, mTypes, mMessager, strategiesElementPublisher))
.uniqueFilter()
.addValidator(new ViewInterfaceInfoValidator(mElements, currentMoxyReflectorPackage))
.addProcessor(new ViewInterfaceInfoToViewStateJavaFileProcessor(mElements, mTypes, currentMoxyReflectorPackage, reflectorPackagesPublisher))
.buildPipeline(fileWriter)
.start();

// viewStateProviderPipeline
new Pipeline.Builder<>(new ElementsAnnotatedGenerator<>(roundEnv, mMessager, mInjectViewStateAnnotation))
.addProcessor(new ElementToPresenterInfoProcessor(mElements, viewElementPublisher))
.addValidator(new NormalPresenterValidator())
.copyTypeElementTo(presenterElementPublisher)
.addProcessor(new PresenterInfoToViewStateProviderJavaFileProcessor().withCache())
.buildPipeline(fileWriter)
.start();

if (mInjectPresenterAnnotation.contains(annotations)) {
checkInjectors(roundEnv, new PresenterInjectorRules(mElements, mMessager, mInjectPresenterAnnotation, Modifier.PUBLIC, Modifier.PROTECTED, Modifier.DEFAULT));

Expand All @@ -162,35 +191,7 @@ private boolean throwableProcess(Set<? extends TypeElement> annotations, RoundEn
presenterContainerElementPublisher.finish();
}

// viewStateProviderPipeline
new Pipeline.Builder<>(new ElementsAnnotatedGenerator<>(roundEnv, mMessager, mInjectViewStateAnnotation))
.addProcessor(new ElementToPresenterInfoProcessor(mElements, viewElementPublisher))
.addValidator(new NormalPresenterValidator())
.copyTypeElementTo(presenterElementPublisher)
.addProcessor(new PresenterInfoToViewStateProviderJavaFileProcessor().withCache())
.buildPipeline(fileWriter)
.start();

// viewStatePipeline
new Pipeline.Builder<>(viewElementPublisher)
.addProcessor(new ElementToViewInterfaceInfoProcessor(mElements, mTypes, mMessager, strategiesElementPublisher))
.uniqueFilter()
.addProcessor(new ViewInterfaceInfoToViewStateJavaFileProcessor(mElements, mTypes, currentMoxyReflectorPackage, reflectorPackagesPublisher))
.buildPipeline(fileWriter)
.start();


// moxyReflectorPipeline
new Pipeline.Builder<>(
QuadPublisher.collectQuad(
presenterElementPublisher,
presenterContainerElementPublisher,
strategiesElementPublisher,
reflectorPackagesPublisher))
.addProcessor(new MoxyReflectorProcessor(currentMoxyReflectorPackage))
.buildPipeline(fileWriter)
.start();

fileWriter.shutdown();

return true;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,81 +1,88 @@
package com.omegar.mvp.compiler.entity;

import com.omegar.mvp.MvpProcessor;
import com.omegar.mvp.compiler.Util;
import com.squareup.javapoet.ClassName;
import com.squareup.javapoet.ParameterizedTypeName;
import com.squareup.javapoet.TypeName;
import com.squareup.javapoet.TypeVariableName;

import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;

import javax.annotation.Nullable;
import javax.lang.model.element.TypeElement;
import javax.lang.model.util.Elements;

/**
* Date: 27-Jul-2017
* Time: 13:04
*
* @author Evgeny Kursakov
*/
@SuppressWarnings("NewApi")
public class ViewInterfaceInfo implements TypeElementHolder {
@Nullable
private final ViewInterfaceInfo superInterfaceInfo;
private final TypeElement element;
private final ClassName name;
private final List<TypeVariableName> typeVariables;
private final List<ViewMethod> methods;
private final TypeElement mSuperInterfaceType;
private final TypeElement mElement;
private final ClassName mName;
private final List<TypeVariableName> mTypeVariables;
private final List<ViewMethod> mMethods;

public ViewInterfaceInfo(TypeElement element, List<ViewMethod> methods) {
this(null, element, methods);
}

public ViewInterfaceInfo(@Nullable ViewInterfaceInfo superInterfaceInfo, TypeElement element, List<ViewMethod> methods) {
this.superInterfaceInfo = superInterfaceInfo;
this.element = element;
this.name = ClassName.get(element);
this.methods = methods;
public ViewInterfaceInfo(@Nullable TypeElement superInterfaceType, TypeElement element, List<ViewMethod> methods) {
mSuperInterfaceType = superInterfaceType;
mElement = element;
mName = ClassName.get(element);
mMethods = methods;

this.typeVariables = element.getTypeParameters().stream()
mTypeVariables = element.getTypeParameters().stream()
.map(TypeVariableName::get)
.collect(Collectors.toList());

}

@Nullable
public ViewInterfaceInfo getSuperInterfaceInfo() {
return superInterfaceInfo;
public TypeElement getSuperInterfaceType() {
return mSuperInterfaceType;
}

public TypeElement getTypeElement() {
return element;
return mElement;
}

public ClassName getName() {
return name;
return mName;
}

public TypeName getNameWithTypeVariables() {
if (typeVariables.isEmpty()) {
return name;
if (mTypeVariables.isEmpty()) {
return mName;
} else {
TypeVariableName[] names = new TypeVariableName[typeVariables.size()];
typeVariables.toArray(names);
TypeVariableName[] names = new TypeVariableName[mTypeVariables.size()];
mTypeVariables.toArray(names);

return ParameterizedTypeName.get(name, names);
return ParameterizedTypeName.get(mName, names);
}
}

public List<TypeVariableName> getTypeVariables() {
return typeVariables;
return mTypeVariables;
}

public List<ViewMethod> getMethods() {
return methods;
return mMethods;
}

public TypeElement getSuperClassElement() {
return superInterfaceInfo == null ? null : superInterfaceInfo.getTypeElement();
public String getViewStateFullName(Elements elements) {
return getViewStateFullName(elements, mElement);
}

public String getViewStateSimpleName(Elements elements) {
return getViewStateSimpleName(elements, mElement);
}

@Override
Expand All @@ -85,19 +92,29 @@ public boolean equals(Object o) {

ViewInterfaceInfo that = (ViewInterfaceInfo) o;

return name != null ? name.equals(that.name) : that.name == null;
return mName != null ? mName.equals(that.mName) : that.mName == null;
}

@Override
public int hashCode() {
return name != null ? name.hashCode() : 0;
return mName != null ? mName.hashCode() : 0;
}

@Override
public String toString() {
return "ViewInterfaceInfo{" +
"superInterfaceInfo=" + superInterfaceInfo +
", element=" + element +
"superInterfaceInfo=" + mSuperInterfaceType +
", element=" + mElement +
'}';
}

public static String getViewStateFullName(Elements elements, TypeElement viewTypeElement) {
return Util.getFullClassName(elements, viewTypeElement) + MvpProcessor.VIEW_STATE_SUFFIX;
}

public static String getViewStateSimpleName(Elements elements, TypeElement viewTypeElement) {
return Util.getSimpleClassName(elements, viewTypeElement) + MvpProcessor.VIEW_STATE_SUFFIX;
}


}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.omegar.mvp.compiler.entity;

import com.omegar.mvp.compiler.MvpCompiler;
import com.omegar.mvp.compiler.Util;
import com.squareup.javapoet.ParameterSpec;
import com.squareup.javapoet.TypeName;
import com.squareup.javapoet.TypeVariableName;
Expand All @@ -23,6 +24,7 @@
*
* @author Evgeny Kursakov
*/
@SuppressWarnings("NewApi")
public class ViewMethod {
private final ExecutableElement methodElement;
private final String name;
Expand All @@ -48,9 +50,9 @@ public ViewMethod(Types types, DeclaredType targetInterfaceElement, ViewMethod m
}

public ViewMethod(Types types, DeclaredType targetInterfaceElement,
ExecutableElement methodElement,
TypeElement strategy,
String tag) {
ExecutableElement methodElement,
TypeElement strategy,
String tag) {
this.methodElement = methodElement;
this.name = methodElement.getSimpleName().toString();
this.strategy = strategy;
Expand Down Expand Up @@ -138,7 +140,7 @@ public String getArgumentsString() {
}

public String getCommandClassName() {
return name.substring(0, 1).toUpperCase() + name.substring(1) + uniqueSuffix + "Command";
return Util.capitalizeString(name) + uniqueSuffix + "Command";
}

public String getEnclosedClassName() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,28 +1,23 @@
package com.omegar.mvp.compiler.pipeline;

import com.omegar.mvp.compiler.MvpCompiler;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.Nullable;
import javax.tools.Diagnostic;
import java.util.LinkedHashSet;
import java.util.Set;

/**
* Created by Anton Knyazev on 05.12.2020.
*/

public class CollectListPublisher<I> extends Publisher<List<I>>{
public class CollectSetPublisher<I> extends Publisher<Set<I>>{

private final List<I> mResult = new ArrayList<>();
private final Set<I> mResult = new LinkedHashSet<>();
private final Publisher<I> mPublisher;

public CollectListPublisher(Publisher<I> publisher) {
public CollectSetPublisher(Publisher<I> publisher) {
mPublisher = publisher;
}

@Override
public void publish(PipelineContext<List<I>> context) {
public void publish(PipelineContext<Set<I>> context) {
super.publish(context);
mPublisher.publish(new LocalContext());
}
Expand All @@ -36,9 +31,9 @@ public void next(I nextData) {

@Override
public void finish() {
CollectListPublisher.this.next(new ArrayList<>(mResult));
CollectSetPublisher.this.next(new LinkedHashSet<>(mResult));
mResult.clear();
CollectListPublisher.this.finish();
CollectSetPublisher.this.finish();
}
}

Expand Down
Loading

0 comments on commit a0891eb

Please sign in to comment.