zzz40500 / GsonFormat

根据Gson库使用的要求,将JSONObject格式的String 解析成实体
Apache License 2.0
3.17k stars 569 forks source link

StringIndexOutOfBoundsException: String index out of range: -1 #86

Open Bpazy opened 7 years ago

Bpazy commented 7 years ago

IDEA版本: 2017.1.1 GsonFormat版本: 1.5.0

最简单的json,也会报错。

{
    "key":"value"
}

Detail:

java.lang.StringIndexOutOfBoundsException: String index out of range: -1
java.lang.RuntimeException: java.lang.StringIndexOutOfBoundsException: String index out of range: -1
    at com.intellij.openapi.application.TransactionGuardImpl.submitTransactionAndWait(TransactionGuardImpl.java:174)
    at com.intellij.openapi.command.WriteCommandAction.execute(WriteCommandAction.java:155)
    at org.gsonformat.intellij.action.DataWriter.execute(DataWriter.java:74)
    at org.gsonformat.intellij.action.DataWriter$1.run(DataWriter.java:54)
    at com.intellij.openapi.progress.impl.CoreProgressManager$TaskRunnable.run(CoreProgressManager.java:726)
    at com.intellij.openapi.progress.impl.CoreProgressManager.a(CoreProgressManager.java:176)
    at com.intellij.openapi.progress.impl.CoreProgressManager.a(CoreProgressManager.java:556)
    at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:501)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:66)
    at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:163)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl$1.run(ProgressManagerImpl.java:137)
    at com.intellij.openapi.application.impl.ApplicationImpl$2.run(ApplicationImpl.java:334)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: -1
    at java.lang.String.substring(String.java:1967)
    at org.gsonformat.intellij.common.PsiClassUtil.getPackage(PsiClassUtil.java:160)
    at org.gsonformat.intellij.process.Processor.process(Processor.java:44)
    at org.gsonformat.intellij.process.ClassProcessor.generate(ClassProcessor.java:24)
    at org.gsonformat.intellij.action.DataWriter.run(DataWriter.java:83)
    at com.intellij.openapi.command.WriteCommandAction$Simple.run(WriteCommandAction.java:234)
    at com.intellij.openapi.application.RunResult.run(RunResult.java:35)
    at com.intellij.openapi.command.WriteCommandAction.lambda$null$1(WriteCommandAction.java:171)
    at com.intellij.openapi.application.impl.ApplicationImpl.runWriteAction(ApplicationImpl.java:1023)
    at com.intellij.openapi.command.WriteCommandAction.lambda$performWriteCommandAction$2(WriteCommandAction.java:170)
    at com.intellij.openapi.command.WriteCommandAction.lambda$doExecuteCommand$4(WriteCommandAction.java:210)
    at com.intellij.openapi.command.impl.CoreCommandProcessor.a(CoreCommandProcessor.java:149)
    at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:119)
    at com.intellij.openapi.command.WriteCommandAction.doExecuteCommand(WriteCommandAction.java:212)
    at com.intellij.openapi.command.WriteCommandAction.performWriteCommandAction(WriteCommandAction.java:168)
    at com.intellij.openapi.command.WriteCommandAction.lambda$execute$0(WriteCommandAction.java:155)
    at com.intellij.openapi.application.TransactionGuardImpl.a(TransactionGuardImpl.java:163)
    at com.intellij.openapi.application.TransactionGuardImpl.a(TransactionGuardImpl.java:86)
    at com.intellij.openapi.application.TransactionGuardImpl.a(TransactionGuardImpl.java:109)
    at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.a(LaterInvocator.java:410)
    at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.run(LaterInvocator.java:399)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:762)
    at java.awt.EventQueue.access$500(EventQueue.java:98)
    at java.awt.EventQueue$3.run(EventQueue.java:715)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:732)
    at com.intellij.ide.IdeEventQueue.e(IdeEventQueue.java:827)
    at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:655)
    at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:365)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
ghoslin01 commented 7 years ago

+1 麻烦修复一下吧

thetcc commented 7 years ago

+1 我还以为就我有问题,还给作者发了邮件

thetcc commented 7 years ago

@Bpazy @ghoslin01 我也出现和你们一样的问题,看了下源代码,发现是包名的问题,如果你的类没有包名就会出这个错,有包名就不会出错。

public static String getPackage(PsiClass cls) {
        if (cls.getQualifiedName() == null) {
            return null;
        }
        int i = cls.getQualifiedName().lastIndexOf(".");
        return cls.getQualifiedName().substring(0, i);
    }

修改成

public static String getPackage(PsiClass cls) {
        if (cls.getQualifiedName() == null) {
            return null;
        }
        int i = cls.getQualifiedName().lastIndexOf(".");
        if(i>-1){
          return cls.getQualifiedName().substring(0, i);
       }else{
          return "";
      }

    }

不知道是不是就能解决呢